<?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>232746</bug_id>
          
          <creation_ts>2021-11-04 23:13:25 -0700</creation_ts>
          <short_desc>[JSC] Use CallLinkInfo in LLInt</short_desc>
          <delta_ts>2021-11-14 18:44:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1812077</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-04 23:13:25 -0700</bug_when>
    <thetext>And purge LLIntCallLinkInfo. Let&apos;s use CallIC in LLInt too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812078</commentid>
    <comment_count>1</comment_count>
      <attachid>443379</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-04 23:14:55 -0700</bug_when>
    <thetext>Created attachment 443379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812079</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-04 23:16:28 -0700</bug_when>
    <thetext>Purged CallLinkInfo::doneLocation() dependency to make it usable in LLInt and Baseline without changing doneLocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812087</commentid>
    <comment_count>3</comment_count>
      <attachid>443382</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-05 01:21:17 -0700</bug_when>
    <thetext>Created attachment 443382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813946</commentid>
    <comment_count>4</comment_count>
      <attachid>443919</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 01:05:26 -0800</bug_when>
    <thetext>Created attachment 443919
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814102</commentid>
    <comment_count>5</comment_count>
      <attachid>443969</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 10:27:30 -0800</bug_when>
    <thetext>Created attachment 443969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814154</commentid>
    <comment_count>6</comment_count>
      <attachid>443987</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 12:08:28 -0800</bug_when>
    <thetext>Created attachment 443987
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814170</commentid>
    <comment_count>7</comment_count>
      <attachid>443992</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 12:58:42 -0800</bug_when>
    <thetext>Created attachment 443992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814269</commentid>
    <comment_count>8</comment_count>
      <attachid>444010</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 15:31:09 -0800</bug_when>
    <thetext>Created attachment 444010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814275</commentid>
    <comment_count>9</comment_count>
      <attachid>444014</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 15:44:24 -0800</bug_when>
    <thetext>Created attachment 444014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814276</commentid>
    <comment_count>10</comment_count>
      <attachid>444015</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 15:45:56 -0800</bug_when>
    <thetext>Created attachment 444015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814288</commentid>
    <comment_count>11</comment_count>
      <attachid>444018</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 16:18:57 -0800</bug_when>
    <thetext>Created attachment 444018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814297</commentid>
    <comment_count>12</comment_count>
      <attachid>444021</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 16:31:59 -0800</bug_when>
    <thetext>Created attachment 444021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814328</commentid>
    <comment_count>13</comment_count>
      <attachid>444032</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 18:09:51 -0800</bug_when>
    <thetext>Created attachment 444032
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814336</commentid>
    <comment_count>14</comment_count>
      <attachid>444036</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-11 19:20:25 -0800</bug_when>
    <thetext>Created attachment 444036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814352</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-11 22:14:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/85330561&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814572</commentid>
    <comment_count>16</comment_count>
      <attachid>444090</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-12 13:06:44 -0800</bug_when>
    <thetext>Created attachment 444090
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814577</commentid>
    <comment_count>17</comment_count>
      <attachid>444093</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-12 13:10:12 -0800</bug_when>
    <thetext>Created attachment 444093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814594</commentid>
    <comment_count>18</comment_count>
      <attachid>444101</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-12 13:22:29 -0800</bug_when>
    <thetext>Created attachment 444101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814700</commentid>
    <comment_count>19</comment_count>
      <attachid>444126</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-12 17:13:44 -0800</bug_when>
    <thetext>Created attachment 444126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814716</commentid>
    <comment_count>20</comment_count>
      <attachid>444130</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-12 18:19:43 -0800</bug_when>
    <thetext>Created attachment 444130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814717</commentid>
    <comment_count>21</comment_count>
      <attachid>444126</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-11-12 18:20:24 -0800</bug_when>
    <thetext>Comment on attachment 444126
Patch

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

&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:126
&gt; +#if ENABLE(JIT)

Should we assert we don&apos;t take this path if !ENABLE(JIT)?

&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:140
&gt; +#if ENABLE(JIT)

ditto

&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:231
&gt; +#if ENABLE(JIT)

this shouldn&apos;t be runtime useJIT()?

&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:504
&gt; +#if ENABLE(JIT)

should we assert we don&apos;t take this path if !ENABLE(JIT)

&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.h:395
&gt; +#if ENABLE(JIT)

ditto about assert we&apos;re not here without ENABLE(JIT)

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:526
&gt; +            metadata.m_callLinkInfo.initializeDataIC(vm, CallLinkInfo::callTypeFor(opcodeID), instruction.index(), nullptr);

could this just be a macro that takes CallFrameShuffleData* as param? Seems like a lot of similar code below. But it&apos;s also ok to keep it as is if it&apos;s easier.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1803
&gt; +        FOR_EACH_OPCODE_WITH_LLINT_CALL_LINK_INFO(CASE)

this is a bad macro name now. Can we rename it for the new world where it&apos;s not just LLInt?

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2366
&gt;          if (JITCode::isOptimizingJIT(jitType())) {
&gt; -            DFG::CommonData* dfgCommon = m_jitCode-&gt;dfgCommon();
&gt; -            for (auto* callLinkInfo : dfgCommon-&gt;m_callLinkInfos)
&gt; -                callLinkInfo-&gt;setClearedByJettison();
&gt; -        }
&gt; +#if ENABLE(DFG_JIT)
&gt; +            if (JITCode::isOptimizingJIT(jitType())) {

is this diff right? It looks like we check isOptimizingJIT twice in a row in branches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814722</commentid>
    <comment_count>22</comment_count>
      <attachid>444130</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-11-12 18:52:53 -0800</bug_when>
    <thetext>Comment on attachment 444130
Patch

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

Nice patch, I like this direction in architecture. r=me

&gt; Source/JavaScriptCore/jit/Repatch.cpp:1855
&gt; +    // 2. If it is tail-call, linkRegister is not pointing the doneLocation for slow-call case.

nit: Maybe write &quot;3. If we&apos;re a data IC, then the return address is already correct&quot;

&gt; Source/JavaScriptCore/jit/Repatch.cpp:1861
&gt; +        ASSERT(isDataIC);

nit: not sure we really need this assert given the above branch

Also, can we assert we&apos;re not DFG/FTL code given below returnFromBaseline stub.

&gt; Source/JavaScriptCore/jit/Repatch.cpp:1865
&gt; +        if (callLinkInfo.isTailCall()) {
&gt; +            stubJit.move(CCallHelpers::TrustedImmPtr(vm.getCTIStub(JIT::returnFromBaselineGenerator).code().untaggedExecutableAddress()), GPRInfo::regT4);
&gt; +            stubJit.restoreReturnAddressBeforeReturn(GPRInfo::regT4);
&gt; +        }

Can we put a FIXME here maybe? Based on what we talked about on Slack. Since tail calls are relying on returning here, it seems like when we take the slow path we&apos;re not doing real tail calls. So maybe it&apos;s something we should fix.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:2557
&gt; +        move NotCellMask, t1
&gt; +        btqnz t0, t1, slowCase

this can&apos;t be one insn?

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:2251
&gt; +        # Those are r0 and r1

what is &quot;Those&quot; here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814848</commentid>
    <comment_count>23</comment_count>
      <attachid>444126</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-14 02:16:39 -0800</bug_when>
    <thetext>Comment on attachment 444126
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:126
&gt;&gt; +#if ENABLE(JIT)
&gt; 
&gt; Should we assert we don&apos;t take this path if !ENABLE(JIT)?

Nice, added.

&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:140
&gt;&gt; +#if ENABLE(JIT)
&gt; 
&gt; ditto

Done.

&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:231
&gt;&gt; +#if ENABLE(JIT)
&gt; 
&gt; this shouldn&apos;t be runtime useJIT()?

We cannot do that since PolymorphicCallStubRoutine does not have an implementation if it is !ENABLE(JIT).

&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:504
&gt;&gt; +#if ENABLE(JIT)
&gt; 
&gt; should we assert we don&apos;t take this path if !ENABLE(JIT)

Added.

&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.h:395
&gt;&gt; +#if ENABLE(JIT)
&gt; 
&gt; ditto about assert we&apos;re not here without ENABLE(JIT)

Added

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:526
&gt;&gt; +            metadata.m_callLinkInfo.initializeDataIC(vm, CallLinkInfo::callTypeFor(opcodeID), instruction.index(), nullptr);
&gt; 
&gt; could this just be a macro that takes CallFrameShuffleData* as param? Seems like a lot of similar code below. But it&apos;s also ok to keep it as is if it&apos;s easier.

Done.

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1803
&gt;&gt; +        FOR_EACH_OPCODE_WITH_LLINT_CALL_LINK_INFO(CASE)
&gt; 
&gt; this is a bad macro name now. Can we rename it for the new world where it&apos;s not just LLInt?

Right. Changed it to FOR_EACH_OPCODE_WITH_CALL_LINK_INFO.

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2366
&gt;&gt; +            if (JITCode::isOptimizingJIT(jitType())) {
&gt; 
&gt; is this diff right? It looks like we check isOptimizingJIT twice in a row in branches?

Ah, second one is not necessary. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814849</commentid>
    <comment_count>24</comment_count>
      <attachid>444130</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-14 02:28:51 -0800</bug_when>
    <thetext>Comment on attachment 444130
Patch

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

Thanks

&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:1855
&gt;&gt; +    // 2. If it is tail-call, linkRegister is not pointing the doneLocation for slow-call case.
&gt; 
&gt; nit: Maybe write &quot;3. If we&apos;re a data IC, then the return address is already correct&quot;

Nice. Added.

&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:1861
&gt;&gt; +        ASSERT(isDataIC);
&gt; 
&gt; nit: not sure we really need this assert given the above branch
&gt; 
&gt; Also, can we assert we&apos;re not DFG/FTL code given below returnFromBaseline stub.

Sounds good. Changed.

&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:1865
&gt;&gt; +        }
&gt; 
&gt; Can we put a FIXME here maybe? Based on what we talked about on Slack. Since tail calls are relying on returning here, it seems like when we take the slow path we&apos;re not doing real tail calls. So maybe it&apos;s something we should fix.

Sounds good. Added.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:2557
&gt;&gt; +        btqnz t0, t1, slowCase
&gt; 
&gt; this can&apos;t be one insn?

Nice. Changed.

&gt;&gt; Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm:2251
&gt;&gt; +        # Those are r0 and r1
&gt; 
&gt; what is &quot;Those&quot; here?

restoredPCOrThrow, calleeFramePtr parameters. Changed it to &quot;Those parameters are...&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814850</commentid>
    <comment_count>25</comment_count>
      <attachid>444173</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-14 02:31:45 -0800</bug_when>
    <thetext>Created attachment 444173
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814878</commentid>
    <comment_count>26</comment_count>
      <attachid>444181</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-14 11:27:35 -0800</bug_when>
    <thetext>Created attachment 444181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814935</commentid>
    <comment_count>27</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-14 18:44:24 -0800</bug_when>
    <thetext>Committed r285795 (244239@main): &lt;https://commits.webkit.org/244239@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 444181.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443379</attachid>
            <date>2021-11-04 23:14:55 -0700</date>
            <delta_ts>2021-11-05 01:21:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211104231454.patch</filename>
            <type>text/plain</type>
            <size>31494</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NjIwMzg0ZWY0MTg4MDU1N2U4Nzc1MmU4ZTZlY2ZlMzQ5NDA3ZDAzLi4zMGYwMTAxY2FhODVhMmUy
MmVhOGRjODAyZWUwNGRiYTUxZGI5NWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAyMS0xMS0wNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFVzZSBDYWxsTGlua0luZm8gaW4gTExJbnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjc0NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpMTEludENhbGxMaW5rSW5mbzo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL09wY29k
ZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJvZmlsZXMpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Om9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBG
cmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVRhaWxDYWxsKToKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2Fs
bCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorCiAyMDIxLTExLTAzICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQ2xlYW4gdXAg
U3RydWN0dXJlU3R1YkluZm8gaW5pdGlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IGJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVl
ZDRkOTU3OTM2ZmQyMjU4YTIuLjVkMDFiMTZiZDBhODU1ZTFlODQ4MzI3ZDU3ZGRlMzg2ZDJhYmRj
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
c3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgpAQCAtMjYsNiArMjYsNyBAQAogCiAgICAgOkJhc2ljQmxvY2tMb2NhdGlvbiwKICAgICA6Qm91
bmRMYWJlbCwKKyAgICA6Q2FsbExpbmtJbmZvLAogICAgIDpEZWJ1Z0hvb2tUeXBlLAogICAgIDpF
Q01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lvbiwKQEAgLTU1LDYgKzU2LDcgQEAK
ICAgICA6U3RydWN0dXJlLAogICAgIDpTdHJ1Y3R1cmVJRCwKICAgICA6U3RydWN0dXJlQ2hhaW4s
CisgICAgOlN0cnVjdHVyZVN0dWJJbmZvLAogICAgIDpTeW1ib2xUYWJsZSwKICAgICA6U3ltYm9s
VGFibGVPclNjb3BlRGVwdGgsCiAgICAgOlRvVGhpc1N0YXR1cywKQEAgLTg0MSw2ICs4NDMsNyBA
QAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENh
bGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg1Myw2ICs4NTYsNyBAQAogICAg
IH0sCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5r
SW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg2Niw2ICs4NzAsNyBAQAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywK
KyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZh
bHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTkzNCw2ICs5MzksNyBAQAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKICAgICB9CiAKQEAgLTEyNTAsNiArMTI1Niw3IEBACiAgICAgICAgIGl0ZXJhdGlvbk1l
dGFkYXRhOiBJdGVyYXRpb25Nb2RlTWV0YWRhdGEsCiAgICAgICAgIGl0ZXJhYmxlUHJvZmlsZTog
VmFsdWVQcm9maWxlLAogICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAor
ICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgaXRlcmF0b3JQcm9m
aWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRh
ZGF0YSwKICAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKQEAgLTEyNzMsNiArMTI4
MCw3IEBACiAgICAgICAgIGl0ZXJhdGlvbk1ldGFkYXRhOiBJdGVyYXRpb25Nb2RlTWV0YWRhdGEs
CiAgICAgICAgIGl0ZXJhYmxlUHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBjYWxsTGlu
a0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJv
ZmlsZSwKICAgICAgICAgbmV4dFJlc3VsdFByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICAgICAg
ZG9uZU1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICAgICAgZG9uZVByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAKaW5kZXggM2I4MDNiMzhhNzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBh
NTU4YS4uNjJiNjBjOTcxYWM5OTYxN2VmNTczODU3MTRkM2I4ZWY1ZjRiOTlkZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTI4Niw3
ICsyODYsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBD
YWxsRnJhbWVTaHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCiAgICAgbV9mcmFtZVNodWZmbGVEYXRh
LT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5m
bzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURh
dGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBw
cmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKIApAQCAtMzQ1LDcgKzM0NSw3IEBAIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsCiAgICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQ
UiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVG
b3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBTY29w
ZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChpc1RhaWxDYWxsKCkpOwogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwpA
QCAtMzU4LDcgKzM1OCw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSCiAgICAgcmV0dXJuIGVt
aXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6
RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgU2NvcGVk
TGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOwogICAgIHJldHVybiBlbWl0RmFz
dFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURh
dGFJQzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwpAQCAtNDA2LDcg
KzQwNiw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiBqaXQpCiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJl
Rm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCmluZGV4IGU1Zjc3
Y2YzN2JmMjY2ZjRiOWM5M2M1MGNmOTk2ZDIxYzY2OGNlNDUuLjVlMzZiYmRjMTFlODc4MGYyMTVj
N2E4MWU0NGI2NzU5MmQ3N2VjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIK
ICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNp
bmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2Vk
TGlzdC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE5MywxNCArMTkzLDE0IEBAIGNsYXNzIENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7
CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENh
bGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExh
bWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBw
dWJsaWM6CiAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgU2NvcGVkTGFtYmRh
PHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVT
RURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBX
QVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJik7Ci0gICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKKyAgICB2b2lkIGVt
aXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFNjb3BlZExhbWJkYTx2b2lk
KCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIEND
YWxsSGVscGVycyYpOwogICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYsIEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2Fs
bFRvU3R1YigpOwpAQCAtNDA4LDYgKzQwOCw3IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAKKyAgICB1aW50MzJf
dCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczog
dGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhl
IG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlv
bjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpAQCAtNDQzLDcgKzQ0NCw2IEBAIGNsYXNzIENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAg
ICAgdW5zaWduZWQgbV91c2VEYXRhSUMgOiAxOyAvLyBVc2VEYXRhSUMKICAgICBHUFJSZWcgbV9j
YWxsZWVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50
IHsgMCB9OwotICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAw
IH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1l
bnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3Ig
YXJndW1lbnRzLgogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9y
aWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggMmVkZmQ4MmQ5OTdlMDY4NTZiOTc0MDdhZTZl
ODQzNzVmNDMyZDkzZC4uZDJkZjZmYjFhMDVjOTdkOTFkYjhkMzMyZDViMDdiYmExNjZiZDMwZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTI4
NDUsMTkgKzI4NDUsMTMgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmls
ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGUKIHsKICAgICBhdXRvIGlu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgc3dpdGNo
IChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewotI2RlZmluZSBDQVNFMShPcCkgXAorI2RlZmlu
ZSBDQVNFKE9wKSBcCiAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKICAgICAgICAgcmV0dXJuICZp
bnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2ZpbGU7CiAKLSNk
ZWZpbmUgQ0FTRTIoT3ApIFwKLSAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAgICAgICByZXR1
cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxMaW5rSW5mby5t
X2FycmF5UHJvZmlsZTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUo
Q0FTRTEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ0FT
RTIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNFKQogCi0jdW5k
ZWYgQ0FTRTEKLSN1bmRlZiBDQVNFMgorI3VuZGVmIENBU0UKIAogICAgIGNhc2UgT3BHZXRCeUlk
OjpvcGNvZGVJRDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKQEAgLTMwMjcsMTcgKzMwMjEsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0
ZUFsbEFycmF5UHJvZmlsZVByZWRpY3Rpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2UKICAgICAgICAgfQogICAgIH0pOwogCi0jZGVmaW5lIFZJU0lUMShfX29wKSBcCisjZGVmaW5l
IFZJU0lUKF9fb3ApIFwKICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYg
bWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSk7IH0pOwogCi0jZGVm
aW5lIFZJU0lUMihfX29wKSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1
dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVBy
b2ZpbGUpOyB9KTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoVklT
SVQxKQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKFZJU0lU
MikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUKQogCi0jdW5k
ZWYgVklTSVQxCi0jdW5kZWYgVklTSVQyCisjdW5kZWYgVklTSVQKIAogICAgIG1fbWV0YWRhdGEt
PmZvckVhY2g8T3BJdGVyYXRvck5leHQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsKICAgICAgICAg
cHJvY2VzcyhtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCmluZGV4IDEwNThmZmNkOTE3
ZGQyYzUwMTYyZTEzNTViM2Q1OGIxOGU2YTA3MjYuLjVjNGQzNTdlOTc5YmJkMDJmM2FmZmYzNGE0
YjYyNjE5OTI5MGNkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oCkBAIC04Niw5ICs4Niw2IEBAIGNsYXNzIExMSW50Q2FsbExp
bmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4g
ewogICAgICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCA9IHVubGlua2Vk
Qml0OwogICAgIH0KIAotICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKLSAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KLQogcHJpdmF0ZToKICAg
ICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtl
ZEJpdCB9OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21hY2hp
bmVDb2RlVGFyZ2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4
IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFhYzgzOWJkMzYuLjY0MTlmZGJmZjc1OWZm
Yzc1MmM0NzZhNjE0M2E3ZmVmNDY5MTE1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmgKQEAgLTEyNiw2ICsxMjYsMTQgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBiaXRXaWR0aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0K
ICAgICBtYWNybyhPcFJzaGlmdCkgXAogICAgIG1hY3JvKE9wR2V0UHJpdmF0ZU5hbWUpIFwKIAor
I2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykg
XAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKKyAgICBtYWNy
byhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwKKyAgICBtYWNybyhPcEl0
ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCisKICNkZWZpbmUgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wQ2Fs
bFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsVmFyYXJncykgXApAQCAtMTM5LDYgKzE0
Nyw3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5n
dGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0
QnlWYWwpIFwKICAgICBtYWNybyhPcEVudW1lcmF0b3JJbkJ5VmFsKSBcCiAgICAgbWFjcm8oT3BF
bnVtZXJhdG9ySGFzT3duUHJvcGVydHkpIFwKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElO
VF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRI
X0FSUkFZX0FMTE9DQVRJT05fUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wTmV3QXJyYXkp
IFwKQEAgLTE0OCwxNCArMTU3LDYgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0
aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICNkZWZpbmUg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfT0JKRUNUX0FMTE9DQVRJT05fUFJPRklMRShtYWNybykgXAog
ICAgIG1hY3JvKE9wTmV3T2JqZWN0KSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
TExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKLSAgICBtYWNybyhPcENhbGwpIFwKLSAgICBt
YWNybyhPcFRhaWxDYWxsKSBcCi0gICAgbWFjcm8oT3BDYWxsRXZhbCkgXAotICAgIG1hY3JvKE9w
Q29uc3RydWN0KSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKLSAgICBtYWNybyhPcEl0
ZXJhdG9yTmV4dCkgXAotCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklU
SF9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BBZGQpIFwKICAgICBtYWNybyhPcE11bCkg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKaW5kZXggMGQxOWUyNzkwNTZlNWYzN2U3NzFjNWM0OWEyZGIwZTZjMmQ4NDhkNy4u
YWM1NzEyN2JjZjg5MDcyYmUwMzg0MTZkYTEzOWI0MWYxNjRhZTYxNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC00
MDMsNyArNDAzLDYgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9m
aWxlcyh1bnNpZ25lZCBudW1CaW5hcnlBcml0aFByb2ZpbGVzLAogCiAjZGVmaW5lIENPVU5UKF9f
b3ApIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+
KCk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCi0g
ICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQog
I3VuZGVmIENPVU5UCiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRh
LT5udW1FbnRyaWVzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJv
ZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRl
eCAxODdlZGNlMDIzNGJkNDRlOTY4MjI5ZjY5ODM3MmYxOTVkN2U4M2E5Li5kODRmOWY2MDE3Nzc0
YzJhYmIzZDQxODZjYTZiNDE1NzdiMDIwYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTg0NywxMCArODQ3LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0
aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAgIGluZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQ
YXRoKG1faml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgaW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsK
LSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwogCiAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBAIC04OTIsNyArODkyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIAogICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nh
c2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIs
IFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBjYWxsZWVQYXlsb2FkR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8t
PnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkBA
IC05MDAsNyArOTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAg
fQotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgIH0gZWxzZQogICAgICAgICBzbG93Q2Fz
ZXMgPSBpbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGE1YThjYzNjZjUz
ZTllOTE0OTc4ZGY5YzM0MzIwNTA1ZGJjMjA4N2MuLmJiNDFmYjVlZTBjNTRkMGYxYzVkZjAyYjgx
YzBiOTVjZjAxOGFiMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtOTM3LDEwICs5MzcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJl
bCBtYWluUGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVD
YWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKIAotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0
RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2b2lk
KCk+KFsmXXsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9
IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwpAQCAtOTgwLDcgKzk4MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsm
XSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgobV9qaXQsIGNhbGxlZUdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxs
KCk7CkBAIC05ODgsNyArOTg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgIH0gZWxzZQogICAgICAgICBz
bG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggM2Q5MTEyZTY4YTQ5N2Q4YWFlZWQyYTk2YzAy
ZDliMjY4MzNkMWI3My4uNGI5NzY0MjE3ZTJlNWM2ZWI1NTYwM2MzYjUwZTNmMGQ0NTI2MDQ5MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAt
MTAzOTYsMTAgKzEwMzk2LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAg
ICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBbJl0geworICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBh
cmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTEwNTUyLDEwICsxMDU1MiwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBzdGF0ZS0+
aml0Q29kZS0+Y29tbW9uLmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJ
bmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0geworICAg
ICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAg
ICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZm
bGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgfSkpOwogCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsK
ICAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKQEAgLTEw
ODk1LDEwICsxMDg5NSwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7CkBAIC0xMTE3
NiwxMCArMTExNzYsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKaW5kZXggZGUyYzVjZTc3MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlh
MS4uY2RlNzE1NmEzNzZkNTdjYmFmODA1YjYxYjkwMTYwMTIzYjhmOTdlMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCkBAIC03MDcsNiArNzA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbik7CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBwdWJs
aWM6CiAgICAgICAgIC8vIFRodW5rIGdlbmVyYXRvcnMuCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihW
TSYpOwpAQCAtNzQwLDYgKzc0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNj
b3BlVGh1bmsoVk0mKTsKICAgICAgICAgdGVtcGxhdGUgPFJlc29sdmVUeXBlPgogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoVk0mKTsKKyAgICBwcml2YXRlOgogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CmluZGV4IDA5MTk5MTU4NDY4YzBmZTEwMmI1ZGZiZmEyYmU0ZmUxNzMxOTdlMmIuLmZkMGRiMzg0
NDQzNjVmOWJjMmUxYjMzZmEzMDdhODk0YTBhOWZlNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcApAQCAtNzAsNiArNzAsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAjZW5kaWYKIH0KIAorI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKK3sKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OworCisgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNl
bGluZTogb3BfcmV0X2hhbmRsZXIiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1
bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQpAQCAtOTcsNyArMTExLDcgQEAgSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1Ip
OwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAgICAg
bG9hZDMyKEFkZHJlc3ModG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgdG1wR1BSKTsKLSAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRl
Y29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2Fs
bExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRP
Zkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQ
UiwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBB
cnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtMjUxLDExICsyNjUsMTEgQEAgYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlu
a0luZm8qIGluZm8KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVn
VDI7CiAgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9H
UFIpOwotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5m
b0dQUiwgWyZdIHsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxs
TGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIgc2h1ZmZsZXIgeyAqdGhpcywgKnNodWZmbGVEYXRhIH07CiAgICAgICAgIHNodWZm
bGVyLmxvY2tHUFIoY2FsbExpbmtJbmZvR1BSKTsKICAgICAgICAgc2h1ZmZsZXIucHJlcGFyZUZv
clRhaWxDYWxsKCk7Ci0gICAgfSk7CisgICAgfSkpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
cyk7CiAKICAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKQEAgLTMyMiwxMCArMzM2LDEw
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIgPSByZWdUMjsKICAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlu
a0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0
byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIFsmXSB7CisgICAg
ICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0
UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29w
ZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7
Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
cyk7CiAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9j
YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0
NTg3ODAzYzI2MThjNjgwMzk4MzZjZWU2YzdiMzRmZDJjMzA0Li4yZmUyM2M0OWZkMGY5NDA5MWY2
ODYwNWI3NTdhZTJjZTMyMjAxNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKQEAgLTM3MCwyMSArMzcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5l
cmF0b3IoVk0mKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcigm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwotICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOwotfQot
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXggMzQ0Yzk1MzEyM2IzZDQz
ZDY5ZjY2OWEzOTRiYTUwOGNjMjVhNmVlMy4uYjAxNzBmMmJiNjUyOGUwMWFmODRkNjcwNzFkYTY5
MTJlOTE2ODBhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCkBAIC02NSw2
ICs2NSw3IEBACiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3JzLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1ZGUgIlBy
b2JlQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3
dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTE4
MDMsOCArMTgwNCwxMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbAogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7Ci0g
ICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKQorICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkgewor
ICAgICAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CiAgICAgICAgICAgICBkb25lLmFwcGVuZChz
dHViSml0Lmp1bXAoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgc2xvd1BhdGgubGlu
aygmc3R1YkppdCk7CkBAIC0xODI4LDE1ICsxODMxLDIxIEBAIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q2FsCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAg
ICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAg
Ly8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRoLCBnZXQgcmlkIG9mIGFueSByZW1u
YW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBleGlzdC4gVGhpcyByZWFsbHkgb25s
eSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAgICAgICAgLy8gU1AgZm9yIGNhbGxz
LgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZv
OjpyZWdUNCk7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0YUlDLCBsaW5rUmVnaXN0ZXIg
aXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAgLy8gMi4gSWYgaXQgaXMgdGFp
bC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24gZm9y
IHNsb3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0byBwdXQgaXQgZm9yIHRoZSBz
bG93LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAgICAgIHN0dWJKaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigp
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAg
c3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlDKTsKKyAgICAgICAgaWYgKGNh
bGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6Om9wX3JldF9oYW5kbGVy
R2VuZXJhdG9yKS5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6
cmVnVDQpOworICAgICAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgc3R1YkppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCku
dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwotICAgIAotICAg
IHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQp
OworCiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAg
ICAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0x
ODU4LDggKzE4NjcsMTAgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICNlbmRpZgogICAgIH0K
IAotICAgIGlmICghZG9uZS5lbXB0eSgpKQorICAgIGlmICghZG9uZS5lbXB0eSgpKSB7CisgICAg
ICAgIEFTU0VSVCghaXNEYXRhSUMpOwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNh
bGxMaW5rSW5mby5kb25lTG9jYXRpb24oKSk7CisgICAgfQogICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlu
a1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBhdXRv
IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20KaW5kZXggOTAzZTVhNDViMWI2NjgyZmQyODc4Yjk3OTQ4NTJhZWZkNjc1
MWQ1ZS4uOTQ0ZGU0NDNjYjlmYzM2MzNhZTdmNjBkZTJkZGYyYjk1NjJmYzUxOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20KQEAgLTIxNTEsNyArMjE1MSw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwo
b3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGJpbmVxIFRoaXNBcmd1bWVudE9mZnNldCArIFRhZ09m
ZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICBsb2FkaSBUaGlzQXJndW1lbnRP
ZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGxvYWRpIEpTQ2VsbDo6
bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJ
RFt0NV0KKyAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVBy
b2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBlbmQKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpp
bmRleCBhOTEzMTRmY2U5ZWU0NGNhNmUwYmFjNzgyZDliZTJmNTljMGE4MzcwLi40ZmE3MzFkZWM5
NjljNGY1OWFlYmFmY2E1OGMzZjU5MzM2NWE3NzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMjM2MCw3ICsy
MzYwLDcgQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUpCiAg
ICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGJ0cW56IHQw
LCBub3RDZWxsTWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBd
LCB0MwotICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5r
SW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3RvcmVp
IHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5T
dHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443382</attachid>
            <date>2021-11-05 01:21:17 -0700</date>
            <delta_ts>2021-11-11 01:05:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211105012116.patch</filename>
            <type>text/plain</type>
            <size>32029</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MjQ3MTI1MGI0N2QxZDc0MTRmNTEzYjFiNjY2MjEyMzg4MzUwMTQyLi5lMjI0MDBlYjg5NTY4YzQ1
ZjczNGM4NGEyMjEzYWJkMWVhNzBjYjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMS0xMS0wNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFVzZSBDYWxsTGlua0luZm8gaW4gTExJbnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjc0NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpMTEludENhbGxMaW5rSW5mbzo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL09wY29k
ZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJvZmlsZXMpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENh
bGwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpv
cF9yZXRfaGFuZGxlckdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2gu
Y3BwOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc206CisKIDIwMjEtMTEtMDQgIEFsZXhleSBTaHZheWthICA8YXNodmF5
a2FAYXBwbGUuY29tPgogCiAgICAgICAgIFdlIG5lZWQgdG8gUHJlZmVyTnVtYmVyIHdoZW4gY2Fs
bGluZyB0b1ByaW1pdGl2ZSBmb3IgY29lcmNpb24gdG8gQmlnSW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCBiZTJlOGM4MTFkNmRkZDBj
MTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyLi41ZDAxYjE2YmQwYTg1NWUxZTg0ODMyN2Q1N2RkZTM4
NmQyYWJkY2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIKQEAgLTI2LDYgKzI2LDcgQEAKIAogICAgIDpCYXNpY0Jsb2NrTG9jYXRpb24sCiAg
ICAgOkJvdW5kTGFiZWwsCisgICAgOkNhbGxMaW5rSW5mbywKICAgICA6RGVidWdIb29rVHlwZSwK
ICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCkBAIC01NSw2ICs1
Niw3IEBACiAgICAgOlN0cnVjdHVyZSwKICAgICA6U3RydWN0dXJlSUQsCiAgICAgOlN0cnVjdHVy
ZUNoYWluLAorICAgIDpTdHJ1Y3R1cmVTdHViSW5mbywKICAgICA6U3ltYm9sVGFibGUsCiAgICAg
OlN5bWJvbFRhYmxlT3JTY29wZURlcHRoLAogICAgIDpUb1RoaXNTdGF0dXMsCkBAIC04NDEsNiAr
ODQzLDcgQEAKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzog
TExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAog
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NTMsNiArODU2LDcg
QEAKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRD
YWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NjYsNiArODcwLDcgQEAKICAg
ICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlu
a0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9m
aWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC05MzQsNiArOTM5LDcgQEAKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8s
CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBW
YWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC0xMjUwLDYgKzEyNTYsNyBAQAogICAgICAgICBpdGVy
YXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVBy
b2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5r
SW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIGl0ZXJh
dG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRN
b2RlTWV0YWRhdGEsCiAgICAgICAgIG5leHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCkBAIC0xMjcz
LDYgKzEyODAsNyBAQAogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAg
Y2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAg
ICAgICAgIGRvbmVNb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIGRv
bmVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDNiODAzYjM4YTc4NjliNDkzODljMDc5MGFiYzhi
ZWI4ZDQwYTU1OGEuLjYyYjYwYzk3MWFjOTk2MTdlZjU3Mzg1NzE0ZDNiOGVmNWY0Yjk5ZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCkBA
IC0yODYsNyArMjg2LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEo
Y29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEmIHNodWZmbGVEYXRhKQogICAgIG1fZnJhbWVTaHVm
ZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywg
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lk
KCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKQEAgLTM0NSw3ICszNDUsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbAog
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6
Ok5vKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUgogICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKQEAg
LTQwNiw3ICs0MDYsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0KQogICAgIH0pOwogfQogCi12b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERp
cmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYg
cHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAppbmRl
eCBlNWY3N2NmMzdiZjI2NmY0YjljOTNjNTBjZjk5NmQyMWM2NjhjZTQ1Li41ZTM2YmJkYzExZTg3
ODBmMjE1YzdhODFlNDRiNjc1OTJkNzdlY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5l
bExpbmtlZExpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xOTMsMTQgKzE5MywxNCBAQCBj
bGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5r
SW5mbz4gewogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBp
c1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBT
Y29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOwogcHVibGljOgogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERh
dGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFNjb3Bl
ZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxD
YWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWls
Q2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKEND
YWxsSGVscGVycyYpOwotICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CisgICAg
dm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBTY29wZWRMYW1i
ZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgo
Vk0mLCBDQ2FsbEhlbHBlcnMmKTsKICAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgo
Vk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJl
dmVydENhbGxUb1N0dWIoKTsKQEAgLTQwOCw2ICs0MDgsNyBAQCBjbGFzcyBDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogCiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogCisgICAg
dWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZh
cmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJl
Y3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVz
dGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTQ0Myw3ICs0NDQsNiBAQCBjbGFz
cyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4gewogICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDogMTsgLy8gVXNlRGF0YUlDCiAgICAgR1BS
UmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIHVpbnQzMl90IG1fc2xvd1Bh
dGhDb3VudCB7IDAgfTsKLSAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9m
IGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0
ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5m
b0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDJlZGZkODJkOTk3ZTA2ODU2Yjk3
NDA3YWU2ZTg0Mzc1ZjQzMmQ5M2QuLmQyZGY2ZmIxYTA1Yzk3ZDkxZGI4ZDMzMmQ1YjA3YmJhMTY2
YmQzMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CkBAIC0yODQ1LDE5ICsyODQ1LDEzIEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJh
eVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRlCiB7CiAgICAg
YXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogICAg
IHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKLSNkZWZpbmUgQ0FTRTEoT3ApIFwK
KyNkZWZpbmUgQ0FTRShPcCkgXAogICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCiAgICAgICAgIHJl
dHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJyYXlQcm9maWxl
OwogCi0jZGVmaW5lIENBU0UyKE9wKSBcCi0gICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKLSAgICAg
ICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9jYWxsTGlu
a0luZm8ubV9hcnJheVByb2ZpbGU7Ci0KLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9Q
Uk9GSUxFKENBU0UxKQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19J
TkZPKENBU0UyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRSkK
IAotI3VuZGVmIENBU0UxCi0jdW5kZWYgQ0FTRTIKKyN1bmRlZiBDQVNFCiAKICAgICBjYXNlIE9w
R2V0QnlJZDo6b3Bjb2RlSUQ6IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CkBAIC0zMDI3LDE3ICszMDIxLDEyIEBAIHZvaWQgQ29kZUJsb2Nr
Ojp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlCiAgICAgICAgIH0KICAgICB9KTsKIAotI2RlZmluZSBWSVNJVDEoX19vcCkgXAor
I2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0g
KGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEubV9hcnJheVByb2ZpbGUpOyB9KTsK
IAotI2RlZmluZSBWSVNJVDIoX19vcCkgXAotICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4o
WyZdIChhdXRvJiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1f
YXJyYXlQcm9maWxlKTsgfSk7Ci0KLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9G
SUxFKFZJU0lUMSkKLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5G
TyhWSVNJVDIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShWSVNJVCkK
IAotI3VuZGVmIFZJU0lUMQotI3VuZGVmIFZJU0lUMgorI3VuZGVmIFZJU0lUCiAKICAgICBtX21l
dGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JOZXh0PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7CiAg
ICAgICAgIHByb2Nlc3MobWV0YWRhdGEubV9pdGVyYWJsZVByb2ZpbGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAppbmRleCAxMDU4
ZmZjZDkxN2RkMmM1MDE2MmUxMzU1YjNkNThiMThlNmEwNzI2Li41YzRkMzU3ZTk3OWJiZDAyZjNh
ZmZmMzRhNGI2MjYxOTkyOTBjZDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaApAQCAtODYsOSArODYsNiBAQCBjbGFzcyBMTElu
dENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlu
a0luZm8+IHsKICAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1
bmxpbmtlZEJpdDsKICAgICB9CiAKLSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0g
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0KIHByaXZh
dGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsg
dW5saW5rZWRCaXQgfTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
bV9tYWNoaW5lQ29kZVRhcmdldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUu
aAppbmRleCBjYThiZWYzMjhiNGJmYjJiMGRmZGM4YjI4NTI0OTIxYWM4MzliZDM2Li42NDE5ZmRi
ZmY3NTlmZmM3NTJjNDc2YTYxNDNhN2ZlZjQ2OTExNWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wY29kZS5oCkBAIC0xMjYsNiArMTI2LDE0IEBAIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0
ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNybyhPcEdldFByaXZhdGVOYW1l
KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8o
bWFjcm8pIFwKKyAgICBtYWNybyhPcENhbGwpIFwKKyAgICBtYWNybyhPcFRhaWxDYWxsKSBcCisg
ICAgbWFjcm8oT3BDYWxsRXZhbCkgXAorICAgIG1hY3JvKE9wQ29uc3RydWN0KSBcCisgICAgbWFj
cm8oT3BJdGVyYXRvck9wZW4pIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yTmV4dCkgXAorCiAjZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNy
byhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZhcmFyZ3MpIFwKQEAgLTEz
OSw2ICsxNDcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVy
YXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1h
Y3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENP
REVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5l
d0FycmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAj
ZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09CSkVDVF9BTExPQ0FUSU9OX1BST0ZJTEUobWFj
cm8pIFwKICAgICBtYWNybyhPcE5ld09iamVjdCkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09E
RV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BDYWxsKSBc
Ci0gICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBt
YWNybyhPcENvbnN0cnVjdCkgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCi0gICAgbWFj
cm8oT3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5B
UllfQVJJVEhfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wQWRkKSBcCiAgICAgbWFjcm8o
T3BNdWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCmluZGV4IDBkMTllMjc5MDU2ZTVmMzdlNzcxYzVjNDlhMmRiMGU2YzJk
ODQ4ZDcuLmFjNTcxMjdiY2Y4OTA3MmJlMDM4NDE2ZGExMzliNDFmMTY0YWU2MTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cApAQCAtNDAzLDcgKzQwMyw2IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hh
cmVkUHJvZmlsZXModW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcywKIAogI2RlZmluZSBD
T1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmll
czxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENP
VU5UKQotICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhD
T1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9t
ZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZB
cnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKaW5kZXggMTg3ZWRjZTAyMzRiZDQ0ZTk2ODIyOWY2OTgzNzJmMTk1ZDdlODNhOS4uZDg0Zjlm
NjAxNzc3NGMyYWJiM2Q0MTg2Y2E2YjQxNTc3YjAyMGFlMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC04NDcsMTAg
Kzg0NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxT
aXRlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAg
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwpAQCAtODkyLDcgKzg5Miw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXls
b2FkR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewog
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAg
ICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAg
c2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCBhNWE4
Y2MzY2Y1M2U5ZTkxNDk3OGRmOWMzNDMyMDUwNWRiYzIwODdjLi5iYjQxZmI1ZWUwYzU0ZDBmMWM1
ZGYwMmI4MWMwYjk1Y2YwMThhYjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTkzNywxMCArOTM3LDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgbV9qaXQuZW1p
dFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBj
YWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBzY29wZWRMYW1i
ZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xv
d1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKQEAgLTk4MCw3ICs5ODAsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgIAogICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xv
d0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVl
R1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwpAQCAtOTg4LDcgKzk4OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAg
ICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxl
ZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDNkOTExMmU2OGE0OTdkOGFhZWVk
MmE5NmMwMmQ5YjI2ODMzZDFiNzMuLjRiOTc2NDIxN2UyZTVjNmViNTU2MDNjM2I1MGUzZjBkNDUy
NjA0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKQEAgLTEwMzk2LDEwICsxMDM5NiwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgWyZd
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxG
YXN0UGF0aChqaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRh
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0xMDU1MiwxMCArMTA1NTIsMTAgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
c3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2Fs
bCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihb
Jl17CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmso
JmppdCk7CiAgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7
CkBAIC0xMDg5NSwxMCArMTA4OTUsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChq
aXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwpA
QCAtMTExNzYsMTAgKzExMTc2LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGRlMmM1Y2U3NzBiYmQ1OTNiN2FlNWZkMWE2NTI2NzM4
OTQzZGQ5YTEuLjE5YjRjY2UyMGEzMmUxMjk0NTBiZDNhOGVlZTMyNGI5Y2M0ZTYxOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNzA2LDYgKzcwNiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0
eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihWTSYpOworCisgICAgcHJpdmF0ZToKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4K
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9w
X2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Bf
dGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZl
MTAyYjVkZmJmYTJiZTRmZTE3MzE5N2UyYi4uNzA0YmZiNGFlYTJlYzVmYjBjZDNmOTIzMTE1YTk1
YTdmN2FhOTJhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01OSwx
NyArNTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVH
UFIgKHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwotCi0jaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0
Q1RJU3R1YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgorICAgIGVt
aXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0
b3IpLmNvZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAgIENDYWxsSGVscGVy
cyBqaXQ7CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2Vs
aW5lOiBvcF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC05Nyw3ICsxMDEs
NyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVk
aW5nVGhpcygwKSksIHRtcEpTUik7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2Vs
bCh0bXBKU1IpOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyh0bXBKU1IucGF5bG9hZEdQUigpLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCB0bXBHUFIpOwotICAgICAgICBzdG9yZTMyVG9N
ZXRhZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxM
aW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBB
cnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVy
ZUlEKCkpOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC0yNTEsMTEgKzI1
NSwxMSBAQCBib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVj
b2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbwogCiAgICAgY29uc3RleHByIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIgPSByZWdUMjsKICAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29u
c3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxv
YWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0geworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpT
Ui5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZd
ewogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURh
dGEgfTsKICAgICAgICAgc2h1ZmZsZXIubG9ja0dQUihjYWxsTGlua0luZm9HUFIpOwogICAgICAg
ICBzaHVmZmxlci5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICB9KTsKKyAgICB9KSk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgp
OwpAQCAtMzIyLDEwICszMjYsMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBjb25z
dGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwogICAgIGxvYWRDb25zdGFudChp
bmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5r
SW5mb0dQUiwgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVt
aXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBj
YWxsTGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNs
b3coY2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJl
bCgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRv
bmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCmluZGV4IGY4NDQ1ODc4MDNjMjYxOGM2ODAzOTgzNmNlZTZjN2IzNGZkMmMzMDQu
LjJmZTIzYzQ5ZmQwZjk0MDkxZjY4NjA1Yjc1N2FlMmNlMzIyMDE0YTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMzcwLDIxICszNzAsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsK
LQotICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGppdC5lbWl0UmVz
dG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0g
ICAgaml0LnJldCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9w
X3JldF9oYW5kbGVyIik7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0K
IHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9QcmltaXRpdmU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApp
bmRleCAzNDRjOTUzMTIzYjNkNDNkNjlmNjY5YTM5NGJhNTA4Y2MyNWE2ZWUzLi4yYTMwNDFkNzQ3
ZmQ2ZDQwM2U3MTUyMTM3Yzk2ODkwZGQ0MWY0MGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKQEAgLTE4MDMsOCArMTgwMywxMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0Nh
bGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENh
bAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29k
ZVB0ciA9IGNvZGVQdHI7Ci0gICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKQorICAgICAgICBpZiAo
bmVlZHNEb25lSnVtcCkgeworICAgICAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CiAgICAgICAg
ICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CkBAIC0xODI4LDE1ICsxODMwLDIxIEBAIHZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKLSAgICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1RhaWxD
YWxsKCkpIHsKLSAgICAgICAgLy8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRoLCBn
ZXQgcmlkIG9mIGFueSByZW1uYW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBleGlz
dC4gVGhpcyByZWFsbHkgb25seSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAgICAg
ICAgLy8gU1AgZm9yIGNhbGxzLgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUNCk7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0
YUlDLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAg
Ly8gMi4gSWYgaXQgaXMgdGFpbC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRo
ZSBkb25lTG9jYXRpb24gZm9yIHNsb3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0
byBwdXQgaXQgZm9yIHRoZSBzbG93LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7Cisg
ICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86
OnJlZ1Q0KTsKKyAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihHUFJJbmZvOjpyZWdUNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlD
KTsKKyAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihK
SVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJs
ZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9CiAg
ICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUklu
Zm86OnJlZ1Q0KTsKLSAgICAKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93
ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
c3R1YkppdCwgb3duZXIsIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwpAQCAtMTg1OCw4ICsxODY2LDEwIEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsCiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKKyAgICBpZiAo
IWRvbmUuZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOworICAgIH0K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRy
VGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7CiAgICAgCiAgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDkwM2U1YTQ1YjFiNjY4
MmZkMjg3OGI5Nzk0ODUyYWVmZDY3NTFkNWUuLjk0NGRlNDQzY2I5ZmMzNjMzYWU3ZjYwZGUyZGRm
MmI5NTYyZmM1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0yMTUxLDcgKzIxNTEsNyBAQCBtYWNy
byBhcnJheVByb2ZpbGVGb3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAgICBiaW5lcSBUaGlz
QXJndW1lbnRPZmZzZXQgKyBUYWdPZmZzZXRbY2ZyLCB0MywgOF0sIENlbGxUYWcsIC5kb25lCiAg
ICAgbG9hZGkgVGhpc0FyZ3VtZW50T2Zmc2V0ICsgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XSwg
dDAKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MAotICAgIHN0b3JlaSB0
MCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmls
ZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5k
b25lOgogZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggYTkxMzE0ZmNlOWVlNDRjYTZlMGJhYzc4MmQ5YmUy
ZjU5YzBhODM3MC4uNGZhNzMxZGVjOTY5YzRmNTlhZWJhZmNhNThjM2Y1OTMzNjVhNzcyZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KQEAgLTIzNjAsNyArMjM2MCw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwo
b3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldFtjZnIsIHQz
LCA4XSwgdDAKICAgICBidHFueiB0MCwgbm90Q2VsbE1hc2ssIC5kb25lCiAgICAgbG9hZGkgSlND
ZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDMKLSAgICBzdG9yZWkgdDMsICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVj
dHVyZUlEW3Q1XQorICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Fy
cmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCiAuZG9uZToKIGVuZAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443919</attachid>
            <date>2021-11-11 01:05:26 -0800</date>
            <delta_ts>2021-11-11 10:27:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111010526.patch</filename>
            <type>text/plain</type>
            <size>130262</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTJjYjM0NzU4NTc2NDdhOWNhNTgyMWIxYzIyZjdkNGI5NDZmMjM0Li4zZGU2YTBhODQzNmVlNzcy
YzA4OWI5MDVjZTZlNDNkNTg3ZWJkZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3BlcmFu
ZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OmNhbGxMaW5rSW5mb0Zvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRTbG93
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OnNldFNsb3dTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjpjbGVhclNsb3dTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6
ZUxMSW50SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdD
YWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dXBkYXRlQWxsQXJyYXlQcm9maWxlUHJlZGljdGlvbnMpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6IFJlbW92
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxs
b2NhdGVTaGFyZWRQcm9maWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaDoKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgICogaml0L0Fz
c2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6b3BfcmV0
X2hhbmRsZXJHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENhbGwpOgorICAgICAgICAoSlNDOjpsaW5r
Rm9yKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAg
KEpTQzo6dmlydHVhbEZvcldpdGhGdW5jdGlvbik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtTbG93
Rm9yKToKKyAgICAgICAgKEpTQzo6cmV2ZXJ0Q2FsbCk6CisgICAgICAgIChKU0M6OnVubGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQ
b2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRo
cy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF9saW5rX2NhbGwpOgorICAgICAgICAo
SlNDOjpMTEludDo6bGxpbnRfdmlydHVhbF9jYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6Omhh
bmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwpOgor
ICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAgICAgICAoSlNDOjpM
TEludDo6Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVybkxv
Y2F0aW9uVGh1bmspOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKiBy
dW50aW1lL0dhdGUuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OmdldENUSUxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElWaXJ0dWFsQ2Fs
bCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIxLTExLTA5ICBDb21taXQgUXVldWUg
IDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRp
bmcgcjI4NTI0Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhNWRlZDYy
MDc0YTg1MjJmMWQ1NWM3MjI2ZWU5MGQwMjA0M2M4MjUxLi40MmI0YzQ0MTQyZGNmNGMyM2YwY2Ew
MWMzN2NlYTE1YmE4OTZjMjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC02NTksNyArNjU5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAog
ICAgIGJ5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCiAgICAgYnl0ZWNvZGUvSnVtcFRh
YmxlLmgKLSAgICBieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCiAgICAgYnl0ZWNvZGUvTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKICAgICBieXRlY29k
ZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFu
dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDMxOTRlMzAyOWQ0Y2Y2NTRiY2Y4
ODhiM2E5MGMzNWQ0YjM0MzkzZDYuLjBmYTZlZjM1Y2ZlMmE4ZjdlODhiYzQxMzMyMDk2Y2QzZDc1
OTM5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDcsNyArMTQ3LDYgQEAK
IAkJMEYwQ0FFRkMxRUM0REE2QjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclByaXZhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENBRUZBMUVD
NERBNjIwMDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0FFRkYxRUM0REE4ODAwOTcw
RDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5h
bGl6ZXJDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMw
MTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODEx
NTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5r
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAv
KiBBaXJDdXN0b20uaCAqLzsgfTsKIAkJMEYxMkRFMTAxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2Vw
dGlvbkZ1enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMzZENEQxNzRBRDY5RTAw
NzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzODksNyArMjM4OCw2
IEBACiAJCTBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZpbmFsaXplckNhbGxiYWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFD
MCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyog
TExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJ
bnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMEYxQTIx
QzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJDdXN0b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlv
bkZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9u
RnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBFMTk3OUQ1RkQw
MDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2VwdGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg4MDks
NyArODgwNyw2IEBACiAJCQkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmggKi8sCiAJCQkJRTM2MzdFRTgyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtU
aW1lQ29uc3RhbnQuY3BwICovLAogCQkJCUUzNjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5r
VGltZUNvbnN0YW50LmggKi8sCi0JCQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50
Q2FsbExpbmtJbmZvLmggKi8sCiAJCQkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJNTNG
QTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTE0Rjc5RjZFMjE2RUFENTAwMDA0NkQzOSAvKiBNZXRh
ZGF0YVRhYmxlLmNwcCAqLywKQEAgLTEwNTE4LDcgKzEwNTE1LDYgQEAKIAkJCQlFMzYzN0VFOTIz
NkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwREU5QTA5MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFzc2VtYmx5LmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0lu
Zm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTElu
dENMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyog
TExJbnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3
MiAvKiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggOTI1NTkx
OGIxYmExNzVhMWY0OWRjMzAyNWVjNmZjYTg4OTM5ZDM2NC4uMzBlM2FiZTMxYzBlMDIwMzkzMjM0
ZGNiNmMyNDFiNWY2NzhjNzRmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCkBAIC0zNzcsNyArMzc3LDEwIEBA
IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyQmFzZSB7CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
QmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2NhdGlvbigpLCBu
YW1lLCBvdXQpOworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRhYmxlQWRkcmVzcygpLCBkYXRhTG9j
YXRpb24oKSwgbmFtZSwgb3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKG51bGxwdHIsIG51bGxwdHIsIG5hbWUsIG91
dCk7CiAgICAgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0IHsgZHVt
cFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYmUyZThjODExZDZkZGQwYzE4NGJhNWVkNGQ5
NTc5MzZmZDIyNThhMi4uNTg3ZTk2Y2I4YzRmNzlhNTBjY2ZiZDBiNmU4ZjFlYzY5YThkMWIxOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBA
IC0yNiw2ICsyNiw3IEBACiAKICAgICA6QmFzaWNCbG9ja0xvY2F0aW9uLAogICAgIDpCb3VuZExh
YmVsLAorICAgIDpDYWxsTGlua0luZm8sCiAgICAgOkRlYnVnSG9va1R5cGUsCiAgICAgOkVDTUFN
b2RlLAogICAgIDpFcnJvclR5cGVXaXRoRXh0ZW5zaW9uLApAQCAtNDQsNyArNDUsNiBAQAogICAg
IDpKU1Njb3BlLAogICAgIDpKU1R5cGUsCiAgICAgOkpTVmFsdWUsCi0gICAgOkxMSW50Q2FsbExp
bmtJbmZvLAogICAgIDpSZXN1bHRUeXBlLAogICAgIDpPcGVyYW5kVHlwZXMsCiAgICAgOlByaXZh
dGVGaWVsZFB1dEtpbmQsCkBAIC01NSw2ICs1NSw3IEBACiAgICAgOlN0cnVjdHVyZSwKICAgICA6
U3RydWN0dXJlSUQsCiAgICAgOlN0cnVjdHVyZUNoYWluLAorICAgIDpTdHJ1Y3R1cmVTdHViSW5m
bywKICAgICA6U3ltYm9sVGFibGUsCiAgICAgOlN5bWJvbFRhYmxlT3JTY29wZURlcHRoLAogICAg
IDpUb1RoaXNTdGF0dXMsCkBAIC04NDAsNyArODQxLDggQEAKICAgICAgICAgYXJndjogdW5zaWdu
ZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50
Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKICAgICB9CiAKQEAgLTg1Miw3ICs4NTQsOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRD
YWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAogICAgIH0KIApAQCAtODY1LDcgKzg2OCw4IEBACiAgICAgICAgIGVjbWFNb2RlOiBFQ01B
TW9kZSwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJ
bnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAogICAgIH0KIApAQCAtODc5LDYgKzg4Myw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJn
OiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENh
bGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAtOTAwLDYgKzkwNSw3IEBACiAgICAg
ICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBj
YWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVBy
b2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAtOTIxLDYg
KzkyNyw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0
YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAg
ICB9CkBAIC05MzMsNyArOTQwLDggQEAKICAgICAgICAgYXJndjogdW5zaWduZWQsCiAgICAgfSwK
ICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZv
LAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9
CiAKQEAgLTk0Nyw2ICs5NTUsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAg
ICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTEyNDksNyArMTI1OCw4IEBACiAgICAgbWV0YWRhdGE6IHsK
ICAgICAgICAgaXRlcmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAg
ICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCi0gICAgICAgIGNhbGxMaW5rSW5mbzog
TExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAor
ICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgaXRlcmF0b3JQcm9m
aWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRh
ZGF0YSwKICAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKQEAgLTEyNzIsNyArMTI4
Miw4IEBACiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgaXRlcmF0aW9uTWV0YWRhdGE6IEl0ZXJh
dGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxlOiBBcnJheVByb2ZpbGUs
Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxM
aW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgbmV4dFJlc3VsdFByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICAgICAgZG9u
ZU1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICAgICAgZG9uZVByb2ZpbGU6
IFZhbHVlUHJvZmlsZSwKQEAgLTE0MTUsNiArMTQyNiwxMCBAQAogb3AgOmxsaW50X25hdGl2ZV9j
b25zdHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJh
bXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5l
CitvcCA6bGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NhbGxf
dHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDps
bGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90
cmFtcG9saW5lCiBvcCA6bm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUKQEAgLTE0MjMsNiArMTQz
OCw4IEBACiBvcCA6bGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbgogb3AgOm9wX2NhbGxf
cmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbgorb3AgOm9w
X2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19y
ZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24K
IG9wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2dl
dF9ieV9pZF9yZXR1cm5fbG9jYXRpb24KQEAgLTE0NDAsNiArMTQ1Nyw4IEBACiBvcCA6b3BfaXRl
cmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2FsbF9yZXR1cm5f
bG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb24KK29wIDpvcF90
YWlsX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KK29wIDpvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHNfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb24K
QEAgLTE0NDcsNiArMTQ2NiwxMCBAQAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbAogb3AgOmpz
X3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3QK
K29wIDpqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJncworb3AgOmpzX3RyYW1wb2xpbmVfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MKK29wIDpqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdz
CitvcCA6anNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKIG9wIDpq
c190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQKIG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJh
dG9yX29wZW4KIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaAppbmRleCA0ZjQ3YzhiY2NmOGU1NzQ4YWE5YjBmMzZlNmYzNjMwNWFkYzMwMDEx
Li4yNzBjZDZmMWQwMmY0NGQ1M2RiM2U2YWE2M2FmZmExNWUwYzA5MjZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaApAQCAtMTgwLDcgKzE4MCw3IEBAIHB0cmRpZmZfdCBzdGFja09mZnNl
dEluUmVnaXN0ZXJzRm9yQ2FsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHVuc2lnbmVkIGNo
ZWNrCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+Ci1MTEludENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNp
Z25lZCBjaGVja3BvaW50SW5kZXgpCitDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRl
Y29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewogICAg
IFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOwogICAgIHJldHVybiBtZXRhZGF0YS5tX2Nh
bGxMaW5rSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAKaW5kZXggM2I4MDNiMzhhNzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBhNTU4YS4u
OThjNjM2ZDg5MzFjZjFlOTc4ZjE1NjlkMTAxZmIwNjFmNTdhNjQzMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTExMyw4ICsxMTMs
NiBAQCBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmRv
bmVMb2NhdGlvbigpCiAgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwogfQogCi1zdGF0aWMgY29u
c3RleHByIHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwotCiB2b2lkIENhbGxM
aW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09i
amVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7CkBAIC0yODYsNyArMjg0LDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEmIHNodWZmbGVEYXRhKQogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5r
VG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVG
b3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRG
YXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNl
RGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKQEAg
LTM0NSw3ICszNDMsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbAogICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURh
dGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgU2NvcGVkTGFtYmRh
PHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNU
YWlsQ2FsbCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKQEAgLTM1OCw3
ICszNTYsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0
YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUgogICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFNjb3BlZExhbWJkYTx2
b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxM
aW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1w
bChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6Olll
cywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKQEAgLTM2Niw3ICszNjQsNyBA
QCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmCiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1Bh
dGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBzZXRTbG93UGF0aENhbGxEZXN0
aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJl
dGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElMaW5rQ2FsbCgpLmNvZGUoKSk7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KQEAgLTM4OCw3ICszODYsMjUgQEAg
dm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxM
aW5rSW5mbyYgdW5saW5rZWRDYWxsTGkKICAgICB9CiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0
YUlDOjpZZXMpOwogICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZv
R1BSOwotICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkp
OworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSUxpbmtDYWxsKCkuY29k
ZSgpKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBD
YWxsVHlwZSBjYWxsVHlwZSwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0YSkKK3sKKyAgICBHUFJSZWcgY2FsbGVlR1BSID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IEdQUkluZm86OnJl
Z1QyOworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7CisgICAg
c2V0VXBDYWxsKGNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIGlmIChmcmFtZVNodWZmbGVEYXRh
KSB7CisgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEgcmVmY291
bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVu
aXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAg
ICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlu
a0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRp
b24odm0uZ2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOworICAgIC8vIElmIEpJVCBpcyBkaXNhYmxl
ZCwgd2Ugc2hvdWxkIG5vdCBzdXBwb3J0IGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjYWxsIElDLgor
ICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIGRpc2FsbG93U3R1YnMoKTsKIH0K
IAogdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCkKQEAgLTQwNiw3ICs0MjIsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQ
YXRoKENDYWxsSGVscGVycyYgaml0KQogICAgIH0pOwogfQogCi12b2lkIENhbGxMaW5rSW5mbzo6
ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERp
cmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFNjb3BlZExhbWJkYTx2b2lk
KCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENh
bGwoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAppbmRleCBlNWY3N2NmMzdiZjI2NmY0YjljOTNjNTBjZjk5NmQyMWM2NjhjZTQ1Li5mMjExYmRm
OWUzNmE2MTI1MzVhNDBlODI0ZWJmZjhkMTllZmUzZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCkBAIC0zMSwxMyArMzEsMTEgQEAKICNpbmNs
dWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLSNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3Rm
L1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIEVOQUJMRShK
SVQpCi0KIGNsYXNzIENDYWxsSGVscGVyczsKIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xh
c3MgSlNGdW5jdGlvbjsKQEAgLTQ3LDYgKzQ1LDggQEAgc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOwogCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CisKICAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUs
CiAgICAgICAgIENhbGwsCkBAIC01OSw2ICs1OSw4IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIERpcmVj
dENvbnN0cnVjdCwKICAgICAgICAgRGlyZWN0VGFpbENhbGwKICAgICB9OworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxsZWVNYXNrID0gMTsKICAgICAKICAg
ICBzdGF0aWMgQ2FsbFR5cGUgY2FsbFR5cGVGb3IoT3Bjb2RlSUQgb3Bjb2RlSUQpOwogCkBAIC0x
ODQsNiArMTg2LDcgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRp
bmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB9CiAKICAgICB2b2lkIGluaXRpYWxpemVEYXRh
SUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIpOworICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIENhbGxUeXBl
LCBCeXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSopOwogCiAgICAgR1BSUmVnIGNh
bGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCkBAIC0xOTMsMTQg
KzE5NiwxNCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURh
dGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBp
c1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FS
Tl9VTlVTRURfUkVUVVJOOwogcHVibGljOgogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6
RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsK
KyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VO
VVNFRF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwotICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CisgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBl
bWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKICAgICBzdGF0aWMgdm9pZCBlbWl0RGF0
YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsK
ICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKQEAgLTI1NSwxNiArMjU4LDYgQEAgY2xhc3Mg
Q2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+
IHsKICAgICAgICAgcmV0dXJuIG1fc3R1Yi5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFNs
b3dTdHViKFJlZjxKSVRTdHViUm91dGluZT4mJiBuZXdTbG93U3R1YikKLSAgICB7Ci0gICAgICAg
IG1fc2xvd1N0dWIgPSBXVEZNb3ZlKG5ld1Nsb3dTdHViKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNs
ZWFyU2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7Ci0gICAg
fQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVu
U2hvdWxkUmVwYXRjaDsKQEAgLTQwOCw2ICs0MDEsNyBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBw
dWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogCisgICAgdWlu
dDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFy
Z3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6
IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGlu
YXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTQzMCw3ICs0MjQsNiBAQCBjbGFzcyBD
YWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4g
ewogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fY2FsbGVlT3JDb2RlQmxvY2s7CiAgICAgV3Jp
dGVCYXJyaWVyPEpTQ2VsbD4gbV9sYXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZTsKICAgICBSZWZQ
dHI8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+IG1fc3R1YjsKLSAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IG1fc2xvd1N0dWI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBtX2ZyYW1lU2h1ZmZsZURhdGE7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47
CiAgICAgYm9vbCBtX2hhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKQEAgLTQ0Myw3ICs0MzYsNiBA
QCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxM
aW5rSW5mbz4gewogICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDogMTsgLy8gVXNlRGF0YUlDCiAg
ICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIHVpbnQzMl90IG1f
c2xvd1BhdGhDb3VudCB7IDAgfTsKLSAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVt
YmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBh
bGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxM
aW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCkBAIC00NTgsNiAr
NDUwLDQgQEAgc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7CiB9OwogCi0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKLQogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAppbmRleCBmN2FmYjJiMGYyOGZk
OWU1ZmZjNWMzNGI2YTNhODU2YWUzNzMwMmY1Li4zYmJiMjIwMDA0ZmRhMTNiYTc2NTg0ZGUzM2Q0
MGMwZTQ0MjEyYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDYWxsTGlua0lu
Zm8uaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKQEAgLTY0LDMzICs2Myw3IEBAIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIENvZGVCCiAgICAgfQogI2VuZGlmCiAKLSAgICBhdXRvIGluc3RydWN0aW9u
ID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSk7Ci0gICAgT3Bjb2RlSUQgb3AgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKLQotICAgIExM
SW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNh
c2Ugb3BfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENh
bGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5z
dHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2Fs
bExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX3RhaWxfY2FsbDoKLSAgICAg
ICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcFRhaWxDYWxsPigpLm1ldGFkYXRh
KHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IG9wX2l0ZXJhdG9yX29wZW46Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck9wZW4+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0lu
Zm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDoKLSAgICAgICAg
Y2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKS5tZXRhZGF0
YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKLSAgICB9Ci0gICAgCi0g
ICAgCi0gICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxs
ZWUoKSk7CisgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKIH0KIAogQ2FsbExpbmtTdGF0dXMg
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGI5MDlkZjQ1ODQ0YjIyOWVjOTE4MzM5MTg0MjYyMzQ1
OTI3ZWE2ZGYuLjQyYmViMmJiYTdhNWM0MGVjMzkyZjk0ZDBjY2I1ZDhhNjU4OTE5Y2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC00NDksMTQg
KzQ0OSwxNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEodGhpcyk7IFwKICAgICBuZXcgKCZtZXRhZGF0YSkgX19vcDo6TWV0
YWRhdGEgeyBieXRlY29kZSB9OyBcCiAKLSNkZWZpbmUgQ0FTRShfX29wKSBjYXNlIF9fb3A6Om9w
Y29kZUlECi0KLSNkZWZpbmUgTElOSyguLi4pIFwKLSAgICBDQVNFKFdURl9MQVpZX0ZJUlNUKF9f
VkFfQVJHU19fKSk6IHsgXAorI2RlZmluZSBMSU5LX0lNUEwoLi4uKSBcCiAgICAgICAgIElOSVRJ
QUxJWkVfTUVUQURBVEEoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKSBcCiAgICAgICAgIFdU
Rl9MQVpZX0hBU19SRVNUKF9fVkFfQVJHU19fKSh7IFwKICAgICAgICAgICAgIFdURl9MQVpZX0ZP
Ul9FQUNIX1RFUk0oTElOS19GSUVMRCwgIFdURl9MQVpZX1JFU1RfKF9fVkFfQVJHU19fKSkgXAog
ICAgICAgICB9KSBcCisKKyNkZWZpbmUgQ0FTRShfX29wKSBjYXNlIF9fb3A6Om9wY29kZUlECisK
KyNkZWZpbmUgTElOSyguLi4pIFwKKyAgICBDQVNFKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19f
KSk6IHsgXAorICAgICAgICBMSU5LX0lNUEwoX19WQV9BUkdTX18pIFwKICAgICAgICAgYnJlYWs7
IFwKICAgICB9CiAKQEAgLTQ2NSwxMCArNDY4LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsK
ICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAg
ICAgICAgbV9ieXRlY29kZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAg
IHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxl
KQotICAgICAgICBMSU5LKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQotICAgICAgICBMSU5L
KE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wQ29u
c3RydWN0VmFyYXJncywgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5VmFsLCBwcm9maWxl
KQogICAgICAgICBMSU5LKE9wR2V0UHJpdmF0ZU5hbWUsIHByb2ZpbGUpCiAKQEAgLTQ5OCwxMSAr
NDk3LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElOSyhPcEVudW1lcmF0
b3JIYXNPd25Qcm9wZXJ0eSkKICAgICAgICAgTElOSyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgcHJv
ZmlsZSkKIAotICAgICAgICBMSU5LKE9wQ2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRh
aWxDYWxsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wQ2FsbEV2YWwsIHByb2ZpbGUpCi0gICAg
ICAgIExJTksoT3BDb25zdHJ1Y3QsIHByb2ZpbGUpCi0KICAgICAgICAgTElOSyhPcEluQnlWYWwp
CiAgICAgICAgIExJTksoT3BQdXRCeVZhbCkKICAgICAgICAgTElOSyhPcFB1dEJ5VmFsRGlyZWN0
KQpAQCAtNTI3LDEzICs1MjEsODggQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAg
TElOSyhPcENhdGNoKQogICAgICAgICBMSU5LKE9wUHJvZmlsZUNvbnRyb2xGbG93KQogCisgICAg
ICAgIGNhc2Ugb3BfY2FsbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wQ2FsbCwgcHJvZmls
ZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUMo
dm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRl
eCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBvcF90YWlsX2NhbGw6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcFRhaWxDYWxsLCBw
cm9maWxlKQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1
ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CisjZW5kaWYKKyAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFz
c2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
cmFtZXRlcnMgPSBudW1QYXJhbWV0ZXJzKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXI7CisjZW5kaWYKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IGJ5dGVj
b2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytp
KSB7CisgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgICAgICAg
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5
dGVjb2RlLm1fYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHNodWZmbGVEYXRh
LmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERh
dGFGb3JtYXRKUyk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwg
Y2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHNodWZmbGVEYXRh
LnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxs
TGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihv
cGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksICZzaHVmZmxlRGF0YSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAg
ICAgICAgICBMSU5LX0lNUEwoT3BDYWxsRXZhbCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsK
KyAgICAgICAgICAgIExJTktfSU1QTChPcENvbnN0cnVjdCwgcHJvZmlsZSkKKyAgICAgICAgICAg
IG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBvcF9pdGVyYXRv
cl9vcGVuOiB7Ci0gICAgICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JPcGVu
KQorICAgICAgICAgICAgTElOS19JTVBMKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgbWV0
YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpj
YWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX25l
eHQ6IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BJdGVyYXRvck5leHQpCisg
ICAgICAgICAgICBMSU5LX0lNUEwoT3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBtZXRhZGF0
YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7
CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5r
SW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWls
X2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxWYXJhcmdz
LCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6
ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0
aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czogeworICAgICAgICAg
ICAgTElOS19JTVBMKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQorICAgICAg
ICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExp
bmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxw
dHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2Nv
bnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDb25zdHJ1Y3RWYXJh
cmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlh
bGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3Ry
dWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IApAQCAtMTU2NywxNSArMTYzNiw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGVzKCkKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0KLSAgICBmb3JF
YWNoTExJbnRDYWxsTGlua0luZm8oWyZdKExMSW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
IHsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc0xpbmtlZCgpICYmICF2bS5oZWFwLmlzTWFy
a2VkKGNhbGxMaW5rSW5mby5jYWxsZWUoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNsZWFyaW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcyk7
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8udW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZSgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNh
bGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZSgpKSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby5j
bGVhckxhc3RTZWVuQ2FsbGVlKCk7Ci0gICAgfSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAt
MTYzNyw2ICsxNjk3LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eShWTSYgdm0pCiAgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkp
KQogICAgICAgICBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAKKyAgICBmb3JFYWNoTExJ
bnRDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAg
IGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0pOworICAgIH0pOworCisKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghIWppdENvZGUoKSkKICAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMo
KTsKQEAgLTIxNTQsOCArMjIxOSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5
bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDCiAKIHZvaWQg
Q29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKIHsKLSAgICB3aGlsZSAobV9pbmNvbWlu
Z0xMSW50Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKLSAgICAg
ICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBKSVREYXRhKiBqaXREYXRhID0gbnVsbHB0cjsKICAgICB7CkBAIC0yMTcxLDEyICsy
MjM0LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxG
cmFtZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKiBpbmNvbWluZykKLXsKLSAgICBu
b3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIG1faW5jb21pbmdMTEludENhbGxz
LnB1c2goaW5jb21pbmcpOwotfQotCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6bmV3UmVwbGFjZW1l
bnQoKQogewogICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2Rl
QmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOwpAQCAtMjMyOSw5ICsyMzg2LDEzIEBAIHZv
aWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBS
ZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZtLmhlYXAuaXNDdXJyZW50VGhyZWFkQnVz
eSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkKICAgICAgICAgcmV0
dXJuOwogCi0jaWYgRU5BQkxFKEpJVCkKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKFsmXShD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNl
dENsZWFyZWRCeUpldHRpc29uKCk7CisgICAgICAgIH0pOworCisjaWYgRU5BQkxFKEpJVCkKICAg
ICAgICAgaWYgKEpJVERhdGEqIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAg
ICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQog
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwpAQCAt
Mjg0NywxOSArMjkwOCwxMyBAQCBBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9m
aWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZQogewogICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBzd2l0
Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7Ci0jZGVmaW5lIENBU0UxKE9wKSBcCisjZGVm
aW5lIENBU0UoT3ApIFwKICAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAogICAgICAgICByZXR1cm4g
Jmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FycmF5UHJvZmlsZTsKIAot
I2RlZmluZSBDQVNFMihPcCkgXAotICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJl
dHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJbmZv
Lm1fYXJyYXlQcm9maWxlOworICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUo
Q0FTRSkKIAotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRTEpCi0g
ICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ0FTRTIpCi0KLSN1
bmRlZiBDQVNFMQotI3VuZGVmIENBU0UyCisjdW5kZWYgQ0FTRQogCiAgICAgY2FzZSBPcEdldEJ5
SWQ6Om9wY29kZUlEOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpOwpAQCAtMzAyOSwxNyArMzA4NCwxMiBAQCB2b2lkIENvZGVCbG9jazo6dXBk
YXRlQWxsQXJyYXlQcm9maWxlUHJlZGljdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBs
b2NrZQogICAgICAgICB9CiAgICAgfSk7CiAKLSNkZWZpbmUgVklTSVQxKF9fb3ApIFwKKyNkZWZp
bmUgVklTSVQoX19vcCkgXAogICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRv
JiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlKTsgfSk7CiAKLSNk
ZWZpbmUgVklTSVQyKF9fb3ApIFwKLSAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAo
YXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5tX2FycmF5
UHJvZmlsZSk7IH0pOwotCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShW
SVNJVDEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oVklT
SVQyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoVklTSVQpCiAKLSN1
bmRlZiBWSVNJVDEKLSN1bmRlZiBWSVNJVDIKKyN1bmRlZiBWSVNJVAogCiAgICAgbV9tZXRhZGF0
YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yTmV4dD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewogICAgICAg
ICBwcm9jZXNzKG1ldGFkYXRhLm1faXRlcmFibGVQcm9maWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA2NGY5ZjVhYmNmZTJhZTcwNWQxZGE2NWFh
OWY4MzE5N2I5NmM2ZDMxLi4xMTgzZjkzZTYzMGUxNTEwYmZmZjI5ZThhZjFlYmUyYzhjYzJkNzQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC01NCw3
ICs1NCw2IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKLSNpbmNsdWRlICJMTEludENhbGxMaW5rSW5mby5o
IgogI2luY2x1ZGUgIkxhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSAiTWV0YWRh
dGFUYWJsZS5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCkBAIC0zMTUs
OCArMzE0LDYgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCBs
aW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1v
cnBoaWNDYWxsTm9kZSopOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSAgICB2b2lkIGxpbmtJ
bmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsK
LQogICAgIGNvbnN0IEluc3RydWN0aW9uKiBvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3Ry
dWN0aW9uKiBwYyk7CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtOTU5LDcgKzk1Niw2IEBAIGNsYXNzIENvZGVC
bG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIFZNKiBtX3ZtOwogCiAgICAgY29uc3Qgdm9pZCog
bV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyIHsgbnVsbHB0ciB9OwotICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxMTEludENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExp
bmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1h
cCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0
Q29kZTsKICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTA1OGZmY2Q5MTdkZDJjNTAxNjJlMTM1NWIzZDU4YjE4ZTZhMDcyNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkpTQ1B0clRhZy5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLSNpbmNsdWRlIDx3dGYvU2Vu
dGluZWxMaW5rZWRMaXN0Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgSW5zdHJ1Y3Rp
b247Ci0KLWNsYXNzIExMSW50Q2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxMTEludENhbGxMaW5rSW5mbz4gewotcHVibGljOgotICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCB1bmxp
bmtlZEJpdCA9IDB4MTsKLQotICAgIExMSW50Q2FsbExpbmtJbmZvKCkgPSBkZWZhdWx0OwotICAg
IAotICAgIH5MTEludENhbGxMaW5rSW5mbygpCi0gICAgewotICAgICAgICBpZiAoaXNPbkxpc3Qo
KSkKLSAgICAgICAgICAgIHJlbW92ZSgpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzTGlua2Vk
KCkgY29uc3QgeyByZXR1cm4gIShtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCAm
IHVubGlua2VkQml0KTsgfQotICAgIAotCi0gICAgdm9pZCBsaW5rKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHIpCi0gICAgewotICAgICAgICBpZiAoaXNPbkxpc3QoKSkKLSAgICAgICAgICAg
IHJlbW92ZSgpOwotICAgICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSk7Ci0gICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKG93bmVyLCBjYWxsZWUpOwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0gY29k
ZVB0cjsKLSAgICB9Ci0KLSAgICB2b2lkIHVubGluaygpCi0gICAgewotICAgICAgICAvLyBNYWtl
IGxpbmsgaW52YWxpZGF0ZWQuIEl0IHdvcmtzIGJlY2F1c2UgTExJbnQgdGVzdHMgdGhlIGdpdmVu
IGNhbGxlZSB3aXRoIHRoaXMgcG9pbnRlci4gQnV0IGl0IGlzIHN0aWxsIHZhbGlkIGFzIGxhc3RT
ZWVuQ2FsbGVlIQotICAgICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB8
PSB1bmxpbmtlZEJpdDsKLSAgICAgICAgbV9tYWNoaW5lQ29kZVRhcmdldCA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICBpZiAoaXNPbkxpc3QoKSkKLSAg
ICAgICAgICAgIHJlbW92ZSgpOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBjYWxsZWUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKCFpc0xpbmtlZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNPYmplY3QqPihtX2NhbGxlZU9y
TGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGxhc3RT
ZWVuQ2FsbGVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNP
YmplY3QqPihtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCAmIH51bmxpbmtlZEJp
dCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCkKLSAgICB7Ci0gICAg
ICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ID0gdW5saW5rZWRCaXQ7Ci0g
ICAgfQotCi0gICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOwotICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJ
bnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQotCi1wcml2YXRlOgotICAgIHVpbnRw
dHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fbWFjaGluZUNvZGVU
YXJnZXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGNvZGUuaAppbmRleCBjYThiZWYzMjhiNGJmYjJiMGRmZGM4YjI4NTI0OTIxYWM4Mzli
ZDM2Li4xY2JjNjZmODQ5OTU0OTk3ZWY3YzUwZDQ5Mzg0MzAyZjM1YzYyOWVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCkBAIC0xMjYsMTEgKzEyNiwxOSBAQCBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpn
ZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wUnNoaWZ0KSBcCiAgICAgbWFjcm8oT3BH
ZXRQcml2YXRlTmFtZSkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BS
T0ZJTEUobWFjcm8pIFwKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9M
SU5LX0lORk8obWFjcm8pIFwKKyAgICBtYWNybyhPcENhbGwpIFwKKyAgICBtYWNybyhPcFRhaWxD
YWxsKSBcCisgICAgbWFjcm8oT3BDYWxsRXZhbCkgXAorICAgIG1hY3JvKE9wQ29uc3RydWN0KSBc
CisgICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yTmV4dCkg
XAogICAgIG1hY3JvKE9wQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsVmFyYXJn
cykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKSBcCiAgICAgbWFjcm8o
T3BDb25zdHJ1Y3RWYXJhcmdzKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJS
QVlfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKICAgICBtYWNybyhP
cEluQnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsKSBcCkBAIC0xMzksNiArMTQ3LDcgQEAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxlbmd0aCA9IFdU
Rjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcEVudW1lcmF0b3JHZXRCeVZhbCkg
XAogICAgIG1hY3JvKE9wRW51bWVyYXRvckluQnlWYWwpIFwKICAgICBtYWNybyhPcEVudW1lcmF0
b3JIYXNPd25Qcm9wZXJ0eSkgXAorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExf
TElOS19JTkZPKG1hY3JvKSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlf
QUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdBcnJheSkgXApAQCAt
MTQ4LDE0ICsxNTcsNiBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4
T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogI2RlZmluZSBGT1JfRUFD
SF9PUENPREVfV0lUSF9PQkpFQ1RfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFj
cm8oT3BOZXdPYmplY3QpIFwKIAotI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9D
QUxMX0xJTktfSU5GTyhtYWNybykgXAotICAgIG1hY3JvKE9wQ2FsbCkgXAotICAgIG1hY3JvKE9w
VGFpbENhbGwpIFwKLSAgICBtYWNybyhPcENhbGxFdmFsKSBcCi0gICAgbWFjcm8oT3BDb25zdHJ1
Y3QpIFwKLSAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JO
ZXh0KSBcCi0KICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJ
TEUobWFjcm8pIFwKICAgICBtYWNybyhPcEFkZCkgXAogICAgIG1hY3JvKE9wTXVsKSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAppbmRleCAwZDE5ZTI3OTA1NmU1ZjM3ZTc3MWM1YzQ5YTJkYjBlNmMyZDg0OGQ3Li5hYzU3MTI3
YmNmODkwNzJiZTAzODQxNmRhMTM5YjQxZjE2NGFlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTQwMyw3ICs0
MDMsNiBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVu
c2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMsCiAKICNkZWZpbmUgQ09VTlQoX19vcCkgbnVt
YmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKICAg
ICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDT1VOVCkKLSAgICAgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ09VTlQpCiAjdW5kZWYg
Q09VTlQKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVu
dHJpZXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyAr
PSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wR2V0QnlJZD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggNDAzOTRhOTQz
OTkyOTkzZjU0NWEyYWM2MmNmNmVkYzA5ZGY1NTVmYS4uMWM1OTA0MmUwZDBjMzgxMWIzYzliZTIx
NThjZGM1NGMwMWRiYjgxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgQ2FjaGVkQ29k
ZUJsb2NrOwogCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5
cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKIAogc3RydWN0IFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDVjNzIwNThk
Y2YyMTk2MGRjZjg1M2UwYTkyYzI3ZTg5YTJkNTZiZWUuLmZlZWQ0NDFmYTc0OTdkYmZmOTY2OTE1
YmUyNGE3Yjk4NGQxYzI4YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAKQEAgLTMxNSw2ICszMTUsMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFi
aWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IEkKICAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNl
IGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
bGlua19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRf
Z2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6CiAgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVn
aHRfZXhjZXB0aW9uOgogICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRf
Y2FsbF90cmFtcG9saW5lOgpAQCAtMzI1LDYgKzMyOSw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBh
YmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNl
IG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1
cm5fbG9jYXRpb246CkBAIC0zMzcsNiArMzQzLDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxp
dHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkK
ICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Ns
b3dfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3JldHVy
bl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93
X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF9ldmFsX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgpAQCAtMzQ1LDYgKzM1MywxMCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9w
Y29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2Nh
bGw6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWls
X2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFy
Z3M6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
czoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dDoKICAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
Y2FsbF9zbG93OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGI0NTFjZGI2MWY3YTExYjMzMDJjMTg1YzY2YmZm
MTdhOWZkYmUwOWYuLmI1YzM3MDljOTVjZWQwYjkzYzVjODkyNTY5Y2IxZDM0ZDg4OGI1OTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKQEAgLTE2NiwxMCArMTY2LDEwIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNv
CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0
cnVjdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6
OkNhbGxWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJ
TlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJh
cmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElP
TihvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsKICAgICAgICAgICAgIGlmIChjYWxsSW5z
dHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlfaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA1MjM5Yjhh
NDQ5NDA3NTg1OTY4NzFmZDI3ZWEyNWUxYTQ3NDBhMTc0Li41ZGRiMTYwMzVkNGIwYTU3ZGQ1ZTg5
Y2ExYzk5M2RmNTU2NzU2YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTg0NywxMCArODQ3LDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
WyZdIHsKKyAgICAgICAgICAgIGluZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0
LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJh
bWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSkpOwogCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFi
ZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBAIC04OTIsNyArODkyLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxs
ZWVQYXlsb2FkR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkBAIC05MDAsNyAr
OTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAg
ICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgfQotICAgICAg
ICB9KTsKKyAgICAgICAgfSkpOwogICAgIH0gZWxzZQogICAgICAgICBzbG93Q2FzZXMgPSBpbmZv
LT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGIzYTEyYmI2ODM2NzU1Y2I3ZTM1
MWFiMDM5MGY4NzBkMjU3MzcwMWMuLjU2NmY3ZDVlOTlkZjAwOTQxYzIyYmNiYWU0NTc4OGY3MDI2
ZTI5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcApAQCAtOTM3LDEwICs5MzcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWluUGF0
aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUlu
ZGV4KGNhbGxTaXRlKTsKIAotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFp
bENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1p
dERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsK
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZs
ZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0pKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0Lmxh
YmVsKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KEludmFsaWRHUFJSZWcpOwpAQCAtOTgwLDcgKzk4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CisgICAg
ICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZUdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkBAIC05
ODgsNyArOTg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgfQot
ICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgIH0gZWxzZQogICAgICAgICBzbG93Q2FzZXMg
PSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BS
UmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKaW5kZXggMDM2YTJlMjQ4MzhhMmJlMTU0MzFkOGY4ZTUyYmM4OGJjNjlh
ZjI3Ni4uMjdmYzFmYzlhM2VkNTYwMDI5ZDg5Y2ViMzk0ZGVjNjFhODg0ZjJiOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTAzOTksMTAg
KzEwMzk5LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBbJl0geworICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgc2Nv
cGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWls
Q2FsbCgpOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkp
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0
aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICAgICAgICAgICAgICAK
QEAgLTEwNTU1LDEwICsxMDU1NSwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBzdGF0ZS0+aml0Q29kZS0+
Y29tbW9uLmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdU
MCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAg
ICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsK
ICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfSkpOwogCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKICAgICAgICAg
ICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKQEAgLTEwODk4LDEwICsx
MDg5OCwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsK
ICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7CkBAIC0xMTE3OSwxMCArMTEx
NzksMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5m
bzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAg
ICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IGM4Y2JiZWUwNmJmN2Q2NjYyYzE5
YTRhNGE4YTE4YzIxY2VmZDNmNzIuLmE5YzE1YzU4YmJhNjc0YjFlYjZiYjM3NWNiNmYyOWE5YjE5
MmM5NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKQEAgLTc1NSw4ICs3NTUsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSQogICAgIGFkZExp
bmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8g
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRp
b25QdHJUYWc+KGNhbGwpOwogICAgICAgICBsaW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6
YXRpb25UYXNrKFs9LCAmdm1dICgpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZt
LCAqaW5mbyk7Ci0gICAgICAgICAgICBpbmZvLT5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENU
SVZpcnR1YWxDYWxsKCppbmZvKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCmluZGV4IGRlMmM1Y2U3NzBiYmQ1OTNiN2FlNWZkMWE2NTI2NzM4OTQz
ZGQ5YTEuLjE5YjRjY2UyMGEzMmUxMjk0NTBiZDNhOGVlZTMyNGI5Y2M0ZTYxOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaApAQCAtNzA2LDYgKzcwNiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihWTSYpOworCisgICAgcHJpdmF0ZToKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19v
cF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjUsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2Vu
dGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhy
b3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZlMTAy
YjVkZmJmYTJiZTRmZTE3MzE5N2UyYi4uNzA0YmZiNGFlYTJlYzVmYjBjZDNmOTIzMTE1YTk1YTdm
N2FhOTJhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01OSwxNyAr
NTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIg
KHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwotCi0jaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJ
U3R1YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgorICAgIGVtaXRO
YWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3Ip
LmNvZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAgIENDYWxsSGVscGVycyBq
aXQ7CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5l
OiBvcF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
OjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC05Nyw3ICsxMDEsNyBA
QCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCkKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5n
VGhpcygwKSksIHRtcEpTUik7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbCh0
bXBKU1IpOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyh0bXBKU1IucGF5bG9hZEdQUigpLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCB0bXBHUFIpOwotICAgICAgICBzdG9yZTMyVG9NZXRh
ZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5r
SW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUz
MlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlE
KCkpOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC0yNTEsMTEgKzI1NSwx
MSBAQCBib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2Rl
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIgPSByZWdUMjsKICAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3Rh
bnQsIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRH
UFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0geworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5w
YXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewog
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURhdGEg
fTsKICAgICAgICAgc2h1ZmZsZXIubG9ja0dQUihjYWxsTGlua0luZm9HUFIpOwogICAgICAgICBz
aHVmZmxlci5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICB9KTsKKyAgICB9KSk7CiAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwpA
QCAtMzIyLDEwICszMjYsMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBjb25zdGV4
cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwogICAgIGxvYWRDb25zdGFudChpbmZv
Q29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5m
b0dQUiwgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxs
TGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3co
Y2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVM
b2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCmluZGV4IGY4NDQ1ODc4MDNjMjYxOGM2ODAzOTgzNmNlZTZjN2IzNGZkMmMzMDQuLjJm
ZTIzYzQ5ZmQwZjk0MDkxZjY4NjA1Yjc1N2FlMmNlMzIyMDE0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMzcwLDIxICszNzAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQot
ICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAg
aml0LnJldCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9wX3Jl
dF9oYW5kbGVyIik7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KIHZv
aWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9QcmltaXRpdmU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAppbmRleCBjYWY0N2ZhNTQzYzg0MmUyNzBmMWNkMjUxODdmNDU0MTVjYmRmZTM4Li5k
MWU1MzJjNWVmNDAzOTQ0YWIzYzE5Zjc0ZGM1NDY4YmNmNjM0YWY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE0NjQsNyArMTQ2NCw3IEBAIHN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lCiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAgdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAg
ICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgICAgIH0KIApAQCAtMTQ3Niw3ICsxNDc2
LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUKICAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5
cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNh
bGxlZSkpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICB2
bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwogICAgIH0KIApAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0
dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUKICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwogICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxl
QWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAg
LTE1MDIsMTEgKzE1MDIsMTEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0
Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUKICAgICBBU1NFUlQo
Y29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKICAgICB0aHJvd0V4
Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihn
bG9iYWxPYmplY3QsIGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAg
ICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwg
U2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQorU2xvd1BhdGhS
ZXR1cm5UeXBlIGxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0xNTQ5LDcgKzE1NDksNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxG
cmFtZSogY2FsbAogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAg
ICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9p
ZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAg
ICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9j
YXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfTsKIApAQCAtMTU4MSw3ICsxNTgx
LDEyIEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1Bh
dGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsCiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxM
aW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBL
ZWVwVGhlRnJhbWUpKTsKIH0KIAotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwg
U2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQoreworICAgIHJl
dHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7Cit9
CisKK1Nsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKIHsKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTE2MDgsNyArMTYxMyw3IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRh
YmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKICAg
ICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAgICB2
b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDRiNWQwMTFmOTA2YTMwMzJlMmE1Yjg1
MGEzYTBiOWE0YzY4MzRiZjMuLjIwMDdiNTUxZDU2ZjA3ZGFiNzk5MTM5MjNmODQ2NTYwNDVjMmYw
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0zMzIs
NiArMzMyLDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25WYWx1ZVN1YlBy
b2ZpbGVkTm9PcHRpbWl6ZSwgRW5jb2RlZEpTVmFsdWUsICgKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwgKFZNKikpOwogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywg
dm9pZCwgKFZNKikpOwogCitTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqLCBK
U0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0lu
Zm8qLCBKU0NlbGwqJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM0NGM5NTMxMjNi
M2Q0M2Q2OWY2NjlhMzk0YmE1MDhjYzI1YTZlZTMuLjg4ZWU0ZmFkNmI3YWNiYWZiNjEyMzNjMDdi
N2MxNmFkMTUyNDRjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAt
MTQ0Nyw5ICsxNDQ3LDggQEAgc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2UKIAogc3RhdGljIHZvaWQg
bGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9
IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1
YWxDYWxsKGNhbGxMaW5rSW5mbyk7CiAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5m
bywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOwogfQogCiBzdGF0aWMgSlND
ZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQpAQCAtMTU0NSw3ICsxNTQ0LDYg
QEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYKICAgICB9CiAgICAgY2FsbExpbmtJbmZvLmNsZWFy
U2VlbigpOwogICAgIGNhbGxMaW5rSW5mby5jbGVhclN0dWIoKTsKLSAgICBjYWxsTGlua0luZm8u
Y2xlYXJTbG93U3R1YigpOwogICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKICAgICAg
ICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQpAQCAtMTU1NCw3ICsxNTUyLDcgQEAgdm9pZCB1
bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJ
bmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKLSAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
cmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOworICAgIHJldmVydENhbGwodm0sIGNh
bGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0
clRhZz4oKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtMTU2NSw5ICsx
NTYzLDggQEAgc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0kKICAgICBkYXRhTG9nTG5JZihzaG91bGRE
dW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSwKICAgICAgICAgIkxpbmtpbmcgdmly
dHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbGVyRnJh
bWUtPmNvZGVPcmlnaW4oKSkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5r
SW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2
aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTGlua0luZm8pOwogICAgIHJl
dmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0lu
Zm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxU
aHVuaykpOwogICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlWaXJ0dWFsKCk7CiB9CiAKQEAg
LTE4MDMsOCArMTgwMCwxMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7
Ci0gICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKQorICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkg
eworICAgICAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CiAgICAgICAgICAgICBkb25lLmFwcGVu
ZChzdHViSml0Lmp1bXAoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgc2xvd1BhdGgu
bGluaygmc3R1YkppdCk7CkBAIC0xODI4LDE1ICsxODI3LDIxIEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
LSAgICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAg
ICAgLy8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRoLCBnZXQgcmlkIG9mIGFueSBy
ZW1uYW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBleGlzdC4gVGhpcyByZWFsbHkg
b25seSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAgICAgICAgLy8gU1AgZm9yIGNh
bGxzLgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJ
bmZvOjpyZWdUNCk7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0YUlDLCBsaW5rUmVnaXN0
ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAgLy8gMi4gSWYgaXQgaXMg
dGFpbC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24g
Zm9yIHNsb3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0byBwdXQgaXQgZm9yIHRo
ZSBzbG93LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAgICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlv
bigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAg
ICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdU
NCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlDKTsKKyAgICAgICAgaWYg
KGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6OnJldHVybkZyb21C
YXNlbGluZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQ
UkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9CiAgICAgfQotICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2Nh
dGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKLSAg
ICAKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86
OnJlZ1Q0KTsKKwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1w
KCk7CiAgICAgICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoc3R1YkppdCwgb3duZXIs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OwpAQCAtMTg1OCw4ICsxODYzLDEwIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAjZW5kaWYK
ICAgICB9CiAKLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKKyAgICBpZiAoIWRvbmUuZW1wdHkoKSkg
eworICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOworICAgIH0KICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElT
dHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgCiAg
ICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRh
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IGU4
ZGFmZjdkODhiMzBjNmJmODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQwYjM3Mzg5MjFhNGYwMDE1
MTJlN2RlZTNhODQ0M2M1MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludERhdGEuY3BwCkBAIC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIgdm9pZCB3YXNtX2VudHJ5
KHZvaWQqLCB2b2lkKiwgdm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb0phdmFTY3Jp
cHRUcmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVRyYW1w
b2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFt
cG9saW5lKHZvaWQpOworZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRy
eVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0aW9uSGFuZGxlclRyYW1w
b2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxMSW50VHJhbXBvbGluZSh2
b2lkKTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAg
ewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6
dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdh
dGUoSlNFbnRyeVB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRl
VGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcubGxp
bnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5UHRy
VGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC0xNjEs
MTEgKzE2MiwxOSBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAgICAgICAg
ICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlTbG93UGF0aFB0
clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRl
KEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVJl
Zi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2
b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpT
RW50cnlTbG93UGF0aFRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5n
YXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlTbG93UGF0
aFB0clRhZyldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAg
ICB9CisgICAgeworICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOworICAgICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVU
YWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19q
c2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENh
bGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CisgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRl
c3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29k
ZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggNDk0ZWY3NjFlMzI3OTIzZjE0
MjAyZmE4YzRlMWNkMzEyODQyMGM2NC4uNzczZjRkM2YzOTViYzYxYzNiZDMwNGI4N2JmOTNlMjQz
YWI0ZGI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCkBAIC01ODIsNiArNTgyLDE3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHN0YWNrX2No
ZWNrKQogICAgIExMSU5UX1JFVFVSTl9UV08ocGMsIGNhbGxGcmFtZSk7CiB9CiAKK2V4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X2xpbmtfY2FsbChDYWxsRnJhbWUqIGNhbGxlZUZy
YW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbywgdm9pZCopCit7CisgICAgcmV0dXJuIGxpbmtGb3IoY2FsbGVlRnJhbWUsIGdsb2JhbE9i
amVjdCwgY2FsbExpbmtJbmZvKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
bGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCB2b2lkKikKK3sKKyAg
ICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKKyAgICByZXR1cm4gdmlydHVh
bEZvcldpdGhGdW5jdGlvbihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsTGlua0luZm8s
IGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7Cit9CisKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9uZXdfb2JqZWN0KQogewogICAgIExMSU5UX0JFR0lOKCk7CkBAIC0xODE5LDcg
KzE4MzAsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgICAgICAgICAgY2FsbGVlRnJh
bWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgICAgIHZtLmVuY29kZWRI
b3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNh
bGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKICAgICAgICAgICAgIERpc2Fs
bG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9i
amVjdCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2lu
dCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAg
ICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnM7CisgICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3Qs
IGNhbGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHNsb3dQYXRoTG9nKCJDYWxsIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjog
IiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4MzgsNyArMTg1MCw4IEBAIHN0YXRpYyBTbG93UGF0aFJl
dHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBj
YWxsZWUsCiAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7
CiAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5u
YXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVl
RnJhbWUpOwogICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgIExMSU5UX0NB
TExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5
UHRyVGFnKTsKKyAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZy
YW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xv
YmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBv
aW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgIH0K
ICAgICAKICAgICBzbG93UGF0aExvZygiQ29uc3RydWN0b3IgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0
aW9uOiAiLCBjYWxsZWUsICJcbiIpOwpAQCAtMTg0Nyw3ICsxODYwLDcgQEAgc3RhdGljIFNsb3dQ
YXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1Zh
bHVlIGNhbGxlZSwKICAgICBMTElOVF9DQUxMX1RIUk9XKGdsb2JhbE9iamVjdCwgY3JlYXRlTm90
QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKIH0KIAotaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUsIExMSW50Q2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gPSBudWxscHRyKQoraW5saW5lIFNsb3dQYXRoUmV0dXJuVHlw
ZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kLCBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC0xODYyLDE0ICsxODc1LDkgQEAg
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rp
b24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkp
IHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CiAgICAg
ICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLQotICAgICAgICAgICAgaWYgKCFMTElOVF9BTFdB
WVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjYWxsZXJDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5saW5rKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGludGVybmFsRnVu
Y3Rpb24sIGNvZGVQdHIpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAg
ICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBh
dXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVn
aXN0ZXJzOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxs
ZXJTUCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAg
ICAgfQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENh
bGwoY2FsbGVlRnJhbWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKICAgICB9CkBAIC0xOTA0LDc0
ICsxOTEyLDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICB9CiAKICAgICBBU1NFUlQo
ISFjb2RlUHRyKTsKLSAgICAKLSAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBj
YWxsTGlua0luZm8pIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjYWxsZXJD
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVy
Q29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwotICAgICAgICBpZiAoY29kZUJsb2NrKQotICAg
ICAgICAgICAgY29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxGcmFtZSwgY2FsbExpbmtJ
bmZvKTsKLSAgICB9Ci0KICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxP
YmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQ
dHJUYWcpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBPcCYmIGJ5dGVjb2RlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIHVuc2lnbmVk
IGNoZWNrcG9pbnRJbmRleCA9IDApCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0bzoKLSAgICAvLyAt
IFNldCB1cCBhIGNhbGwgZnJhbWUuCi0gICAgLy8gLSBGaWd1cmUgb3V0IHdoYXQgdG8gY2FsbCBh
bmQgY29tcGlsZSBpdCBpZiBuZWNlc3NhcnkuCi0gICAgLy8gLSBJZiBwb3NzaWJsZSwgbGluayB0
aGUgY2FsbCdzIGlubGluZSBjYWNoZS4KLSAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hp
bmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KLSAgICAKLSAg
ICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgY2FsbGVlRm9y
KGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpKTsKLSAgICAKLSAgICBDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lID0gY2FsbEZyYW1lIC0gc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNv
ZGUsIGNoZWNrcG9pbnRJbmRleCk7Ci0gICAgCi0gICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2Rl
LCBjaGVja3BvaW50SW5kZXgpKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwotICAgIGNh
bGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIAotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICByZXR1cm4gc2V0VXBD
YWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlLCAmY2FsbExpbmtJbmZvRm9yKG1l
dGFkYXRhLCBjaGVja3BvaW50SW5kZXgpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BDYWxsPigpLCBDb2Rl
Rm9yQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxs
KQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2Fs
bChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wVGFpbENhbGw+KCksIENvZGVGb3JDYWxs
KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3QpCi17Ci0g
ICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVC
bG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BDb25zdHJ1Y3Q+KCksIENvZGVGb3JDb25zdHJ1Y3Qp
KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2Fs
bCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVC
bG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck9wZW4+KCksIENvZGVGb3JDYWxsLCBP
cEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcEl0ZXJh
dG9yTmV4dD4oKSwgQ29kZUZvckNhbGwsIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dCkpOwor
ICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnM7CisgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJT
UCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MpCkBAIC0y
MDQzLDggKzE5ODYsOCBAQCBlbnVtIGNsYXNzIFNldEFyZ3VtZW50c1dpdGggewogICAgIEN1cnJl
bnRBcmd1bWVudHMKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotaW5saW5lIFNsb3dQYXRo
UmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3Ry
dWN0aW9uKiBwYywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBTZXRBcmd1bWVudHNXaXRo
IHNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIE9wLCBTZXRBcmd1bWVudHNXaXRoIHNldD4KK2lubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpCiB7CiAgICAgTExJ
TlRfQkVHSU5fTk9fU0VUX1BDKCk7CiAKQEAgLTIwNTcsNyArMjAwMCw3IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSB2bS5uZXdDYWxsRnJh
bWVSZXR1cm5WYWx1ZTsKIAotICAgIGlmIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0
KSB7CisgICAgaWYgY29uc3RleHByIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KSB7
CiAgICAgICAgIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNW
YWx1ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2FyZ3VtZW50cyksIGJ5dGVj
b2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwogICAgICAgICBMTElOVF9DQUxM
X0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogICAgIH0gZWxzZQpAQCAtMjA2NywyNyAr
MjAxMCwyOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2FsbGVlRnJhbWUtPnVuY2hl
Y2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNW
YWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwogCi0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVl
QXNWYWx1ZSkpOworICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFt
ZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbGVy
U1ApOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQog
ewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywg
Q29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFy
Z3NTZXR1cDxPcENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFt
ZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3RhaWxfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2Fs
bFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpP
YmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNldEFy
Z3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+
KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJn
dW1lbnRzKTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBD
b2RlRm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1
Y3RfdmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJn
cz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6T2Jq
ZWN0KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncywgU2V0QXJn
dW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0K
IAogaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNF
bnRyeVB0clRhZz4gcmV0dXJuUG9pbnQpCkBAIC0yMTEwLDcgKzIwNTQsOCBAQCBpbmxpbmUgU2xv
d1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25z
dCBJbnN0cnVjdGlvbgogICAgIAogICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0g
SlNWYWx1ZTo6ZW5jb2RlKGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNvZGUu
bV9lY21hTW9kZSkpOwogICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICBMTElOVF9DQUxM
X1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1
cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0
clRhZyk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5k
UEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3Qs
IGNhbGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4OGFh
NmFhOTY0ZmI2ZTA5YjY2Li4yNDFkMzM0YWExZDBiNzlhMWI1MjAxOTgzYzdiMTVhYTA2NWNlMWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAt
MzgsNiArMzgsOCBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0
dXJuVHlwZSBsbGludF90cmFjZV9vcGVyYW5kKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9u
KiwgaW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CiBleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBj
b25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSBSRUZFUkVOQ0VEX0ZST01fQVNNOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxp
bnRfbGlua19jYWxsKENhbGxGcmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKiwg
dm9pZCopOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxs
KENhbGxGcmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKiwgdm9pZCopOwogZXh0
ZXJuICJDIiB2b2lkIGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUqLCBKU0NlbGwq
KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIAogI2RlZmluZSBMTElOVF9TTE9X
X1BBVEhfREVDTChuYW1lKSBcCkBAIC0xMTksOSArMTIxLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKIExMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMpOwogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuY19leHApOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zZXRfZnVuY3Rpb25fbmFtZSk7Ci1M
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGwpOwotTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3QpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMpOwog
TExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwpAQCAt
MTMxLDggKzEzMCw2IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29u
c3RydWN0X3ZhcmFyZ3MpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9j
YWxsX2V2YWwpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2
YWxfd2lkZTE2KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9l
dmFsX3dpZGUzMik7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJh
dG9yX29wZW5fY2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0
ZXJhdG9yX25leHRfY2FsbCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3RlYXJfb2ZmX2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX3N0cmNhdCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3By
aW1pdGl2ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApp
bmRleCA0NjJjYmZiZTRlMzQ1Njg0NWUwNWFhOGJjMGM0ODExNTNjYmI4ZDBhLi4xNjAzYzJjNzg1
NGM5OTliZTllNmM1NzA1MzM2Y2ZmNzQyNzI5MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTM0Niw5ICszNDYsOSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiBw
b2ludGVyLCBQdAogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQuY2FsbChHUFJJ
bmZvOjpyZWdUMywgdGFnKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIocG9pbnRlciksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpy
ZWdUMywgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUNSwgdGFn
KTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQ
UkluZm86OnJlZ1Q1KTsKKyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUNSwgT3BlcmF0aW9u
UHRyVGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkxMSW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxs
IGdhdGUgdGh1bmsiLCBuYW1lKTsKQEAgLTM2NiwxMyArMzY2LDE1IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCog
cG9pbnRlciwKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9K
SVRHYXRlUHRyVGFnLCAiTExJbnQgJXMgd2FzbSBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFp
bENhbGxHYXRlKFB0clRhZyB0YWcpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZywgYm9vbCB1bnRhZykKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0
cihBUk02NFJlZ2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmZh
ckp1bXAoR1BSSW5mbzo6cmVnVDAsIHRhZyk7CisgICAgaWYgKHVudGFnKSB7CisgICAgICAgIGpp
dC51bnRhZ1B0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7Cisg
ICAgICAgIGppdC52YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIyKTsKKyAgICB9CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6YXJndW1l
bnRHUFI3LCB0YWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50IHRh
aWwgY2FsbCBnYXRlIHRodW5rIik7CkBAIC01NzMsOCArNTc1LDggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpTRW50cnlQdHJUYWc+IHJldHVybkxvY2F0aW9uVGh1bmsoT3Bjb2RlSUQgb3Bjb2Rl
SUQsIE9wY28KICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3Jfb3BlbikKICAg
ICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3JfbmV4dCkKICAgICBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfY29uc3RydWN0KQotICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9j
YWxsX3ZhcmFyZ3Nfc2xvdykKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0
X3ZhcmFyZ3Nfc2xvdykKKyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdz
KQorICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X2lkKQogICAgIExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9nZXRfYnlfdmFsKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlf
aWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3Mu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCmluZGV4IGI4N2M0
MjBjYmU0MDJhMWYwY2YwODY4MTA3YjVhZmQ2ZGJjZjU0YWMuLjA1ZWM2MDFjMDE2NGNiOTU0Yjcz
YTIxYzczNTFmZjAxMGZlYTcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFRodW5rcy5oCkBAIC04OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+IGppdENhZ2VQdHJUaHVuaygpOwogI2lmIENQVShBUk02NEUpCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVu
ayh2b2lkKiwgUHRyVGFnLCBjb25zdCBjaGFyKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNv
bnN0IGNoYXIqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2
ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZywgYm9vbCk7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBsb29wT1NSRW50cnlHYXRl
VGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGVu
dHJ5T1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+IHdhc21PU1JFbnRyeUdhdGVUaHVuaygpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGJiODhiNmZk
YjA5OWI0OTlhZTZmZjRlODEwMTAxNTA0ZGFhNmQ0ZTMuLjlkNzYzNWUxZGVkNzNiOTY4YjY4ODgw
ODg2MjIwNjJlMmQ5YWRjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTU1MSw2ICs1NTEsNyBAQCBjb25zdCBTeW1i
b2xUeXBlID0gY29uc3RleHByIFN5bWJvbFR5cGUKIGNvbnN0IE9iamVjdFR5cGUgPSBjb25zdGV4
cHIgT2JqZWN0VHlwZQogY29uc3QgRmluYWxPYmplY3RUeXBlID0gY29uc3RleHByIEZpbmFsT2Jq
ZWN0VHlwZQogY29uc3QgSlNGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIgSlNGdW5jdGlvblR5cGUK
K2NvbnN0IEludGVybmFsRnVuY3Rpb25UeXBlID0gY29uc3RleHByIEludGVybmFsRnVuY3Rpb25U
eXBlCiBjb25zdCBBcnJheVR5cGUgPSBjb25zdGV4cHIgQXJyYXlUeXBlCiBjb25zdCBEZXJpdmVk
QXJyYXlUeXBlID0gY29uc3RleHByIERlcml2ZWRBcnJheVR5cGUKIGNvbnN0IFByb3h5T2JqZWN0
VHlwZSA9IGNvbnN0ZXhwciBQcm94eU9iamVjdFR5cGUKQEAgLTExNTEsMjcgKzExNTIsMjcgQEAg
bWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwg
dmFsdWVQcm9maWxlTmFtZSwgZHN0VmkKICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxs
ZWUKICAgICBlbHNpZiBBUk02NEUKICAgICAgICAgbWFjcm8gY2FsbE5hcnJvdygpCi0gICAgICAg
ICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0
ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0clNpemUsIGEyCi0gICAg
ICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAg
ICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZp
Z0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhNwor
ICAgICAgICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcK
ICAgICAgICAgICAgIF9qc190cmFtcG9saW5lXyVvcGNvZGVOYW1lJToKLSAgICAgICAgICAgIGNh
bGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAg
ICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUxNigpCi0gICAgICAgICAgICBsZWFwIEpT
Q0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25z
dGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXplLCBhMgotICAgICAgICAg
ICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAg
ICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRl
TWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGE3
CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRh
ZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUxNjoKLSAgICAg
ICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJU
YWcKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUzMigpCi0gICAgICAgICAg
ICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1h
cCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhMgot
ICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcK
KyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0ND
b25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0
clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
Y2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUz
MjoKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUs
IGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKLSAgICAgICAgbW92ZSBjYWxsZWUsIHQzCisgICAg
ICAgIG1vdmUgY2FsbGVlLCB0NQogICAgICAgICBzaXplKGNhbGxOYXJyb3csIGNhbGxXaWRlMTYs
IGNhbGxXaWRlMzIsIG1hY3JvIChnZW4pIGdlbigpIGVuZCkKICAgICBlbHNlCiAgICAgICAgIGNh
bGwgY2FsbGVlLCBjYWxsUHRyVGFnCkBAIC0xMjA5LDEyICsxMjEwLDIzIEBAIG1hY3JvIGNhbGxU
YXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpCiAgICAgZW5kCiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxs
KGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCi0gICAgYWRk
cCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKK21hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCh0
ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKIGVuZAogCi0jIHNwIHBvaW50cyB0byB0aGUgbmV3
IGZyYW1lCi1tYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRl
bXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKK21hY3JvIGludm9rZUZvclJlZ3VsYXJDYWxsKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKKyAgICBj
YWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVBy
b2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIGNhbGxQdHJU
YWcpCitlbmQKKworIyB0NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGlj
UmVndWxhckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorZW5kCisKK21h
Y3JvIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwoKQorZW5kCisKKyMgc3AgcG9pbnRzIHRvIHRo
ZSBuZXcgZnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDU2l6ZQorIyBXZSBsZWF2ZSBjZnIgdGVtcDQg
dG8gdXNlIGl0IGZvciB1bnRhZ2dpbmcuCittYWNybyBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEs
IHRlbXAyLCB0ZW1wMywgdGVtcDQpCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQo
KQogCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
W2Nmcl0sIHRlbXAyCkBAIC0xMjMyLDE4ICsxMjQ0LDE3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWls
Q2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAg
IG1vdmUgY2ZyLCB0ZW1wMQogICAgIGFkZHAgdGVtcDIsIHRlbXAxCiAKLSAgICBsb2FkaSBQYXls
b2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbc3BdLCB0ZW1wMgorICAgIGxv
YWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIENhbGxlckZy
YW1lQW5kUENTaXplW3NwXSwgdGVtcDIKICAgICAjIFdlIGFzc3VtZSA8IDJeMjggYXJndW1lbnRz
CiAgICAgbXVsaSBTbG90U2l6ZSwgdGVtcDIKICAgICBhZGRpIFN0YWNrQWxpZ25tZW50IC0gMSAr
IENhbGxGcmFtZUhlYWRlclNpemUsIHRlbXAyCiAgICAgYW5kaSB+U3RhY2tBbGlnbm1lbnRNYXNr
LCB0ZW1wMgogCiAgICAgaWYgQVJNdjcgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIENfTE9PUCBvciBD
X0xPT1BfV0lOIG9yIE1JUFMgb3IgUklTQ1Y2NAotICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5k
UENTaXplLCBzcAogICAgICAgICBzdWJpIENhbGxlckZyYW1lQW5kUENTaXplLCB0ZW1wMgogICAg
ICAgICBsb2FkcCBDYWxsZXJGcmFtZUFuZFBDOjpyZXR1cm5QQ1tjZnJdLCBscgogICAgIGVsc2UK
LSAgICAgICAgYWRkcCBQdHJTaXplLCBzcAorICAgICAgICBzdWJwIFB0clNpemUsIHNwCiAgICAg
ICAgIHN1YmkgUHRyU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgUHRyU2l6ZVtjZnJdLCB0ZW1w
MwogICAgICAgICBzdG9yZXAgdGVtcDMsIFtzcF0KQEAgLTEyNzAsMTQgKzEyODEsMzQgQEAgbWFj
cm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQs
IGNhbGxQdHJUYWcpCiAgICAgZW5kCiAKICAgICBtb3ZlIHRlbXAxLCBzcAorZW5kCisKK21hY3Jv
IGludm9rZUZvclRhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVlLCBtYXliZU9s
ZENGUiwgY2FsbFB0clRhZykKICAgICBpZiBBUk02NEUKLSAgICAgICAgbW92ZSB0ZW1wNCwgYTIK
LSAgICAgICAgbW92ZSBjYWxsZWUsIGEwCisgICAgICAgIG1vdmUgbWF5YmVPbGRDRlIsIGEyCisg
ICAgICAgIG1vdmUgY2FsbGVlLCBhNwogICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhw
ciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6dGFpbENh
bGwlY2FsbFB0clRhZyUpICogUHRyU2l6ZSwgYTEKICAgICAgICAgam1wIFthMV0sIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZyAjICVjYWxsUHRyVGFnJQogICAgIGVsc2UKICAgICAgICAgam1wIGNhbGxl
ZSwgY2FsbFB0clRhZwogICAgIGVuZAorICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rl
ciwgZGlzcGF0Y2gsIGNhbGxlZSwgY2FsbFB0clRhZykKK2VuZAorCisjIHQ1IGlzIG1ldGFkYXRh
CittYWNybyBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBv
cGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0
Y2gsIGNhbGxQdHJUYWcpCisgICAgaWYgQVJNNjRFCisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxE
ZXN0aW5hdGlvblt0NV0sIGE3CisgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbFdp
dGhvdXRVbnRhZyVjYWxsUHRyVGFnJSkgKiBQdHJTaXplLCBhMQorICAgICAgICBqbXAgW2ExXSwg
TmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJUYWclCisgICAgZWxzZQorICAgICAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1f
bW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCBhMQorICAgICAgICBqbXAgYTEsIGNhbGxQ
dHJUYWcKKyAgICBlbmQKK2VuZAorCittYWNybyBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKCkKKyAg
ICByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCiBlbmQKIAogbWFjcm8gc2xvd1BhdGhG
b3JDb21tb25DYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNs
b3dQYXRoLCBwcmVwYXJlQ2FsbCkKQEAgLTEyOTEsNyArMTMyMiw3IEBAIG1hY3JvIHNsb3dQYXRo
Rm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUs
IGRzdFZpcnR1CiAgICAgICAgIG1hY3JvIChjYWxsZWUsIGNhbGxlZUZyYW1lUHRyKQogICAgICAg
ICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAogICAgICAgICAgICAgbW92
ZSBjYWxsZWVGcmFtZVB0ciwgc3AKLSAgICAgICAgICAgIHByZXBhcmVDYWxsKGNhbGxlZSwgdDIs
IHQzLCB0NCwgdDEsIEpTRW50cnlTbG93UGF0aFB0clRhZykKKyAgICAgICAgICAgIHByZXBhcmVD
YWxsKHQyLCB0MywgdDQsIHQxKQogICAgICAgICAuZG9udFVwZGF0ZVNQOgogICAgICAgICAgICAg
Y2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwg
SlNFbnRyeVNsb3dQYXRoUHRyVGFnKQogICAgICAgICBlbmQpCkBAIC0xODIwLDEyICsxODUxLDE2
IEBAIGlmIEFSTTY0RQogICAgIGdsb2JhbCBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZQogICAg
IF90YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3Mg
YTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRy
eVB0clRhZwogCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUK
ICAgICBfdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1Jl
dHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcKKyAg
ICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCisKKyAgICBnbG9iYWwgX3RhaWxDYWxsV2l0aG91
dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUKKyAgICBfdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5
VHJhbXBvbGluZToKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwg
X2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lCiAgICAgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9s
aW5lOgpAQCAtMjMyNSwxNyArMjM2MCwxNyBAQCBlbmQpCiAKIAogIyB3ZSBjYW4ndCB1c2UgY2Fs
bE9wIGJlY2F1c2Ugd2UgY2FuJ3QgcGFzcyBgY2FsbGAgYXMgdGhlIG9wY29kZSBuYW1lLCBzaW5j
ZSBpdCdzIGFuIGluc3RydWN0aW9uIG5hbWUKLWNvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxpbnRf
c2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0
dSwgbWV0YWRhdGEpCitjb21tb25DYWxsT3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxs
LCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHBy
ZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxs
LCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJyYXlQcm9maWxlRm9yQ2FsbChPcENhbGws
IGdldHUpCiBlbmQpCiAKIAotbWFjcm8gY2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
cHJlcGFyZUNhbGwsIGZuKQotICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGlu
dF9zbG93X3BhdGhfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikK
K21hY3JvIGNhbGxPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZv
a2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCisgICAgY29t
bW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1lJSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUs
IG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhp
YywgcHJlcGFyZVNsb3dDYWxsLCBmbikKIGVuZAogCiAKLWNhbGxPcCh0YWlsX2NhbGwsIE9wVGFp
bENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY2FsbE9w
KHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWls
Q2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENh
bGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBhcnJheVByb2ZpbGVGb3JDYWxsKE9wVGFp
bENhbGwsIGdldHUpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIHJl
bG9hZCBtZXRhZGF0YSBzaW5jZSBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKSBtaWdodCBo
YXZlIHRyYXNoZWQgdDUKQEAgLTIzNDMsNyArMjM3OCw3IEBAIGNhbGxPcCh0YWlsX2NhbGwsIE9w
VGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogZW5k
KQogCiAKLWNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNh
bGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQorY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25z
dHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBh
cmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBt
YWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCiBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihl
eGNlcHRpb25UYXJnZXQpCkBAIC0yMzU0LDcgKzIzODksNyBAQCBtYWNybyBicmFuY2hJZkV4Y2Vw
dGlvbihleGNlcHRpb25UYXJnZXQpCiAubm9FeGNlcHRpb246ICAgIAogZW5kCiAKLW1hY3JvIGRv
Q2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgZnJh
bWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorbWFjcm8gZG9DYWxsVmFyYXJncyhv
cGNvZGVOYW1lLCBzaXplLCBnZXQsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJl
U2xvd0NhbGwpCiAgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCiAgICAgYnJhbmNoSWZF
eGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAgIyBj
YWxsZWVGcmFtZSBpbiByMQpAQCAtMjM2OSwzMiArMjQwNCw3MCBAQCBtYWNybyBkb0NhbGxWYXJh
cmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1Bh
dGgsIHNsbwogICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAg
ICAgICAgIGVuZAogICAgIGVuZAotICAgIHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisg
ICAgY2FsbENhbGxTbG93UGF0aCgKKyAgICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhvc2Ug
YXJlIHIwIGFuZCByMQorICAgICAgICBtYWNybyAocmVzdG9yZWRQQ09yVGhyb3csIGNhbGxlZUZy
YW1lUHRyKQorICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAor
ICAgICAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgICAgICBtb3ZlIGNh
bGxlZUZyYW1lUHRyLCBzcAorICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MSkKKyAgICAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQorICAgICAgICAgICAgbWV0
YWRhdGEodDUsIHQyKQorCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgICAgICAg
ICAgYnRweiB0MSwgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFz
ayksIC5ub3RQb2x5bW9ycGhpYworICAgICAgICAgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBk
b2VzIG5vdCB1bnRhZyByZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGlu
IHRoZSB0cmFtcG9saW5lIHNlcGFyYXRlbHkuCisgICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQg
bm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQg
YmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBh
cmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAg
ICAgICAgICBqbXAgLmdvUG9seW1vcnBoaWMKKworICAgICAgICAubm90UG9seW1vcnBoaWM6Cisg
ICAgICAgICAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93CisgICAgICAgICAgICBwcmVwYXJl
Q2FsbCh0MiwgdDMsIHQ0LCB0MSkKKworICAgICAgICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAg
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRh
SUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBpbnZv
a2VDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwg
ZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisg
ICAgICAgIC5vcENhbGxTbG93OgorICAgICAgICAgICAgIyB0MCBpcyBjYWxsZWUKKyAgICAgICAg
ICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBK
U0dsb2JhbE9iamVjdAorICAgICAgICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAg
ICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1Bh
dGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIHQzCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwg
dDMKKyAgICAgICAgICAgIHByZXBhcmVTbG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0
RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcp
CisgICAgICAgIC5kb250VXBkYXRlU1A6CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUKKyAgICAgICAgZW5kKQogZW5kCiAKIAotbGxpbnRPcChv
cF9jYWxsX3ZhcmFyZ3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
KQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBzaXplLCBPcENhbGxWYXJhcmdz
LCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxp
bnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9jYWxsX3ZhcmFyZ3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3Bf
Y2FsbF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ2FsbFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3Qs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJh
cmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxs
LCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGws
IHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwpCiBlbmQpCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxs
X3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkK
K2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJh
cmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBj
aGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQogICAgICMgV2UgbGllIGFuZCBwZXJmb3JtIHRo
ZSB0YWlsIGNhbGwgaW5zdGVhZCBvZiBwcmVwYXJpbmcgaXQgc2luY2Ugd2UgY2FuJ3QKICAgICAj
IHByZXBhcmUgdGhlIGZyYW1lIGZvciBhIGNhbGwgb3Bjb2RlCi0gICAgZG9DYWxsVmFyYXJncyhv
cF90YWlsX2NhbGxfdmFyYXJncywgc2l6ZSwgT3BUYWlsQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBf
bGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhf
dGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdz
KG9wX3RhaWxfY2FsbF92YXJhcmdzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxWYXJhcmdzLCBtX3By
b2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9m
cmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJl
cGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGlj
VGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwpCiBlbmQpCiAKIAotbGxpbnRPcChvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hU
b0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxs
IGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRo
ZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgZGlz
cGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMs
IF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9y
VGFpbENhbGwpCisgICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMsIHNpemUsIGdldCwgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1fcHJvZmlsZSwgbV9k
c3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9m
b3J3YXJkX2FyZ3VtZW50cywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQ
b2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxs
aW50T3Aob3BfY29uc3RydWN0X3ZhcmFyZ3MsIE9wQ29uc3RydWN0VmFyYXJncywgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZG9DYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJn
cywgc2l6ZSwgT3BDb25zdHJ1Y3RWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9z
aXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdz
LCBwcmVwYXJlRm9yUmVndWxhckNhbGwpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX2NvbnN0cnVj
dF92YXJhcmdzLCBPcENvbnN0cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFy
Z3MsIHNpemUsIGdldCwgT3BDb25zdHJ1Y3RWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywg
X2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxs
LCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGws
IHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwpCiBlbmQpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRl
eCA5MDNlNWE0NWIxYjY2ODJmZDI4NzhiOTc5NDg1MmFlZmQ2NzUxZDVlLi42YzZmNTAzMmMzOTMz
M2UyODgzYzZlYWEyMDI3Mzg2MDg0NzZjZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAtMjE1MSwx
MiArMjE1MSwxMiBAQCBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0
dSkKICAgICBiaW5lcSBUaGlzQXJndW1lbnRPZmZzZXQgKyBUYWdPZmZzZXRbY2ZyLCB0MywgOF0s
IENlbGxUYWcsIC5kb25lCiAgICAgbG9hZGkgVGhpc0FyZ3VtZW50T2Zmc2V0ICsgUGF5bG9hZE9m
ZnNldFtjZnIsIHQzLCA4XSwgdDAKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBd
LCB0MAotICAgIHN0b3JlaSB0MCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5r
SW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3RvcmVp
IHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5T
dHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCiBtYWNy
byBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJv
ZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykKLSAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0Q2FsbGVlKHQwKQog
CiAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2Nh
bGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0sIHQyCkBAIC0yMTg4LDcgKzIxODgs
NyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVj
dCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBlbmQsIG1ldGFkYXRhKQogCiAgICAg
ICAgIG1hY3JvIGdldENhbGxlZShkc3QpCi0gICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisg
ICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAgICAgICBlbmQKIAogICAgICAgICBtYWNy
byBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTIxOTksNiArMjE5OSw3IEBAIG1hY3JvIGNvbW1v
bkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwg
cHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBk
c3QpCiAgICAgICAgIGVuZAogICAgICAgICAKKyAgICAgICAgIyB0NSBob2xkcyBtZXRhZGF0YQog
ICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1f
cHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdl
dENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBl
bmQKQEAgLTI4NjYsNiArMjg2Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jf
b3BlbiwgT3BJdGVyYXRvck9wZW4sIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgICAg
IG1vdmUgMSwgZHN0CiAgICAgZW5kCiAKKyAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgY2FsbEhl
bHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2Fs
bCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJl
Rm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdl
dENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVk
aW5nVGhpc0NvdW50KQogCiAuZ2V0QnlJZFN0YXJ0OgpAQCAtMjkyNyw2ICsyOTI5LDcgQEAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBh
cyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCisgICAgbWV0
YWRhdGEodDUsIHQwKQogICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Ns
b3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQ
cm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25l
Q2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlz
U3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0Ogpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQppbmRleCBhOTEzMTRmY2U5ZWU0NGNhNmUwYmFjNzgyZDliZTJmNTljMGE4MzcwLi4x
ZGNiMmRkODhjNTdjOTk3OTNhNjJmMzI1NzQzMTU4Y2YyYWU1NDA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAt
MzA5LDEyICszMDksMTIgQEAgbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCBwcm90b0Nh
bGxGcmFtZSwgdGVtcDEsIHRlbXAyKQogICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCiAgICAg
ICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50cnkKICAgICBlbHNpZiBBUk02NEUKLSAgICAgICAg
bW92ZSBlbnRyeSwgdDMKLSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpv
ZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnZtRW50cnlUb0phdmFT
Y3JpcHQpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0
clRhZyAjIEpTRW50cnlQdHJUYWcKKyAgICAgICAgbW92ZSBlbnRyeSwgdDUKKyAgICAgICAgbGVh
cCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAo
Y29uc3RleHByIEdhdGU6OnZtRW50cnlUb0phdmFTY3JpcHQpICogUHRyU2l6ZSwgYTcKKyAgICAg
ICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKICAgICAg
ICAgZ2xvYmFsIF92bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZQogICAgICAgICBfdm1FbnRy
eVRvSmF2YVNjcmlwdFRyYW1wb2xpbmU6Ci0gICAgICAgIGNhbGwgdDMsIEpTRW50cnlQdHJUYWcK
KyAgICAgICAgY2FsbCB0NSwgSlNFbnRyeVB0clRhZwogICAgIGVsc2UKICAgICAgICAgY2FsbCBl
bnRyeSwgSlNFbnRyeVB0clRhZwogICAgIGVuZApAQCAtMjM2MCw0MSArMjM2MCw1OCBAQCBtYWNy
byBhcnJheVByb2ZpbGVGb3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAgICBsb2FkcSBUaGlz
QXJndW1lbnRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgYnRxbnogdDAsIG5vdENlbGxNYXNr
LCAuZG9uZQogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQzCi0gICAgc3Rv
cmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQ
cm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDMsICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1
XQogLmRvbmU6CiBlbmQKIAotbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBh
cmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRT
dGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEodDUsIHQw
KQotICAgIGdldENhbGxlZSh0MCkKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCittYWNybyBjYWxsSGVs
cGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUs
IGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5
bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENh
bGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisg
ICAgZ2V0Q2FsbGVlKHQxKQogCi0gICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0sIHQy
Ci0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCi0gICAgYnFuZXEgdDMs
IHQyLCAub3BDYWxsU2xvdworICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQw
KQogCisgICAgIyBBbGlnbmVkIHRvIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUKICAgICBnZXRBcmd1
bWVudFN0YXJ0KHQzKQogICAgIGxzaGlmdGkgMywgdDMKICAgICBuZWdwIHQzCiAgICAgYWRkcCBj
ZnIsIHQzCi0gICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgZ2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXModDIpCi0gICAgc3RvcmVQQygpCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbdDNdCisKKyAgICAjIFN0b3JlIGxvY2F0
aW9uIGJpdHMgYW5kIHxjYWxsZWV8LCBhbmQgY29uZmlndXJlIHNwLgorICAgIHN0b3JlUEMoKQor
ICAgIHN0b3JlcSB0MCwgQ2FsbGVlW3QzXQogICAgIG1vdmUgdDMsIHNwCi0gICAgaWYgQVJNNjRF
Ci0gICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8u
bV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQwCi0gICAgICAgIHByZXBhcmVDYWxsKHQwLCB0Miwg
dDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDAKLSAg
ICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwg
dmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDAsIEpTRW50
cnlQdHJUYWcpCi0gICAgZWxzZQotICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMs
IHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5m
by5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNFbnRyeVB0clRhZykKLSAgICBlbmQKLS5vcENh
bGxTbG93OgotICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCkKLWVuZAorICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNw
CisKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1f
Y2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgIGJ0cHogdDEsIChjb25zdGV4cHIgQ2FsbExp
bmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAjIHBy
ZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBu
ZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAjIEJ1
dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5j
ZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICBw
cmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVBy
b2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQor
ICAgIGptcCAuZ29Qb2x5bW9ycGhpYwogCi1tYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwg
c2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQorLm5vdFBvbHlt
b3JwaGljOgorICAgIGJxbmVxIHQwLCB0MSwgLm9wQ2FsbFNsb3cKKyAgICBwcmVwYXJlQ2FsbCh0
MiwgdDMsIHQ0LCB0MSkKKworLmdvUG9seW1vcnBoaWM6CisgICAgbG9hZHAgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERl
c3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwg
dDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisub3BDYWxsU2xvdzoKKyAgICAjIHQwIGlzIGNhbGxl
ZQorICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgorICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9i
YWxPYmplY3QKKyAgICBhZGRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8sIHQ1LCB0MiAjIENhbGxMaW5rSW5mbyogaW4gdDIKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVd
LCB0NQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MworICAgIGxvYWRwIENvZGVCbG9jazo6
bV9nbG9iYWxPYmplY3RbdDNdLCB0MworICAgIHByZXBhcmVTbG93Q2FsbCgpCisgICAgY2FsbFRh
cmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVl
UHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRy
VGFnKQorZW5kCisKK21hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bj
b2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBw
cmVwYXJlU2xvd0NhbGwsIHByb2xvZ3VlKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bjb2Rl
TmFtZSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCkBAIC0yNDAzLDcgKzI0MjAsNyBA
QCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwg
cHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBlbmQsIG1ldGFkYXRhKQogCiAgICAgICAg
IG1hY3JvIGdldENhbGxlZShkc3QpCi0gICAgICAgICAgICBnZXQobV9jYWxsZWUsIHQwKQorICAg
ICAgICAgICAgZ2V0KG1fY2FsbGVlLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3Jv
IGdldEFyZ3VtZW50U3RhcnQoZHN0KQpAQCAtMjQxNCw3ICsyNDMxLDggQEAgbWFjcm8gY29tbW9u
Q2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBw
cm9sb2d1ZSkKICAgICAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIGRz
dCkKICAgICAgICAgZW5kCiAKLSAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0
aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50
Q291bnQpCisgICAgICAgICMgdDUgaG9sZHMgbWV0YWRhdGEKKyAgICAgICAgY2FsbEhlbHBlcihv
cGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVw
YXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGws
IHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBn
ZXRBcmd1bWVudENvdW50KQogICAgIGVuZCkKIGVuZAogCkBAIC0yNTMzLDYgKzI1NTEsODggQEAg
b3AobGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBqbXAg
X2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKIGVuZCkKIAorIyB0MCBpcyBj
YWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9i
amVjdAorbWFjcm8gbGlua1Nsb3dQYXRoRm9yKGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uUHJvbG9n
dWUoKQorICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3ZtW3QzXSwgdDEKKyAgICBzdG9yZXAg
Y2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QxXQorICAgIG1vdmUgdDIsIGEyCisgICAgbW92ZSB0Mywg
YTEKKyAgICBtb3ZlIGNmciwgYTAKKyAgICBjQ2FsbDQoZnVuY3Rpb24pCisgICAgZnVuY3Rpb25F
cGlsb2d1ZSgpCisgICAgdW50YWdSZXR1cm5BZGRyZXNzIHNwCisgICAgYnRweiByMSwgLmRvTm90
VHJhc2gKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodDEpCisgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKHQxLCB0MiwgdDMsIHQ0KQorICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0NAor
LmRvTm90VHJhc2g6CisgICAgIyBGSVhNRTogVXNlIGludm9rZUZvclRhaWxDYWxsPworICAgIGpt
cCB0MCwgSlNFbnRyeVB0clRhZworZW5kCisKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxM
aW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3JvIHZpcnR1YWxU
aHVua0ZvcihvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVjaywgaW50ZXJuYWxGdW5jdGlvblRy
YW1wb2xpbmUsIHByZXBhcmVDYWxsLCBzbG93Q2FzZSkKKyAgICBhZGRpIDEsIENhbGxMaW5rSW5m
bzo6bV9zbG93UGF0aENvdW50W3QyXQorICAgIG1vdmUgTm90Q2VsbE1hc2ssIHQxCisgICAgYnRx
bnogdDAsIHQxLCBzbG93Q2FzZQorICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgSlNGdW5j
dGlvblR5cGUsIC5ub3RKU0Z1bmN0aW9uCisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9leGVjdXRh
YmxlT3JSYXJlRGF0YVt0MF0sIHQxCisgICAgYnRweiB0MSwgKGNvbnN0ZXhwciBKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZyksIC5pc0V4ZWN1dGFibGUKKyAgICBsb2FkcCAoRnVuY3Rpb25SYXJlRGF0
YTo6bV9leGVjdXRhYmxlIC0gKGNvbnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpW3Qx
XSwgdDEKKy5pc0V4ZWN1dGFibGU6CisgICAgbG9hZHAgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5
Q2hlY2tbdDFdLCB0MQorICAgIGJ0cHogdDEsIHNsb3dDYXNlCisuY2FsbENvZGU6CisgICAgcHJl
cGFyZUNhbGwodDUsIHQyLCB0MywgdDQpCisgICAgam1wIHQxLCBKU0VudHJ5UHRyVGFnCisubm90
SlNGdW5jdGlvbjoKKyAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEludGVybmFsRnVuY3Rp
b25UeXBlLCBzbG93Q2FzZQorICAgIHByZXBhcmVDYWxsKHQ1LCB0MiwgdDMsIHQ0KQorICAgIGpt
cCBpbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZQorZW5kCisKKyMgdDAgaXMgY2FsbGVlCisjIHQy
IGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxs
aW50X2xpbmtfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGxpbmtTbG93UGF0aEZvcihf
bGxpbnRfbGlua19jYWxsKQorZW5kKQorCisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlu
a0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFs
X2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhlY3V0YWJs
ZUJhc2U6Om1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgX2xsaW50X2ludGVybmFsX2Z1
bmN0aW9uX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0
KSBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50
X3ZpcnR1YWxfY2FsbCkKK2VuZCkKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJ
bmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVhbF9j
b25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhlY3V0
YWJsZUJhc2U6Om1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBfbGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIs
IHRlbXAzLCB0ZW1wNCkgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQ
YXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgdDAgaXMgY2FsbGVlCisjIHQy
IGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxs
aW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRo
dW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9s
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVt
cDIsIHRlbXAzLCB0ZW1wNCkKKyAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KHRlbXAxKQorICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywg
dGVtcDQpCisgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0ZW1wNAorICAgIGVuZCwgLnNsb3dD
YXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxs
KQorZW5kKQogCiBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2Zmc2V0VG9G
dW5jdGlvbikKICAgICBmdW5jdGlvblByb2xvZ3VlKCkKQEAgLTMwNDYsOCArMzE0Niw4IEBAIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jfb3BlbiwgT3BJdGVyYXRvck9wZW4sIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgICAgIG1vdmUgMSwgZHN0CiAgICAgZW5kCiAKLQot
ICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRv
cl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVyYXRv
ciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1l
dGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1
bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhl
bHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2Fs
bCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJl
Rm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBo
aWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5
SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXRCeUlkU3RhcnQ6
CiAgICAgbWFjcm8gc3RvcmVOZXh0QW5kRGlzcGF0Y2godmFsdWUpCkBAIC0zMTA0LDcgKzMyMDQs
OCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1
ZSBzbG90IGFzIGEgdG1wIHNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4K
LSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0
b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1
ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1l
dGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1
bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhl
bHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2Fs
bCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVG
b3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhp
Y1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9u
ZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhp
c1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldERvbmVTdGFydDoK
ICAgICBtYWNybyBzdG9yZURvbmVBbmRKbXBUb0dldFZhbHVlKGRvbmVWYWx1ZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCmluZGV4IDk1ODEwNWQz
MjY2ZGRmZjg1YmU1ZDc2ZDg3Y2RlNWNiMzMxMzE0YzMuLjQ4ZmQ5MmY4YjZhOGVkMjk0NGE3MjQ4
YjE1N2QyYWY3Mjc3M2M1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGVCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZUJhc2UuaApAQCAtNTcsNiArNTcsNyBAQCBpbmxpbmUgYm9vbCBpc0NhbGwoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogCiBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1Ymxp
YyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBwcm90ZWN0ZWQ6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKaW5kZXggZjZhMDViMDY1ZTMyZDhhZWNk
NTY3YmY2YWI3NGFhZTYzODk5Nzc3OC4uMGZiNDYwNjQ0MTg4NWI5MGU2YzhiY2M3ZWQ4MDliY2Jj
NTc2MzAzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaApAQCAtMzMsNiArMzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KGppdENhZ2VQdHIsIE5vUHRyVGFnKSBcCiAgICAg
dih0YWlsQ2FsbEpTRW50cnlQdHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50
cnlTbG93UGF0aFB0clRhZywgTm9QdHJUYWcpIFwKKyAgICB2KHRhaWxDYWxsV2l0aG91dFVudGFn
SlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KGxvb3BPU1JFbnRyeSwgTm9QdHJUYWcp
IFwKICAgICB2KGVudHJ5T1NSRW50cnksIE5vUHRyVGFnKSBcCiAgICAgdih3YXNtT1NSRW50cnks
IE5vUHRyVGFnKSBcCkBAIC01MCwxNiArNTEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihv
cF9jb25zdHJ1Y3QsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2l0ZXJhdG9yX25leHQsIEpT
RW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2l0ZXJhdG9yX29wZW4sIEpTRW50cnlQdHJUYWcpIFwK
LSAgICB2KG9wX2NhbGxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90
YWlsX2NhbGxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jb25zdHJ1
Y3Rfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jYWxsX3ZhcmFyZ3Nf
c2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfdmFyYXJn
c19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50c19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2Nv
bnN0cnVjdF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAorICAgIHYob3Bf
Y2FsbF92YXJhcmdzLCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfdmFyYXJn
cywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3RfdmFyYXJncywgSlNFbnRyeVB0
clRhZykgXAorICAgIHYob3BfY2FsbF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90
YWlsX2NhbGxfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3Nsb3cs
IEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9yX25leHRfc2xvdywgSlNFbnRyeVB0
clRhZykgXAorICAgIHYob3BfaXRlcmF0b3Jfb3Blbl9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisg
ICAgdihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfdGFp
bF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0
cnVjdF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NhbGxfZXZhbF9z
bG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX25leHRfc2xv
dywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9pdGVyYXRvcl9vcGVuX3Nsb3cs
IEpTRW50cnlTbG93UGF0aFB0clRhZykgXAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggOWNmNWZlYTAxOTg0OWRiNmU2NjA5
MTBiYjk0NTFjZDI3YzI1ZmJjNS4uZmIyNWQ1NGFiY2U0NjkxMjhhYmFhMWZhNjg0YzdmNmEwNWNh
YmQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTM4LDYgKzEzOCw3
IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3Bl
LmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRFeGNlcHRpb25zLmgi
CiAjaW5jbHVkZSAiTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCIKICNpbmNsdWRlICJNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCIK
QEAgLTkxMCw2ICs5MTEsNDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2QKICAgICByZXR1cm4g
TExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y29uc3RydWN0X3RyYW1wb2xpbmUpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gVk06OmdldENUSUxpbmtDYWxsKCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIGdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyNlbmRp
ZgorICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9saW5r
X2NhbGxfdHJhbXBvbGluZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiBWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkKK3sKKyNpZiBF
TkFCTEUoSklUKQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIGdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS50ZW1wbGF0
ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlmCisgICAgcmV0dXJuIExMSW50Ojpj
YWxsVG9UaHJvdygqdGhpcykudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBWTTo6Z2V0Q1RJ
VmlydHVhbENhbGwoQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisjaWYgRU5BQkxFKEpJ
VCkKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1
bmtGb3IoKnRoaXMsIGNhbGxMaW5rSW5mbyk7CisjZW5kaWYKKyAgICBhdXRvIG1vZGUgPSBjYWxs
TGlua0luZm8uY2FsbE1vZGUoKTsKKyAgICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lh
bGl6YXRpb25LaW5kKCk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBDYWxsTW9kZTo6
UmVndWxhcjoKKyAgICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IENvZGVGb3JDYWxs
KTsKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSk7CisgICAgY2FzZSBDYWxsTW9kZTo6VGFp
bDoKKyAgICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IENvZGVGb3JDYWxsKTsKKyAg
ICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGlu
dF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lKTsKKyAgICBjYXNlIENhbGxNb2RlOjpDb25z
dHJ1Y3Q6CisgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KTsKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lKTsKKyAgICB9CisgICAgcmV0
dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFs
X2NhbGxfdHJhbXBvbGluZSk7Cit9CisKIFZNOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCiB7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA2ZmU0Njc0MDViYmI0NzRlYzIy
M2Q2OWI0ODFiMThkNmYwYWQzZDk4Li4wZGQ3OWZmZGQzYTQ1MDAyMzA0NmE5NjQxNjQ4ZTRmMjNl
NmE1MzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEwNSw2ICsxMDUsNyBA
QCBjbGFzcyBCYXNpY0Jsb2NrTG9jYXRpb247CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CiBj
bGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3MgQ2FsbEZyYW1lOworY2xhc3Mg
Q2FsbExpbmtJbmZvOwogc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwpAQCAtODkzLDYgKzg5NCw5IEBAIGNsYXNzIFZN
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPFZNPiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29s
IGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9y
KENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1
YWxDYWxsKENhbGxMaW5rSW5mbyYpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBleGNlcHRpb25P
ZmZzZXQoKQogICAgIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggNmU4OWM0NTJhNjU2OTM3NmJhMjM5MTYwYzQ2OWY5YmJkYTcwNThjOC4u
MjhjZGQwMzRiN2FkYTUzZmQ0MGIxZGY2NjdkMjE0MzIwNWQxNTM4OSAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAor
MjAyMS0xMS0xMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAg
IFtKU0NdIFVzZSBDYWxsTGlua0luZm8gaW4gTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVk
cy10by1iZS1hd2FyZS1vZi1wcm94eS5qczoKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJv
ZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2Ft
cGxpbmdQcm9maWxlci52bS5pc1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1w
bGluZy1wcm9maWxlci13YXNtLmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5n
UHJvZmlsZXIudm0uaXNXYXNtU3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmct
cHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qczoKKyAgICAgICAgKGRvZXNUcmVlSGF2ZVN0YWNr
VHJhY2UpOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0
cy9uYW1lU2VjdGlvbi5qczoKKwogMjAyMS0xMS0wOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBXaGVuIGlubGluaW5nIE5ld1N5bWJvbCBpbiB0aGUgREZHIGRv
bid0IHVuaXZlcnNhbGx5IGNhbGwgVG9TdHJpbmcgb24gdGhlIGlucHV0CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJv
eHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdh
cmUtb2YtcHJveHkuanMKaW5kZXggNTBjYWVlZDExNDg0MjlmZDFiNWNlMGIwZmVhZTZiZGRkZTY3
MTBiOC4uOTRkYWI0NmQyZDcxODRmMzVkNDNlMmRiNGEyZGQ1NjQxOThiZWZmNSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9m
LXByb3h5LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10
by1iZS1hd2FyZS1vZi1wcm94eS5qcwpAQCAtMSw0ICsxLDQgQEAKLS8vQCBydW5EZWZhdWx0KCIt
LXZhbGlkYXRlT3B0aW9ucz10cnVlIC0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXVzZUNv
bmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAiLCAiLS10aHJlc2hv
bGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJt
VXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA9MTAwIiwgIi0t
dGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXpl
QWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbj0xMDAwIiwg
Ii0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKKy8vQCBydW5EZWZhdWx0
KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIiwgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICIt
LXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAiLCAiLS10
aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA9MTAw
IiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZvckZUTE9w
dGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbj0x
MDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKIAogZnVuY3Rp
b24gbWFpbigpIHsKICAgICBsZXQgdjE2MjsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3Nh
bXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKaW5kZXggNjg5YTAwNWFiNTU1YTFm
YzYwMWE1NGU0ZWJmOTRlOTlhNjY4Zjc3ZS4uNWMyMjBmZDc2Y2RjNWM0MGU1OWNjNjZlNTczNDJj
NzJkOGM3ZjNhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIt
d2FzbS1uYW1lLXNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmls
ZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKQEAgLTY5LDUgKzY5LDUgQEAKICAgICB2YXIgd2FzbUVu
dHJ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLl9wYXJy
b3QoMSk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRyeSwgWyJfc2lsbHkiLCAiKHVua25v
d24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFj
b25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFy
cm90XSIsICJ3YXNtLXN0dWIiLCAiMjQiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2Fz
bUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3Nd
IiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1d
IiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnki
XSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNt
LmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qcwppbmRleCBjZDIx
ZjI4OGMxNDhhNGI3NDA1YmY4NjhkZWY5YjU0NTczNDA1MDQ1Li4wNmRmMDEyNDk1OTY5ZTI4NDIx
ODc3ODY5MDEzNWJmMDkwMTBlYzZkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGlu
Zy1wcm9maWxlci13YXNtLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
LXdhc20uanMKQEAgLTgsNSArOCw1IEBACiAgICAgdmFyIHdhc21FbnRyeSA9IGZ1bmN0aW9uKCkg
ewogICAgICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5sb29wKDEwMDAwMDAwKTsKICAgICB9
OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIndhc20t
c3R1YiIsICIwIiwgIndhc21FbnRyeSJdKTsKKyAgICBydW5UZXN0KHdhc21FbnRyeSwgWyI8Pz4u
d2FzbS1mdW5jdGlvblswXSIsICIodW5rbm93bikiLCAid2FzbUVudHJ5Il0pOwogfQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5q
cyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMK
aW5kZXggOTY0MmRkYzdjMWU2ZjA2ZTNiMTMyNzljMGU0YTAyNWI1NGRjYWJmMS4uMWI5MmU5NDg1
NGFmNjNmNjdkMDhmNTQ4ODdjNTIxNzkxNGVlMmJmNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJl
c3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcworKysgYi9KU1Rlc3RzL3N0
cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCkBAIC03MCwxMSArNzAs
MTMgQEAgZnVuY3Rpb24gY2hlY2sobm9kZSkgewogICAgIAogICAgIGxldCBub2RlID0gdHJlZTsK
ICAgICBmb3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgIGxl
dCBwcmV2ID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRyZW5bc3RhY2tUcmFjZVtp
XV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgaWYgKFZFUkJPU0UpIHsKICAg
ICAgICAgICAgICAgICBwcmludCgiZmFpbGluZyBvbiAiICsgaSArICIgOiAiICsgc3RhY2tUcmFj
ZVtpXSk7CiAgICAgICAgICAgICAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkodHJlZSkpOworICAg
ICAgICAgICAgICAgIHByaW50KE9iamVjdC5rZXlzKHByZXYuY2hpbGRyZW4pKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4LDcgKzEx
MCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3RhY2tUcmFjZU9yU3RyaW5nKSB7CiAgICAg
ICAgIH0KICAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgdGltZVRvRmFpbCk7
CiAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkocm9vdCwgdW5kZWZpbmVkLCAyKSk7Ci0gICAgZG9l
c1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNlLCB0cnVlLCB0cnVlKTsKKyAgICBk
b2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2VPclN0cmluZywgdHJ1ZSwgdHJ1
ZSk7CiAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhY2sgdHJhY2UiKTsKIH0KIApkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzIGIvSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCmluZGV4IDY4MDVlNjg5ZjVjODc5
ZTJjYTUwOWM4OGQzZTdiMzc2ZGUwOWZhYWEuLjMzYzg2YmYxY2RlOWE4ZGFiMTE4ZTBlNGNiMGJh
Y2Q1OWI3NDkxZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1l
U2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24u
anMKQEAgLTY5LDQgKzY5LDQgQEAKIGFzc2VydC5lcShzdGFja3RyYWNlWzNdLCAiPD8+Lndhc20t
ZnVuY3Rpb25bX2JhY29uXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNF0s
ICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV1AW3dhc20gY29kZV0iKTsKIGFzc2VydC5lcShzdGFj
a3RyYWNlWzVdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF1AW3dhc20gY29kZV0iKTsKLWFz
c2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHdhc20g
ZW50cnkKK2Fzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFtuYXRpdmUgY29kZV0i
KTsgLy8gd2FzbSBlbnRyeQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443969</attachid>
            <date>2021-11-11 10:27:30 -0800</date>
            <delta_ts>2021-11-11 12:08:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111102730.patch</filename>
            <type>text/plain</type>
            <size>149314</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTJjYjM0NzU4NTc2NDdhOWNhNTgyMWIxYzIyZjdkNGI5NDZmMjM0Li5hMDRmMGZiMTViOWRmNWJh
MzdmN2Y2YzQ4OTRhNGNjOWQ5N2IxNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTQgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3BlcmFu
ZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OmNhbGxMaW5rSW5mb0Zvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRTbG93
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjpzZXRTbG93U3R1Yik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6Y2xlYXJTbG93U3R1Yik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpn
ZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0aXNv
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0
dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8pOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9w
Q2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6b3BfcmV0X2hhbmRs
ZXJHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENhbGwpOgorICAgICAgICAoSlNDOjpsaW5rRm9yKToK
KyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKEpTQzo6
dmlydHVhbEZvcldpdGhGdW5jdGlvbik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtTbG93Rm9yKToK
KyAgICAgICAgKEpTQzo6cmV2ZXJ0Q2FsbCk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgor
ICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9y
cGhpY0NhbGwpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF9saW5rX2NhbGwpOgorICAgICAgICAoSlNDOjpM
TEludDo6bGxpbnRfdmlydHVhbF9jYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmhhbmRsZUhv
c3RDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAgIChKU0M6
OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19Q
QVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwpOgorICAgICAg
ICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGxsaW50L0xM
SW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAgICAgICAoSlNDOjpMTEludDo6
Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVybkxvY2F0aW9u
VGh1bmspOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6CisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKiBydW50aW1l
L0dhdGUuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06Omdl
dENUSUxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElWaXJ0dWFsQ2FsbCk6Cisg
ICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIxLTExLTA5ICBDb21taXQgUXVldWUgIDxjb21t
aXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4
NTI0Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhNWRlZDYyMDc0YTg1
MjJmMWQ1NWM3MjI2ZWU5MGQwMjA0M2M4MjUxLi40MmI0YzQ0MTQyZGNmNGMyM2YwY2EwMWMzN2Nl
YTE1YmE4OTZjMjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC02NTks
NyArNjU5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAogICAgIGJ5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmgK
LSAgICBieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCiAgICAgYnl0ZWNvZGUvTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKICAgICBieXRlY29kZS9MYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDMxOTRlMzAyOWQ0Y2Y2NTRiY2Y4ODhiM2E5
MGMzNWQ0YjM0MzkzZDYuLjBmYTZlZjM1Y2ZlMmE4ZjdlODhiYzQxMzMyMDk2Y2QzZDc1OTM5OWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDcsNyArMTQ3LDYgQEAKIAkJMEYw
Q0FFRkMxRUM0REE2QjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENBRUZBMUVDNERBNjIw
MDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0FFRkYxRUM0REE4ODAwOTcwRDEyIC8q
IEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJD
YWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2
MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyog
TExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTBG
MUEzMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLzsgfTsKIAkJMEYxMkRFMTAxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1
enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTJE
RTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0
IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzODksNyArMjM4OCw2IEBACiAJ
CTBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZpbmFsaXplckNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQ
dXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0
RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMz
MTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRD
YWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxs
TGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMEYxQTIxQzQyMEJG
MDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJDdXN0b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enou
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRnV6ei5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0
RSAvKiBFeGNlcHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4
Y2VwdGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg4MDksNyArODgw
Nyw2IEBACiAJCQkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmggKi8sCiAJCQkJRTM2MzdFRTgyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29u
c3RhbnQuY3BwICovLAogCQkJCUUzNjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNv
bnN0YW50LmggKi8sCi0JCQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExp
bmtJbmZvLmggKi8sCiAJCQkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJNTNGQTJBRTAx
Q0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5oICovLAogCQkJCTE0Rjc5RjZFMjE2RUFENTAwMDA0NkQzOSAvKiBNZXRhZGF0YVRh
YmxlLmNwcCAqLywKQEAgLTEwNTE4LDcgKzEwNTE1LDYgQEAKIAkJCQlFMzYzN0VFOTIzNkU1NkIw
MDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVB
NkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwREU5QTA5MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFzc2VtYmx5LmggaW4gSGVhZGVycyAq
LywKLQkJCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJbnRD
b21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAvKiBM
TEludERhdGEuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggOTI1NTkxOGIxYmEx
NzVhMWY0OWRjMzAyNWVjNmZjYTg4OTM5ZDM2NC4uMzBlM2FiZTMxYzBlMDIwMzkzMjM0ZGNiNmMy
NDFiNWY2NzhjNzRmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCkBAIC0zNzcsNyArMzc3LDEwIEBAIGNsYXNz
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFz
ZSB7CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6
ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2NhdGlvbigpLCBuYW1lLCBv
dXQpOworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRhYmxlQWRkcmVzcygpLCBkYXRhTG9jYXRpb24o
KSwgbmFtZSwgb3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKG51bGxwdHIsIG51bGxwdHIsIG5hbWUsIG91dCk7CiAg
ICAgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0IHsgZHVtcFdpdGhO
YW1lKCJDb2RlUHRyIiwgb3V0KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYmUyZThjODExZDZkZGQwYzE4NGJhNWVkNGQ5NTc5MzZm
ZDIyNThhMi4uNTg3ZTk2Y2I4YzRmNzlhNTBjY2ZiZDBiNmU4ZjFlYzY5YThkMWIxOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0yNiw2
ICsyNiw3IEBACiAKICAgICA6QmFzaWNCbG9ja0xvY2F0aW9uLAogICAgIDpCb3VuZExhYmVsLAor
ICAgIDpDYWxsTGlua0luZm8sCiAgICAgOkRlYnVnSG9va1R5cGUsCiAgICAgOkVDTUFNb2RlLAog
ICAgIDpFcnJvclR5cGVXaXRoRXh0ZW5zaW9uLApAQCAtNDQsNyArNDUsNiBAQAogICAgIDpKU1Nj
b3BlLAogICAgIDpKU1R5cGUsCiAgICAgOkpTVmFsdWUsCi0gICAgOkxMSW50Q2FsbExpbmtJbmZv
LAogICAgIDpSZXN1bHRUeXBlLAogICAgIDpPcGVyYW5kVHlwZXMsCiAgICAgOlByaXZhdGVGaWVs
ZFB1dEtpbmQsCkBAIC01NSw2ICs1NSw3IEBACiAgICAgOlN0cnVjdHVyZSwKICAgICA6U3RydWN0
dXJlSUQsCiAgICAgOlN0cnVjdHVyZUNoYWluLAorICAgIDpTdHJ1Y3R1cmVTdHViSW5mbywKICAg
ICA6U3ltYm9sVGFibGUsCiAgICAgOlN5bWJvbFRhYmxlT3JTY29wZURlcHRoLAogICAgIDpUb1Ro
aXNTdGF0dXMsCkBAIC04NDAsNyArODQxLDggQEAKICAgICAgICAgYXJndjogdW5zaWduZWQsCiAg
ICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExp
bmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJy
YXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
ICAgICB9CiAKQEAgLTg1Miw3ICs4NTQsOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAg
ICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlu
a0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAog
ICAgIH0KIApAQCAtODY1LDcgKzg2OCw4IEBACiAgICAgICAgIGVjbWFNb2RlOiBFQ01BTW9kZSwK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxs
TGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBh
cnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LAogICAgIH0KIApAQCAtODc5LDYgKzg4Myw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5r
SW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAtOTAwLDYgKzkwNSw3IEBACiAgICAgICAgIGZp
cnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlu
a0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUs
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAtOTIxLDYgKzkyNyw3
IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewor
ICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CkBA
IC05MzMsNyArOTQwLDggQEAKICAgICAgICAgYXJndjogdW5zaWduZWQsCiAgICAgfSwKICAgICBt
ZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAg
ICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAg
LTk0Nyw2ICs5NTUsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCiAgICAgfSwKQEAgLTEyNDksNyArMTI1OCw4IEBACiAgICAgbWV0YWRhdGE6IHsKICAgICAg
ICAgaXRlcmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRl
cmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCi0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRD
YWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBW
YWx1ZVByb2ZpbGUsCiAgICAgICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwK
ICAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKQEAgLTEyNzIsNyArMTI4Miw4IEBA
CiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgaXRlcmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlvbk1v
ZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxlOiBBcnJheVByb2ZpbGUsCi0gICAg
ICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5m
bzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgbmV4dFJlc3VsdFByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICAgICAgZG9uZU1vZGVN
ZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVl
UHJvZmlsZSwKQEAgLTE0MTUsNiArMTQyNiwxMCBAQAogb3AgOmxsaW50X25hdGl2ZV9jb25zdHJ1
Y3RfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6
bGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBv
bGluZQorb3AgOmxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF92
aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9t
X2lubGluZWRfY2FsbF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9s
aW5lCiBvcCA6bm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUKQEAgLTE0MjMsNiArMTQzOCw4IEBA
CiBvcCA6bGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbgogb3AgOm9wX2NhbGxfcmV0dXJu
X2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbgorb3AgOm9wX2NhbGxf
dmFyYXJnc19yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5f
bG9jYXRpb24KIG9wIDpvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpv
cF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2dldF9ieV9p
ZF9yZXR1cm5fbG9jYXRpb24KQEAgLTE0NDAsNiArMTQ1Nyw4IEBACiBvcCA6b3BfaXRlcmF0b3Jf
bmV4dF9zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRp
b24KIG9wIDpvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb24KK29wIDpvcF90YWlsX2Nh
bGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KK29wIDpvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHNfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1
cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb24KQEAgLTE0
NDcsNiArMTQ2NiwxMCBAQAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbAogb3AgOmpzX3RyYW1w
b2xpbmVfb3BfdGFpbF9jYWxsCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3QKK29wIDpq
c190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJncworb3AgOmpzX3RyYW1wb2xpbmVfb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MKK29wIDpqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdzCitvcCA6
anNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKIG9wIDpqc190cmFt
cG9saW5lX29wX2l0ZXJhdG9yX25leHQKIG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29w
ZW4KIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaAppbmRleCA0ZjQ3YzhiY2NmOGU1NzQ4YWE5YjBmMzZlNmYzNjMwNWFkYzMwMDExLi4yNzBj
ZDZmMWQwMmY0NGQ1M2RiM2U2YWE2M2FmZmExNWUwYzA5MjZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaApAQCAtMTgwLDcgKzE4MCw3IEBAIHB0cmRpZmZfdCBzdGFja09mZnNldEluUmVn
aXN0ZXJzRm9yQ2FsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHVuc2lnbmVkIGNoZWNrCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+Ci1MTEludENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBj
aGVja3BvaW50SW5kZXgpCitDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1l
dGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewogICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOwogICAgIHJldHVybiBtZXRhZGF0YS5tX2NhbGxMaW5r
SW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAKaW5kZXggM2I4MDNiMzhhNzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBhNTU4YS4uNTI1ZWRl
YWExYjRlZDMwOGU1MzBjOGU4MWU3Mjg0OGI0YWI0Y2QwYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTExMyw4ICsxMTMsNiBAQCBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmRvbmVMb2Nh
dGlvbigpCiAgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwogfQogCi1zdGF0aWMgY29uc3RleHBy
IHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwotCiB2b2lkIENhbGxMaW5rSW5m
bzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
Y2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7CkBAIC0yODYsNyArMjg0LDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEmIHNodWZmbGVEYXRhKQogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQo
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQ
YXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRh
SUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0
aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlD
LCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxD
YWxsKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKQEAgLTM0NSw3
ICszNDMsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQ
YXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbAogICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
aXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgU2NvcGVkTGFtYmRhPHZvaWQo
KT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2Fs
bCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKQEAgLTM1OCw3ICszNTYs
NyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUgogICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBs
KG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVz
LCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+
JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxs
cHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1
ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKQEAgLTM2Niw3ICszNjQsNyBAQCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmCiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlv
bih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2
bS5nZXRDVElMaW5rQ2FsbCgpLmNvZGUoKSk7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmNhbGwoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3Rp
bmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KQEAgLTM3NywxOCArMzc1LDIyIEBAIHZvaWQg
Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIGNhbGxMaW5rSW5mCiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5
UHRyVGFnKTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZt
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlh
bGl6ZURhdGFJQyhWTSYgdm0sIENhbGxUeXBlIGNhbGxUeXBlLCBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKiBmcmFtZVNodWZmbGVEYXRhKQogewotICAg
IG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgc2V0VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxs
ZWVHUFIpOwotICAgIG1fZG9uZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxv
Y2F0aW9uOwotICAgIGlmICh1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKSB7
CisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3Jp
Z2luKGJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVwQ2FsbChjYWxsVHlwZSwgY2FsbGVlR1BSKTsK
KyAgICBpZiAoZnJhbWVTaHVmZmxlRGF0YSkgewogICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBu
aWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUuCi0gICAgICAgIG1f
ZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxp
bmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICAgICAgbV9mcmFtZVNodWZm
bGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKmZyYW1lU2h1ZmZsZURh
dGEpOwogICAgIH0KICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CiAgICAgdS5k
YXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgc2V0U2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50
ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7CisgICAgc2V0U2xvd1BhdGhD
YWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOworICAgIC8vIElmIEpJ
VCBpcyBkaXNhYmxlZCwgd2Ugc2hvdWxkIG5vdCBzdXBwb3J0IGR5bmFtaWNhbGx5IGdlbmVyYXRl
ZCBjYWxsIElDLgorICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIGRpc2FsbG93
U3R1YnMoKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmIGppdCkKQEAgLTQwNiw3ICs0MDgsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogICAgIH0pOwogfQogCi12b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFNjb3Bl
ZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGlzVGFpbENhbGwoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uaAppbmRleCBlNWY3N2NmMzdiZjI2NmY0YjljOTNjNTBjZjk5NmQyMWM2Njhj
ZTQ1Li4zNTVlMjY1NDYzMjI2YjNjM2NiNzRmNDJhMjQxODliYTg3YzUyNWEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCkBAIC0zMSwxMyArMzEs
MTEgQEAKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLSNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAj
aW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAot
I2lmIEVOQUJMRShKSVQpCi0KIGNsYXNzIENDYWxsSGVscGVyczsKIGNsYXNzIEZ1bmN0aW9uQ29k
ZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKQEAgLTQ3LDYgKzQ1LDggQEAgc3RydWN0IFVubGlu
a2VkQ2FsbExpbmtJbmZvOwogCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3
U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CisKICAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAg
ICAgICAgIE5vbmUsCiAgICAgICAgIENhbGwsCkBAIC01OSw2ICs1OSw4IEBAIGNsYXNzIENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAg
ICAgICAgIERpcmVjdENvbnN0cnVjdCwKICAgICAgICAgRGlyZWN0VGFpbENhbGwKICAgICB9Owor
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxsZWVNYXNrID0g
MTsKICAgICAKICAgICBzdGF0aWMgQ2FsbFR5cGUgY2FsbFR5cGVGb3IoT3Bjb2RlSUQgb3Bjb2Rl
SUQpOwogCkBAIC0xODMsNyArMTg1LDcgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgbV9jYWxsZWVHUFIg
PSBjYWxsZWVHUFI7CiAgICAgfQogCi0gICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5s
aW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSKTsKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBDYWxsVHlwZSwgQnl0ZWNvZGVJ
bmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqKTsKIAogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIApAQCAtMTkzLDE0ICsxOTUsMTQgQEAg
Y2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlu
a0luZm8+IHsKICAgICB9OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wg
aXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FS
Tl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1p
dEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwg
U2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBTY29w
ZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJO
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWls
Q2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmKTsKLSAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOworICAg
IHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgU2NvcGVkTGFt
YmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRo
KFZNJiwgQ0NhbGxIZWxwZXJzJik7CiAgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRo
KFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCBy
ZXZlcnRDYWxsVG9TdHViKCk7CkBAIC0yNTUsMTYgKzI1Nyw2IEBAIGNsYXNzIENhbGxMaW5rSW5m
byA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAg
IHJldHVybiBtX3N0dWIuZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTbG93U3R1YihSZWY8
SklUU3R1YlJvdXRpbmU+JiYgbmV3U2xvd1N0dWIpCi0gICAgewotICAgICAgICBtX3Nsb3dTdHVi
ID0gV1RGTW92ZShuZXdTbG93U3R1Yik7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhclNsb3dTdHVi
KCkKLSAgICB7Ci0gICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwotICAgIH0KLQogICAgIGJv
b2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0
Y2g7CkBAIC0zMzAsMTkgKzMyMiwxNyBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7
CiAgICAgfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB1aW50MzJfdCogYWRkcmVzc09m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotICAgIH0KLSNlbmRpZgotCiAgICAgdWlu
dDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgfQogICAgIAogICAgIHZv
aWQgc2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModW5zaWduZWQpOworICAgIHZvaWQg
dXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModW5zaWduZWQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpCisgICAgeworICAgICAgICBpZiAobV9tYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgICAgICAgICAgbV9t
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aENvdW50KCkK
ICAgICB7CkBAIC00MDgsNiArMzk4LDcgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKIAorICAgIHVpbnQzMl90IG1f
bWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUg
cHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVt
YmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwog
ICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MzAsNyArNDIxLDYgQEAgY2xhc3MgQ2FsbExpbmtJ
bmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICBX
cml0ZUJhcnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmll
cjxKU0NlbGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBtX3Nsb3dTdHViOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4g
bV9mcmFtZVNodWZmbGVEYXRhOwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIGJv
b2wgbV9oYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CkBAIC00NDMsNyArNDMzLDYgQEAgY2xhc3Mg
Q2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+
IHsKICAgICB1bnNpZ25lZCBtX3VzZURhdGFJQyA6IDE7IC8vIFVzZURhdGFJQwogICAgIEdQUlJl
ZyBtX2NhbGxlZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICB1aW50MzJfdCBtX3Nsb3dQYXRo
Q291bnQgeyAwIH07Ci0gICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyB7IDAgfTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBh
cmd1bWVudHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVk
IGZvciBhcmd1bWVudHMuCiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9D
b2RlT3JpZ2luKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtNDUzLDExICs0NDIsNyBA
QCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKQogCiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8gewogICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFz
ZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KLSAgICBD
YWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7CiB9OwogCi0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLQogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAppbmRleCBmN2FmYjJiMGYyOGZkOWU1ZmZjNWMz
NGI2YTNhODU2YWUzNzMwMmY1Li5mMmRkYTBlZWRhYWI5NjQ0YTAzYmViNmU1M2ZlYTE3MjIzYTBj
YWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
TExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKQEAgLTYzLDM0ICs2Miw3IEBAIENhbGxMaW5rU3RhdHVz
IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIENvZGVCCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgfQogI2VuZGlm
Ci0KLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgT3Bjb2RlSUQgb3AgPSBpbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKTsKLQotICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87Ci0g
ICAgc3dpdGNoIChvcCkgewotICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZv
ID0gJmluc3RydWN0aW9uLT5hczxPcENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9j
YWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAg
ICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpLm1ldGFk
YXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIG9wX3RhaWxfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5h
czxPcFRhaWxDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46Ci0gICAgICAgIGNhbGxM
aW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCkubWV0YWRhdGEocHJv
ZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3Bf
aXRlcmF0b3JfbmV4dDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxP
cEl0ZXJhdG9yTmV4dD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQ2FsbExpbmtT
dGF0dXMoKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKGNh
bGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUoKSk7CisgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVz
KCk7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBiOTA5ZGY0
NTg0NGIyMjllYzkxODMzOTE4NDI2MjM0NTkyN2VhNmRmLi4wMWMxYTg2YTY4YjA1NTUzNzhmMTJj
NTQzZDMwMjViNDQxNzY1OGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcApAQCAtNDQ5LDE0ICs0NDksMTcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHRoaXMpOyBcCiAgICAg
bmV3ICgmbWV0YWRhdGEpIF9fb3A6Ok1ldGFkYXRhIHsgYnl0ZWNvZGUgfTsgXAogCi0jZGVmaW5l
IENBU0UoX19vcCkgY2FzZSBfX29wOjpvcGNvZGVJRAotCi0jZGVmaW5lIExJTksoLi4uKSBcCi0g
ICAgQ0FTRShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpOiB7IFwKKyNkZWZpbmUgTElOS19J
TVBMKC4uLikgXAogICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKFdURl9MQVpZX0ZJUlNUKF9f
VkFfQVJHU19fKSkgXAogICAgICAgICBXVEZfTEFaWV9IQVNfUkVTVChfX1ZBX0FSR1NfXykoeyBc
CiAgICAgICAgICAgICBXVEZfTEFaWV9GT1JfRUFDSF9URVJNKExJTktfRklFTEQsICBXVEZfTEFa
WV9SRVNUXyhfX1ZBX0FSR1NfXykpIFwKICAgICAgICAgfSkgXAorCisjZGVmaW5lIENBU0UoX19v
cCkgY2FzZSBfX29wOjpvcGNvZGVJRAorCisjZGVmaW5lIExJTksoLi4uKSBcCisgICAgQ0FTRShX
VEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpOiB7IFwKKyAgICAgICAgTElOS19JTVBMKF9fVkFf
QVJHU19fKSBcCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCkBAIC00NjUsMTAgKzQ2OCw2IEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAgICAgICAgIG1fYnl0ZWNvZGVDb3N0ICs9IG9wY29kZUxl
bmd0aHNbb3Bjb2RlSURdOwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIExJ
TksoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxDYWxsVmFyYXJn
cywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgcHJv
ZmlsZSkKLSAgICAgICAgTElOSyhPcENvbnN0cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCiAgICAgICAg
IExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFByaXZhdGVOYW1l
LCBwcm9maWxlKQogCkBAIC00OTgsMTEgKzQ5Nyw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpCiAgICAgICAgIExJTkso
T3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCiAKLSAgICAgICAgTElOSyhPcENhbGwsIHBy
b2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhP
cENhbGxFdmFsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wQ29uc3RydWN0LCBwcm9maWxlKQot
CiAgICAgICAgIExJTksoT3BJbkJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlWYWwpCiAgICAg
ICAgIExJTksoT3BQdXRCeVZhbERpcmVjdCkKQEAgLTUyNywxMyArNTIxLDg5IEBAIGJvb2wgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BDYXRjaCkKICAgICAgICAgTElOSyhPcFBy
b2ZpbGVDb250cm9sRmxvdykKIAorICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgICAg
IExJTktfSU1QTChPcENhbGwsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxM
aW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7CisgICAgICAgICAg
ICBMSU5LX0lNUEwoT3BUYWlsQ2FsbCwgcHJvZmlsZSkKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1Qw
IH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworI2Vu
ZGlmCisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbnVtUGFyYW1ldGVycygpOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3Rl
ciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworI2VuZGlmCisgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1Mb2NhbHMgPSBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5y
ZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgeworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJ
bkpTU3RhY2soCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAgICAg
ICAgICAgICBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgfQorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihj
YWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOworI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOworI2VuZGlm
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lz
dGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtZXRhZGF0
YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgJnNodWZmbGVEYXRhKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6
IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENhbGxFdmFsLCBwcm9maWxlKQorICAgICAgICAg
ICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0
cnVjdDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wQ29uc3RydWN0LCBwcm9maWxlKQorICAg
ICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2Fs
bExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51
bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9w
X2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BJdGVy
YXRvck9wZW4pCisgICAgICAgICAgICBMSU5LX0lNUEwoT3BJdGVyYXRvck9wZW4pCisgICAgICAg
ICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlu
a0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXRl
cmF0b3JfbmV4dDogewotICAgICAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShPcEl0ZXJhdG9y
TmV4dCkKKyAgICAgICAgICAgIExJTktfSU1QTChPcEl0ZXJhdG9yTmV4dCkKKyAgICAgICAgICAg
IG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENhbGxWYXJhcmdzLCBwcm9maWxlKQor
ICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwg
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCks
IG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BUYWlsQ2Fs
bFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5p
bml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwg
aW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOiB7Cisg
ICAgICAgICAgICBMSU5LX0lNUEwoT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUp
CisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZt
LCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgo
KSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENvbnN0
cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5m
by5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCkBAIC03ODMsMjEgKzg1MywxOCBAQCB2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRo
VW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOwog
ICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGpp
dENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CiAgICAgICAgIGppdERhdGEubV9zdHViSW5m
b3MgPSBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5mbz4oaml0Q29kZS0+bV91bmxpbmtlZFN0
dWJJbmZvcy5zaXplKCkpOwotICAgICAgICBqaXREYXRhLm1fY2FsbExpbmtJbmZvcyA9IEZpeGVk
VmVjdG9yPENhbGxMaW5rSW5mbz4oaml0Q29kZS0+bV91bmxpbmtlZENhbGxzLnNpemUoKSk7Cisg
ICAgICAgIGZvciAoYXV0byYgdW5saW5rZWRDYWxsTGlua0luZm8gOiBqaXRDb2RlLT5tX3VubGlu
a2VkQ2FsbHMpIHsKKyAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gZ2V0
Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIHVubGlua2VkQ2FsbExpbmtJbmZv
LmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoeyB9LCB1bmxpbmtlZENhbGxM
aW5rSW5mby5kb25lTG9jYXRpb24pOworICAgICAgICB9CisKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOwogICAgICAg
ICAgICAgc3dpdGNoIChlbnRyeS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CiAgICAgICAgICAgICAgICAgaml0RGF0YS5tX2pp
dENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5r
SW5mbzogewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oZW50cnkucG9pbnRlcigpKTsKLSAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSBqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHNb
aW5kZXhdOwotICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gaml0
RGF0YS5tX2NhbGxMaW5rSW5mb3NbaW5kZXhdOwotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by5pbml0aWFsaXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpy
ZWdUMCwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25z
dGFudFBvb2xbaV0gPSAmY2FsbExpbmtJbmZvOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvOiB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVyKCkpOwogICAgICAgICAgICAgICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSBqaXRDb2RlLT5tX3VubGlu
a2VkU3R1YkluZm9zW2luZGV4XTsKQEAgLTE1NjcsMTUgKzE2MzQsNiBAQCB2b2lkIENvZGVCbG9j
azo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygpCiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0pOwotCi0gICAgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKFsmXShMTEludENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8uaXNMaW5rZWQo
KSAmJiAhdm0uaGVhcC5pc01hcmtlZChjYWxsTGlua0luZm8uY2FsbGVlKCkpKSB7Ci0gICAgICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmluZyBMTEludCBj
YWxsIGZyb20gIiwgKnRoaXMpOwotICAgICAgICAgICAgY2FsbExpbmtJbmZvLnVubGluaygpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUoKSAmJiAh
dm0uaGVhcC5pc01hcmtlZChjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUoKSkpCi0gICAgICAg
ICAgICBjYWxsTGlua0luZm8uY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwotICAgIH0pOwogfQogCiAj
aWYgRU5BQkxFKEpJVCkKQEAgLTE1OTMsOCArMTY1MSw2IEBAIENvZGVCbG9jazo6SklURGF0YSYg
Q29kZUJsb2NrOjplbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQog
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0
byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxM
aW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgIGNhbGxMaW5r
SW5mby52aXNpdFdlYWsodm0oKSk7CiAgICAgICAgIGZvciAoYXV0byYgc3R1YkluZm8gOiBqaXRE
YXRhLT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyQmFzZSBs
b2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKICAgICAgICAgICAgIHN0dWJJbmZvLnZpc2l0V2Vh
a1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsKQEAgLTE2MzcsNiArMTY5MywxMCBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogICAgIGlmIChKSVRDb2Rl
Ojpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElu
bGluZUNhY2hlcygpOwogCisgICAgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKFsmXShDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAgICBjYWxsTGlua0luZm8udmlzaXRXZWFrKHZt
KTsKKyAgICB9KTsKKwogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQogICAg
ICAgICBmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpOwpAQCAtMTcwMCwxMiArMTc2MCwxMyBAQCB2
b2lkIENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB2b2lkIENvZGVCbG9jazo6Z2V0
SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgSUNTdGF0dXNNYXAmIHJlc3Vs
dCkKIHsKICNpZiBFTkFCTEUoSklUKQorICAgIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhbJl0o
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlu
a0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJ
bmZvID0gJmNhbGxMaW5rSW5mbzsKKyAgICB9KTsKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0
VHlwZSgpKSkgewogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
ewogICAgICAgICAgICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9z
KQogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8uY29kZU9yaWdpbiwgSUNTdGF0
dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1
cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNhbGxMaW5rSW5mbzsKICAgICAg
ICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKQEAgLTE3NjAsMTUgKzE4MjEsMjIgQEAgU3RydWN0dXJlU3R1
YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxM
aW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKK0NhbGxMaW5rSW5m
byogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXggaW5kZXgpCiB7Ci0gICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRh
LmdldCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9j
YWxsTGlua0luZm9zKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KSA9PSBDb2RlT3JpZ2luKGluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gJmNhbGxMaW5r
SW5mbzsKLSAgICAgICAgfQorICAgIGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoaW5kZXgpOworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyNkZWZp
bmUgQ0FTRShPcCkgXAorICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCisgICAgICAgIHJldHVybiAm
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJbmZvOyBcCisg
ICAgICAgIGJyZWFrOworCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5L
X0lORk8oQ0FTRSkKKworI3VuZGVmIENBU0UKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
ICAgICB9CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24g
PSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjE1NCw4ICsyMjIyLDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1l
LCBQb2x5bW9ycGhpY0MKIAogdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQog
ewotICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdM
TEludENhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51
bmxpbmsoKTsKICNpZiBFTkFCTEUoSklUKQogICAgIEpJVERhdGEqIGppdERhdGEgPSBudWxscHRy
OwogICAgIHsKQEAgLTIxNzEsMTIgKzIyMzcsNiBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5j
b21pbmdDYWxscygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6
OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0lu
Zm8qIGluY29taW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0g
ICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIENvZGVCbG9jayog
Q29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJs
ZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBA
IC0yMzI5LDEzICsyMzg5LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6
SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZt
LmhlYXAuaXNDdXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhl
Y3V0YWJsZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKEpJVCkKICAgICB7CiAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgaWYgKEpJ
VERhdGEqIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9CisgICAg
ICAgIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pIHsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwor
ICAgICAgICB9KTsKKworI2lmIEVOQUJMRShKSVQpCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICAg
ICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpA
QCAtMjg0NywxOSArMjkwNywxMyBAQCBBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQ
cm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZQogewogICAgIGF1
dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBz
d2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7Ci0jZGVmaW5lIENBU0UxKE9wKSBcCisj
ZGVmaW5lIENBU0UoT3ApIFwKICAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAogICAgICAgICByZXR1
cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FycmF5UHJvZmlsZTsK
IAotI2RlZmluZSBDQVNFMihPcCkgXAotICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAg
IHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJ
bmZvLm1fYXJyYXlQcm9maWxlOwotCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJP
RklMRShDQVNFMSkKLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5G
TyhDQVNFMikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENBU0UpCiAK
LSN1bmRlZiBDQVNFMQotI3VuZGVmIENBU0UyCisjdW5kZWYgQ0FTRQogCiAgICAgY2FzZSBPcEdl
dEJ5SWQ6Om9wY29kZUlEOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwpAQCAtMzAyOSwxNyArMzA4MywxMiBAQCB2b2lkIENvZGVCbG9jazo6
dXBkYXRlQWxsQXJyYXlQcm9maWxlUHJlZGljdGlvbnMoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiBsb2NrZQogICAgICAgICB9CiAgICAgfSk7CiAKLSNkZWZpbmUgVklTSVQxKF9fb3ApIFwKKyNk
ZWZpbmUgVklTSVQoX19vcCkgXAogICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChh
dXRvJiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlKTsgfSk7CiAK
LSNkZWZpbmUgVklTSVQyKF9fb3ApIFwKLSAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsm
XSAoYXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5tX2Fy
cmF5UHJvZmlsZSk7IH0pOwotCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklM
RShWSVNJVDEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8o
VklTSVQyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoVklTSVQpCiAK
LSN1bmRlZiBWSVNJVDEKLSN1bmRlZiBWSVNJVDIKKyN1bmRlZiBWSVNJVAogCiAgICAgbV9tZXRh
ZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yTmV4dD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewogICAg
ICAgICBwcm9jZXNzKG1ldGFkYXRhLm1faXRlcmFibGVQcm9maWxlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA2NGY5ZjVhYmNmZTJhZTcwNWQxZGE2
NWFhOWY4MzE5N2I5NmM2ZDMxLi5kY2YxZjhmMWQ3MDRhOTdiNjk2M2Y5OWE3MDdhM2M5YWExNzAz
M2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC01
NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKLSNpbmNsdWRlICJMTEludENhbGxMaW5rSW5m
by5oIgogI2luY2x1ZGUgIkxhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSAiTWV0
YWRhdGFUYWJsZS5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCkBAIC0y
NjEsNyArMjYwLDYgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgRml4ZWRWZWN0
b3I8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwotICAgICAgICBGaXhlZFZlY3RvcjxD
YWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0
PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5j
b21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5v
ZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbHM7CiAgICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJz
IHsgZmFsc2UgfTsKQEAgLTI5MSw3ICsyODksNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFy
aWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNlCiAgICAgLy8gdGhhdCB0aGVy
ZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMs
IHlvdSdyZSByZWFsbHkKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBh
bW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCi0gICAgQ2FsbExpbmtJbmZvKiBnZXRD
YWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOworICAgIENhbGxMaW5r
SW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeXRlY29kZUluZGV4KTsKICAgICAKICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRD
b2RlTWFwKCk7CiAKQEAgLTMxNSw4ICszMTMsNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICB2b2lkIGxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChDYWxsRnJhbWUq
IGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKik7CiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKIAotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBM
TEludENhbGxMaW5rSW5mbyopOwotCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG91dE9mTGluZUp1
bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9m
ZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkKICAgICB7CkBAIC05NTksNyAr
OTU1LDYgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgVk0qIG1fdm07
CiAKICAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRyIH07
Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50
aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJbnRDYWxsczsKICAgICBT
dHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxMDU4ZmZjZDkxN2RkMmM1MDE2MmUxMzU1YjNkNThiMThlNmEw
NzI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCisrKyAvZGV2L251
bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNDUHRyVGFnLmgiCi0j
aW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
IgotI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLXN0cnVjdCBJbnN0cnVjdGlvbjsKLQotY2xhc3MgTExJbnRDYWxsTGlua0luZm8gOiBwdWJs
aWMgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPiB7Ci1wdWJsaWM6Ci0g
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludHB0cl90IHVubGlua2VkQml0ID0gMHgxOwotCi0gICAgTExJbnRDYWxsTGlua0lu
Zm8oKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgfkxMSW50Q2FsbExpbmtJbmZvKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiAhKG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0ICYgdW5saW5rZWRCaXQpOyB9Ci0gICAgCi0KLSAgICB2b2lkIGxp
bmsoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLSAgICB7Ci0gICAgICAgIGlmIChpc09u
TGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKTsKLSAg
ICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGNhbGxlZSk7Ci0gICAgICAgIG1fbWFj
aGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwotICAgIH0KLQotICAgIHZvaWQgdW5saW5rKCkKLSAg
ICB7Ci0gICAgICAgIC8vIE1ha2UgbGluayBpbnZhbGlkYXRlZC4gSXQgd29ya3MgYmVjYXVzZSBM
TEludCB0ZXN0cyB0aGUgZ2l2ZW4gY2FsbGVlIHdpdGggdGhpcyBwb2ludGVyLiBCdXQgaXQgaXMg
c3RpbGwgdmFsaWQgYXMgbGFzdFNlZW5DYWxsZWUhCi0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0IHw9IHVubGlua2VkQml0OwotICAgICAgICBtX21hY2hpbmVDb2Rl
VGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAg
IGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgSlNP
YmplY3QqIGNhbGxlZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWlzTGlua2VkKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxK
U09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0KTsKLSAgICB9Ci0K
LSAgICBKU09iamVjdCogbGFzdFNlZW5DYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhM
aW5rQml0ICYgfnVubGlua2VkQml0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyTGFzdFNlZW5D
YWxsZWUoKQotICAgIHsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtC
aXQgPSB1bmxpbmtlZEJpdDsKLSAgICB9Ci0KLSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2Zp
bGU7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0K
LXByaXZhdGU6Ci0gICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5r
Qml0IHsgdW5saW5rZWRCaXQgfTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9tYWNoaW5lQ29kZVRhcmdldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4IGNhOGJlZjMyOGI0YmZiMmIw
ZGZkYzhiMjg1MjQ5MjFhYzgzOWJkMzYuLjFjYmM2NmY4NDk5NTQ5OTdlZjdjNTBkNDkzODQzMDJm
MzVjNjI5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNv
ZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTEy
NiwxMSArMTI2LDE5IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhP
cGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hp
ZnQpIFwKICAgICBtYWNybyhPcEdldFByaXZhdGVOYW1lKSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9PUENP
REVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAorICAgIG1hY3JvKE9wQ2FsbCkg
XAorICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKKyAgICBtYWNybyhPcENhbGxFdmFsKSBcCisgICAg
bWFjcm8oT3BDb25zdHJ1Y3QpIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAorICAgIG1h
Y3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8oT3BDYWxsVmFyYXJncykgXAogICAgIG1h
Y3JvKE9wVGFpbENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1
bWVudHMpIFwKICAgICBtYWNybyhPcENvbnN0cnVjdFZhcmFyZ3MpIFwKKworI2RlZmluZSBGT1Jf
RUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BHZXRC
eVZhbCkgXAogICAgIG1hY3JvKE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwK
QEAgLTEzOSw2ICsxNDcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9y
TWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9w
RW51bWVyYXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAog
ICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCisgICAgRk9SX0VBQ0hfT1BD
T0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKIAogI2RlZmluZSBGT1JfRUFD
SF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNy
byhPcE5ld0FycmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhw
cihtCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09CSkVDVF9BTExPQ0FUSU9OX1BST0ZJ
TEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld09iamVjdCkgXAogCi0jZGVmaW5lIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BD
YWxsKSBcCi0gICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwK
LSAgICBtYWNybyhPcENvbnN0cnVjdCkgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCi0g
ICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lU
SF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wQWRkKSBcCiAgICAg
bWFjcm8oT3BNdWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDBkMTllMjc5MDU2ZTVmMzdlNzcxYzVjNDlhMmRi
MGU2YzJkODQ4ZDcuLmFjNTcxMjdiY2Y4OTA3MmJlMDM4NDE2ZGExMzliNDFmMTY0YWU2MTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcApAQCAtNDAzLDcgKzQwMyw2IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9j
YXRlU2hhcmVkUHJvZmlsZXModW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcywKIAogI2Rl
ZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVt
RW50cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9G
SUxFKENPVU5UKQotICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktf
SU5GTyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMg
Kz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVt
YmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAppbmRleCA0MDM5NGE5NDM5OTI5OTNmNTQ1YTJhYzYyY2Y2ZWRjMDlkZjU1NWZhLi4xYzU5
MDQyZTBkMGMzODExYjNjOWJlMjE1OGNkYzU0YzAxZGJiODFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtNzUsNyArNzUs
NiBAQCBjbGFzcyBDYWNoZWRDb2RlQmxvY2s7CiAKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRB
cnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJ
bmZvOwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewogICAgIHN0cnVjdCBPZmZz
ZXRMb2NhdGlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHAKaW5kZXggNWM3MjA1OGRjZjIxOTYwZGNmODUzZTBhOTJjMjdlODlhMmQ1NmJlZS4uZmVl
ZDQ0MWZhNzQ5N2RiZmY5NjY5MTViZTI0YTdiOTg0ZDFjMjhjMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMzE1LDYgKzMxNSwxMCBAQCBD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90
cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9s
aW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xp
bmU6CisgICAgY2FzZSBsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50
X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVhbF9jb25zdHJ1
Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xp
bmU6CiAgICAgY2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVybl92YWx1ZToKICAgICBjYXNl
IGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb246CiAgICAgY2FzZSBjaGVja3BvaW50X29z
cl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CkBAIC0zMjUsNiArMzI5LDggQEAg
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJu
X2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBv
cF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3JldHVybl9sb2Nh
dGlvbjoKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKICAg
ICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKQEAgLTMzNyw2ICszNDMsOCBAQCBDYXBh
YmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVy
bl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb246CiAgICAg
Y2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX2V2YWxf
c2xvd19yZXR1cm5fbG9jYXRpb246CkBAIC0zNDUsNiArMzUzLDEwIEBAIENhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJCiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6CiAgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3Ry
dWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX3RhaWxfY2FsbF92YXJhcmdzOgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jb25zdHJ1Y3RfdmFyYXJnczoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRv
cl9uZXh0OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgogICAgIGNh
c2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggYjQ1MWNkYjYx
ZjdhMTFiMzMwMmMxODVjNjZiZmYxN2E5ZmRiZTA5Zi4uZTcyMmY5ZWJkYWNjODkzNjkwNjU2ZDVi
NjNlOWY2MjQ0NDYxNWY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhD
b2RlQmxvY2sqIGJhc2VsaW5lQ28KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KTsKKyAgICAgICAg
ICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3Ry
dWN0VmFyYXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJ
T04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0g
TExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDogewogICAg
ICAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX2dldF9ieV9pZCkK
QEAgLTIwMSwxMCArMjAxLDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAgICAgICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVj
dFZhcmFyZ3M6IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAg
ICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZv
Rm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxwdHI7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8gPSBiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGNh
bGxCeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mbyk7Ci0KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0lu
Zm8tPmRvbmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggNTIzOWI4YTQ0OTQwNzU4NTk2ODcxZmQy
N2VhMjVlMWE0NzQwYTE3NC4uNWRkYjE2MDM1ZDRiMGE1N2RkNWU4OWNhMWM5OTNkZjU1Njc1NmJm
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCkBAIC04NDcsMTAgKzg0NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0
U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAg
ICBpbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZv
aWQoKT4oWyZdewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1
ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pKTsKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9q
aXQubGFiZWwoKTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRH
UFJSZWcpOwpAQCAtODkyLDcgKzg5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUpCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgc2Nv
cGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFp
bENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZm
bGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0p
KTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZhc3RQYXRoKG1f
aml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAppbmRleCBiM2ExMmJiNjgzNjc1NWNiN2UzNTFhYjAzOTBmODcwZDI1NzM3
MDFjLi41NjZmN2Q1ZTk5ZGYwMDk0MWMyMmJjYmFlNDU3ODhmNzAyNmUyOWI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTkz
NywxMCArOTM3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgp
OwogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAK
LSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIFsmXSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CiAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsK
QEAgLTk4MCw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlKQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlm
IChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBj
YWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIHNjb3Bl
ZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxD
YWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwg
c2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTg4LDcgKzk4OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAg
bV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAg
ICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5l
bWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmlu
ZGV4IDAzNmEyZTI0ODM4YTJiZTE1NDMxZDhmOGU1MmJjODhiYzY5YWYyNzYuLjI3ZmMxZmM5YTNl
ZDU2MDAyOWQ4OWNlYjM5NGRlYzYxYTg4NGYyYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTEwMzk5LDEwICsxMDM5OSwxMCBAQCBJR05P
UkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAog
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNp
dGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSkpOwotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RU
YWlsQ2FsbEZhc3RQYXRoKGppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChqaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+
KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0
dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDU1NSwxMCArMTA1
NTUsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRDYWxsTGlu
a0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAg
ICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pKTsKIAogICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgYXV0byBzbG93
UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CkBAIC0xMDg5OCwxMCArMTA4OTgsMTAgQEAgSUdOT1JF
X0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8
dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0p
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFs
aWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAg
ICAgIGRvbmUgPSBqaXQuanVtcCgpOwpAQCAtMTExNzksMTAgKzExMTc5LDEwIEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAg
ICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZv
aWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAg
ICBkb25lID0gaml0Lmp1bXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAppbmRleCBjOGNiYmVlMDZiZjdkNjY2MmMxOWE0YTRhOGExOGMyMWNlZmQz
ZjcyLi5hOWMxNWM1OGJiYTY3NGIxZWI2YmIzNzVjYjZmMjlhOWIxOTJjOTU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC03NTUsOCArNzU1
LDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdH
bG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0kKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsK
ICAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFzayhbPSwgJnZt
XSAoKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgKmluZm8pOwotICAgICAg
ICAgICAgaW5mby0+c2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0s
IHZpcnR1YWxUaHVuaykpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbCgqaW5m
byk7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVu
ay5jb2RlKCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuaAppbmRleCAxNTg5NjAzZjE0OWMyNzZjMzU5ZTdiYjI2ZDY0
ZjRkODU3MjdmMTUwLi5iMmM5OTFhMTA2MDZjNDk2NzY5NzIxMzg1MzkwYjRjZGM0NWVkYTUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKQEAgLTYyLDcg
KzYyLDYgQEAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKIAogICAgIGVudW0gY2xhc3MgVHlwZSA6
IHVpbnQ4X3QgewogICAgICAgICBHbG9iYWxPYmplY3QsCi0gICAgICAgIENhbGxMaW5rSW5mbywK
ICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCiAgICAgICAgIEZ1bmN0aW9uRGVjbCwKICAgICAg
ICAgRnVuY3Rpb25FeHByLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDkyOTQyNDYw
NzM0MDA5MTFiNmMzNTdjNzhhNGEwYzZhNzRlOWFhZDQuLjY3NDM2YzE2NzM2MmM0ODZkMGQ5NWFh
Nzg3MjUzYTA3MjQxMjg2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTEwMSwx
MiArMTAxLDkgQEAgc3RkOjp0dXBsZTxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxpbmsKICAgICByZXR1cm4gc3RkOjp0dXBs
ZSB7IHN0dWJJbmZvLCBzdHViSW5mb0luZGV4IH07CiB9CiAKLXN0ZDo6dHVwbGU8VW5saW5rZWRD
YWxsTGlua0luZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBKSVQ6OmFkZFVubGlua2Vk
Q2FsbExpbmtJbmZvKCkKK1VubGlua2VkQ2FsbExpbmtJbmZvKiBKSVQ6OmFkZFVubGlua2VkQ2Fs
bExpbmtJbmZvKCkKIHsKLSAgICB2b2lkKiB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4ID0gYml0
d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1fdW5saW5rZWRDYWxscy5z
aXplKCkpKTsKLSAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9ICZtX3VubGlua2VkQ2Fs
bHMuYWxsb2MoKTsKLSAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0lu
ZGV4ID0gYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0lu
Zm8sIHVubGlua2VkQ2FsbExpbmtJbmZvSW5kZXgpOwotICAgIHJldHVybiBzdGQ6OnR1cGxlIHsg
aW5mbywgY2FsbExpbmtJbmZvSW5kZXggfTsKKyAgICByZXR1cm4gJm1fdW5saW5rZWRDYWxscy5h
bGxvYygpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApp
bmRleCBkZTJjNWNlNzcwYmJkNTkzYjdhZTVmZDFhNjUyNjczODk0M2RkOWExLi4yYjYxYjRjYzVl
MzhiNTc0ZjE1MGYyNjNmOGE2MDkyYjJjYzI5MGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTE1Myw3ICsxNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1Y3QgQ2FsbENvbXBp
bGF0aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247
CiAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKLSAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAg
ICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVz
c1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBA
IC0yOTQsMTYgKzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCk7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlE
ID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisgICAg
ICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmKTsKIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3Am
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29u
c3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBA
IC03MDYsNiArNzA1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlv
bj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmV0dXJuRnJvbUJhc2VsaW5l
R2VuZXJhdG9yKFZNJik7CisKKyAgICBwcml2YXRlOgogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgICAgICAvLyBUaHVuayBnZW5lcmF0b3JzLgogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYpOwpAQCAtNzIxLDcgKzcyNCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9w
X2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRv
cihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9y
KFZNJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BH
ZXRGcm9tU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCkBAIC05NTgsNyArOTYwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBhZGRU
b0NvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2w6OlR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxs
cHRyKTsKICAgICAgICAgc3RkOjp0dXBsZTxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudD4gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwot
ICAgICAgICBzdGQ6OnR1cGxlPFVubGlua2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudD4gYWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8qIGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CiAKICAgICAgICAgSW50ZXJw
cmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CmluZGV4IDA5MTk5MTU4NDY4YzBmZTEwMmI1ZGZiZmEyYmU0ZmUxNzMxOTdlMmIuLjJiNjgzZTIz
YzAwYTdiZTFmMWNmMjU4OTFiN2I1MWNiZDAzZjY0YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcApAQCAtNTksMTcgKzU5LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIFJldHVybiB0aGUg
cmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1cm5WYWx1ZUdQUjIvcmV0dXJuVmFsdWVHUFIg
b24gMzItYml0KS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFJldD4oKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJl
dHVyblZhbHVlSlNSKTsKLQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
LSAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIHJldCgpOwotI2Vsc2UKLSAgICBlbWl0
TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIob3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpLmNv
ZGUoKSk7Ci0jZW5kaWYKKyAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIocmV0
dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKFZN
JikKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LmNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVy
QXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpFeHRyYUNUSVRodW5rKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfcmV0X2hhbmRsZXIiKTsKK30KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5
dGVjb2RlKQpAQCAtODQsNyArODgsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUpCiB7
CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7
CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKQEAgLTk3LDcgKzEwMSw3IEBAIEpJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50KQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwg
dG1wSlNSKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHRtcEpTUik7CiAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKHRtcEpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHRtcEdQUik7Ci0gICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQ
UiwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBM
TEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6
b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0
YSh0bXBHUFIsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTExMCw3ICsxMTQsNyBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9w
Y29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQor
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAgLTE2MCw3ICsxNjQs
NyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZgogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1l
bnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDUsIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5m
b0NvbnN0YW50LCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QwKTsKICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CiAgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJh
bmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CiAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhy
ZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkpKTsKQEAgLTIxOSw0OCArMjIzLDQ0IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxs
TGlua0luZm8qLCB1bnNpZ25lZCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRl
PD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUs
IFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK2Jvb2wgSklU
Ojpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2Fs
bExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2Fs
bEZyYW1lU2h1ZmZsZURhdGE+KCk7Ci0gICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBi
eXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgY29uc3RleHByIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIgPSByZWdUMjsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wVGFpbENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBj
YWxsTGlua0luZm9HUFIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCks
IGNhbGxMaW5rSW5mb0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdeworICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YSB7IH07CisgICAgICAgIHNodWZmbGVEYXRhLm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
cmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICAgICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0
ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKICNlbmRpZgotICAgIHNodWZmbGVEYXRh
LT5udW1Mb2NhbHMgPQotICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6
ZShieXRlY29kZS5tX2FyZ2MpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29k
ZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9Ci0gICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9h
cmd2LAotICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7Ci0gICAgfQorICAgICAgICBzaHVm
ZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7CisgICAgICAgICAgICBzaHVmZmxlRGF0
YS5hcmdzW2ldID0KKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpT
U3RhY2soCisgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKKyAgICAgICAgICAgICAgICAgICAgRGF0
YUZvcm1hdEpTKTsKKyAgICAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURh
dGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCks
IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zl
cnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7CiAjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5
OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpKTsKKyAg
ICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpT
Ui50YWdHUFIoKSwgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7CiAjZW5kaWYKLSAgICBzaHVmZmxl
RGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9D
b25zdGFudCwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5
bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZm
bGVyIHNodWZmbGVyIHsgKnRoaXMsICpzaHVmZmxlRGF0YSB9OworICAgICAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIg
c2h1ZmZsZXIgeyAqdGhpcywgc2h1ZmZsZURhdGEgfTsKICAgICAgICAgc2h1ZmZsZXIubG9ja0dQ
UihjYWxsTGlua0luZm9HUFIpOwogICAgICAgICBzaHVmZmxlci5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKLSAgICB9KTsKKyAgICB9KSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAotICAg
IHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwotICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEg
PSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKLQogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwo
KTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2Nh
dGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTI4OCwxNyArMjg4LDE0IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kCiAgICAgKi8KIAogICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbnVsbHB0cjsKLSAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9
IFVJTlRfTUFYOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAg
c3RkOjp0aWUoaW5mbywgaW5mb0NvbnN0YW50KSA9IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7
CisgICAgICAgIGluZm8gPSBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogICAgICAgICBpbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OwotICAgICAgICBpbmZvLT5jYWxsVHlw
ZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOwogICAgICAgICBBU1NFUlQo
bV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CiAgICAg
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsK
ICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtl
ZENhbGxMaW5rSW5mbyA9IGluZm87Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CiAgICAg
fQotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOworICAgIGNv
bXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlKTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFt
ZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxp
emVkLgogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KS5iaXRzKCk7CkBAIC0zMTYsMTYgKzMxMywxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChjYWxsZWVKU1IpKTsKICNlbmRp
ZgogCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZv
SW5kZXgsIGluZm9Db25zdGFudCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwg
aW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwotICAgIGxvYWRDb25zdGFudChpbmZv
Q29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNh
bGxMaW5rSW5mb0dQUik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAg
ICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZdIHsK
KyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIs
IHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3coY2FsbExpbmtJbmZv
R1BSKTsKLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGhzKTsKICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRv
bmVMb2NhdGlvbjsKQEAgLTM0NCwxNSArMzQxLDE2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkKQogewogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7
CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7Ci0gICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlu
a0luZm8oKSwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
QEAgLTM2Niw3ICszNjQsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogCiAgICAgcmVzZXRT
UCgpOwogCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCmluZGV4IGY4NDQ1ODc4MDNjMjYxOGM2ODAzOTgzNmNlZTZjN2IzNGZk
MmMzMDQuLjJmZTIzYzQ5ZmQwZjk0MDkxZjY4NjA1Yjc1N2FlMmNlMzIyMDE0YTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMzcwLDIxICszNzAsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCi17Ci0gICAgQ0NhbGxIZWxwZXJz
IGppdDsKLQotICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxp
bmU6IG9wX3JldF9oYW5kbGVyIik7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0KIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAppbmRleCBjYWY0N2ZhNTQzYzg0MmUyNzBmMWNkMjUxODdmNDU0MTVj
YmRmZTM4Li5kMWU1MzJjNWVmNDAzOTQ0YWIzYzE5Zjc0ZGM1NDY4YmNmNjM0YWY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE0NjQsNyArMTQ2
NCw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lCiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICAg
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAg
ICAgICAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgICAgIH0KIApAQCAtMTQ3
Niw3ICsxNDc2LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUKICAgICAgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxP
YmplY3QsIGNhbGxlZSkpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAg
ICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KIApAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgc3RhdGljIFNs
b3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUKICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwogICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAg
ICB9CiAKQEAgLTE1MDIsMTEgKzE1MDIsMTEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBo
YW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUKICAg
ICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKICAg
ICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0
b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
Ci0gICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygp
LAorICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
S2VlcFRoZUZyYW1lKSk7CiB9CiAKLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25M
aW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQor
U2xvd1BhdGhSZXR1cm5UeXBlIGxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0xNTQ5LDcgKzE1NDksNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlw
ZSwgKENhbGxGcmFtZSogY2FsbAogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUp
OwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAg
ICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0
Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfTsKIApAQCAtMTU4
MSw3ICsxNTgxLDEyIEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2Fs
bCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsCiAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhl
RnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKIH0KIAotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25M
aW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQor
eworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxMaW5r
SW5mbyk7Cit9CisKK1Nsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKIHsK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTE2MDgsNyArMTYxMyw3IEBAIGlu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSk7CiAKICAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAg
ICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5n
ZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDRiNWQwMTFmOTA2YTMw
MzJlMmE1Yjg1MGEzYTBiOWE0YzY4MzRiZjMuLjIwMDdiNTUxZDU2ZjA3ZGFiNzk5MTM5MjNmODQ2
NTYwNDVjMmYwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CkBAIC0zMzIsNiArMzMyLDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25W
YWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6ZSwgRW5jb2RlZEpTVmFsdWUsICgKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwgKFZN
KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hp
Y2tlbkxvZywgdm9pZCwgKFZNKikpOwogCitTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxs
RnJhbWUqLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworU2xvd1BhdGhSZXR1cm5U
eXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBD
YWxsTGlua0luZm8qLCBKU0NlbGwqJik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM0
NGM5NTMxMjNiM2Q0M2Q2OWY2NjlhMzk0YmE1MDhjYzI1YTZlZTMuLjg4ZWU0ZmFkNmI3YWNiYWZi
NjEyMzNjMDdiN2MxNmFkMTUyNDRjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcApAQCAtMTQ0Nyw5ICsxNDQ3LDggQEAgc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2UKIAogc3Rh
dGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
IHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdl
dENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mbyk7CiAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNh
bGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIo
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOwogfQogCiBz
dGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQpAQCAtMTU0NSw3
ICsxNTQ0LDYgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYKICAgICB9CiAgICAgY2FsbExpbmtJ
bmZvLmNsZWFyU2VlbigpOwogICAgIGNhbGxMaW5rSW5mby5jbGVhclN0dWIoKTsKLSAgICBjYWxs
TGlua0luZm8uY2xlYXJTbG93U3R1YigpOwogICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3Qo
KSkKICAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQpAQCAtMTU1NCw3ICsxNTUyLDcg
QEAgdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7
CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcg
Q2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKLSAgICBy
ZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOworICAgIHJldmVydENh
bGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dlZDxKSVRTdHVi
Um91dGluZVB0clRhZz4oKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2
bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAt
MTU2NSw5ICsxNTYzLDggQEAgc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0kKICAgICBkYXRhTG9nTG5J
ZihzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSwKICAgICAgICAgIkxp
bmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywg
Y2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0s
IGNhbGxMaW5rSW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTGlua0luZm8p
OwogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAgICBj
YWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0s
IHZpcnR1YWxUaHVuaykpOwogICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlWaXJ0dWFsKCk7
CiB9CiAKQEAgLTE4MDMsOCArMTgwMCwxMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbAogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9
IGNvZGVQdHI7Ci0gICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKQorICAgICAgICBpZiAobmVlZHNE
b25lSnVtcCkgeworICAgICAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CiAgICAgICAgICAgICBk
b25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
c2xvd1BhdGgubGluaygmc3R1YkppdCk7CkBAIC0xODI4LDE1ICsxODI3LDIxIEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ2FsCiAgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86
OnJlZ1QyKTsKLSAgICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkp
IHsKLSAgICAgICAgLy8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRoLCBnZXQgcmlk
IG9mIGFueSByZW1uYW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBleGlzdC4gVGhp
cyByZWFsbHkgb25seSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAgICAgICAgLy8g
U1AgZm9yIGNhbGxzLgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChHUFJJbmZvOjpyZWdUNCk7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0YUlDLCBs
aW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAgLy8gMi4g
SWYgaXQgaXMgdGFpbC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25l
TG9jYXRpb24gZm9yIHNsb3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0byBwdXQg
aXQgZm9yIHRoZSBzbG93LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAgICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRv
bmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0
KTsKKyAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJ
bmZvOjpyZWdUNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlDKTsKKyAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6OnJl
dHVybkZyb21CYXNlbGluZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9CiAgICAgfQot
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJl
Z1Q0KTsKLSAgICAKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86OnJlZ1Q0KTsKKwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1
YkppdC5qdW1wKCk7CiAgICAgICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoc3R1Ykpp
dCwgb3duZXIsIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwpAQCAtMTg1OCw4ICsxODYzLDEwIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2Fs
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2Fs
CiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKKyAgICBpZiAoIWRvbmUu
ZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOworICAgIH0KICAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2
bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CiAgICAgCiAgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
CmluZGV4IGU4ZGFmZjdkODhiMzBjNmJmODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQwYjM3Mzg5
MjFhNGYwMDE1MTJlN2RlZTNhODQ0M2M1MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCkBAIC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIgdm9pZCB3
YXNtX2VudHJ5KHZvaWQqLCB2b2lkKiwgdm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlU
b0phdmFTY3JpcHRUcmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNF
bnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5U2xv
d1BhdGhUcmFtcG9saW5lKHZvaWQpOworZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0aG91dFVu
dGFnSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0aW9uSGFu
ZGxlclRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxMSW50VHJh
bXBvbGluZSh2b2lkKTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5pdGlhbGl6
ZSgpCiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVU
YWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1
Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2ND
b25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxK
U0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CkBAIC0xNjEsMTEgKzE2MiwxOSBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQot
ICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlT
bG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFp
bENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFn
Q29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0
YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZp
Zy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50
cnlTbG93UGF0aFB0clRhZyldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICB9CisgICAgeworICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOworICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVj
dChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAg
ICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0
ZTo6dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggNDk0ZWY3NjFl
MzI3OTIzZjE0MjAyZmE4YzRlMWNkMzEyODQyMGM2NC4uZDFiZWZkMDJkNWE0NzE0NmNjMjJiOWRh
YzVlMzZhODg4ZWRjZGEzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCkBAIC01ODIsNiArNTgyLDE3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHN0YWNrX2NoZWNrKQogICAgIExMSU5UX1JFVFVSTl9UV08ocGMsIGNhbGxGcmFtZSk7CiB9CiAK
K2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X2xpbmtfY2FsbChDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgdm9pZCopCit7CisgICAgcmV0dXJuIGxpbmtGb3IoY2FsbGVlRnJhbWUs
IGdsb2JhbE9iamVjdCwgY2FsbExpbmtJbmZvKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCB2b2lk
KikKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKKyAgICByZXR1
cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxs
TGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7Cit9CisKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfb2JqZWN0KQogewogICAgIExMSU5UX0JFR0lOKCk7CkBA
IC0xODE5LDcgKzE4MzAsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgICAgICAgICAg
Y2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgICAgIHZt
LmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFz
T2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKICAgICAgICAg
ICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJO
KGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVl
RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsK
KyAgICAgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9i
YWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9p
bnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHNsb3dQYXRoTG9nKCJDYWxsIGNhbGxlZSBpcyBub3QgYSBm
dW5jdGlvbjogIiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4MzgsNyArMTg1MCw4IEBAIHN0YXRpYyBT
bG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwg
SlNWYWx1ZSBjYWxsZWUsCiAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3Qo
Y2FsbGVlKSk7CiAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZt
KSwgY2FsbGVlRnJhbWUpOwogICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAg
IExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRI
b3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSAr
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgTExJTlRfQ0FMTF9S
RVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFs
dWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcp
OwogICAgIH0KICAgICAKICAgICBzbG93UGF0aExvZygiQ29uc3RydWN0b3IgY2FsbGVlIGlzIG5v
dCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIpOwpAQCAtMTg0Nyw3ICsxODYwLDcgQEAgc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZy
YW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICBMTElOVF9DQUxMX1RIUk9XKGdsb2JhbE9iamVjdCwg
Y3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKIH0KIAot
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUsIExM
SW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBudWxscHRyKQoraW5saW5lIFNsb3dQYXRo
UmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kLCBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUpCiB7CiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC0xODYyLDE0ICsx
ODc1LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICAgICAgaWYgKGF1dG8qIGludGVy
bmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVl
QXNWYWx1ZSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2lu
ZCk7CiAgICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLQotICAgICAgICAgICAgaWYgKCFM
TElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjYWxsZXJDb2RlQmxvY2stPm1fbG9jayk7Ci0g
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5saW5rKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGlu
dGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBh
c3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpKTsKLSAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVl
RnJhbWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAg
ICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6
c2l6ZUluUmVnaXN0ZXJzOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2Jq
ZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFn
KTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFu
ZGxlSG9zdENhbGwoY2FsbGVlRnJhbWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKICAgICB9CkBA
IC0xOTA0LDc0ICsxOTEyLDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwo
Q2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICB9CiAKICAg
ICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAKLSAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1Nf
U0xPVyAmJiBjYWxsTGlua0luZm8pIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjYWxsZXJDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+bGluayh2
bSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwotICAgICAgICBpZiAoY29kZUJs
b2NrKQotICAgICAgICAgICAgY29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxGcmFtZSwg
Y2FsbExpbmtJbmZvKTsKLSAgICB9Ci0KICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0
clRhZz4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBMTElOVF9DQUxMX1JFVFVS
TihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IEpTRW50cnlQdHJUYWcpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBPcCYmIGJ5dGVjb2RlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQs
IHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCA9IDApCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0bzoK
LSAgICAvLyAtIFNldCB1cCBhIGNhbGwgZnJhbWUuCi0gICAgLy8gLSBGaWd1cmUgb3V0IHdoYXQg
dG8gY2FsbCBhbmQgY29tcGlsZSBpdCBpZiBuZWNlc3NhcnkuCi0gICAgLy8gLSBJZiBwb3NzaWJs
ZSwgbGluayB0aGUgY2FsbCdzIGlubGluZSBjYWNoZS4KLSAgICAvLyAtIFJldHVybiBhIHR1cGxl
IG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4K
LSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwg
Y2FsbGVlRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpKTsKLSAgICAKLSAgICBDYWxsRnJh
bWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNh
bGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCk7Ci0gICAgCi0gICAgY2FsbGVlRnJhbWUtPnNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9y
KGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2Vk
UihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVl
OwotICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIAotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICByZXR1
cm4gc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlLCAmY2FsbExpbmtJ
bmZvRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50SW5kZXgpKTsKLX0KLQotTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BDYWxs
PigpLCBDb2RlRm9yQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dGFpbF9jYWxsKQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBn
ZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wVGFpbENhbGw+KCksIENv
ZGVGb3JDYWxsKSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1
Y3QpCi17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGds
b2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWND
YWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BDb25zdHJ1Y3Q+KCksIENvZGVGb3JD
b25zdHJ1Y3QpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9y
X29wZW5fY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWND
YWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck9wZW4+KCksIENvZGVG
b3JDYWxsLCBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsKQotewotICAgIExMSU5UX0JFR0lO
KCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKSwgQ29kZUZvckNhbGwsIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRl
TmV4dCkpOworICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0
LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsK
IH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFy
Z3MpCkBAIC0yMDQzLDggKzE5ODYsOCBAQCBlbnVtIGNsYXNzIFNldEFyZ3VtZW50c1dpdGggewog
ICAgIEN1cnJlbnRBcmd1bWVudHMKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNv
bnN0IEluc3RydWN0aW9uKiBwYywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBTZXRBcmd1
bWVudHNXaXRoIHNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIE9wLCBTZXRBcmd1bWVudHNXaXRoIHNl
dD4KK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpCiB7
CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7CiAKQEAgLTIwNTMsMTEgKzE5OTYsMTIgQEAg
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGlu
ZSBjb2RlIGFkZHJlc3MgdG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogCiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3Bl
cmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKTsKIAogICAgIENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUgPSB2bS5uZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZTsKLQotICAgIGlmIChzZXQgPT0g
U2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KSB7CisgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSB2bS52YXJhcmdzTGVuZ3RoICsgMTsKKyAgICBpZiBjb25zdGV4cHIgKHNl
dCA9PSBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpIHsKICAgICAgICAgc2V0dXBWYXJhcmdzRnJh
bWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3Bl
cmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgZ2V0T3BlcmFuZChjYWxsRnJh
bWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKSwgYnl0ZWNvZGUubV9maXJzdFZhckFyZywgdm0udmFy
YXJnc0xlbmd0aCk7CiAgICAgICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGdsb2JhbE9i
amVjdCk7CiAgICAgfSBlbHNlCkBAIC0yMDY3LDI3ICsyMDExLDMwIEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0
cnVjdGlvbioKICAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0
Q3VycmVudFZQQyhwYyk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0
VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7CisgICAgbWV0YWRhdGEu
bV9jYWxsTGlua0luZm8udXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOworCisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFt
ZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9SRVRVUk5f
VFdPKHBjLCBjYWxsZXJTUCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
YWxsX3ZhcmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcENhbGxWYXJhcmdzPihj
YWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAg
ICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ2FsbFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9i
amVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHZhcmFyZ3NT
ZXR1cDxPcFRhaWxDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwsIFNldEFy
Z3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxs
VmFyYXJncywgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9y
Q2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpCiB7Ci0gICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dp
dGg6OkN1cnJlbnRBcmd1bWVudHMpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMsIFNldEFyZ3VtZW50c1dpdGg6OkN1cnJlbnRBcmd1bWVudHM+KGNh
bGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2NvbnN0cnVjdF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BD
b25zdHJ1Y3RWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0LCBTZXRBcmd1
bWVudHNXaXRoOjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDb25zdHJ1Y3RW
YXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JD
b25zdHJ1Y3QpOwogfQogCiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFs
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXR1cm5Qb2ludCkKQEAgLTIxMTAsNyArMjA1Nyw4
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgdm0uZW5jb2RlZEhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoZXZhbChnbG9iYWxPYmplY3QsIGNhbGxlZUZy
YW1lLCBieXRlY29kZS5tX2VjbWFNb2RlKSk7CiAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwot
ICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExMSW50Ojpn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsg
Q2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgIExMSU5UX0NBTExfUkVUVVJO
KGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50
cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKIH0K
ICAgICAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCmluZGV4IGUyMGEwZGZjNmI4
N2FjZDYyMjY4ZTg4YWE2YWE5NjRmYjZlMDliNjYuLjI0MWQzMzRhYTFkMGI3OWExYjUyMDE5ODNj
N2IxNWFhMDY1Y2UxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oCkBAIC0zOCw2ICszOCw4IEBAIG5hbWVzcGFjZSBMTEludCB7CiAKIGV4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX29wZXJhbmQoQ2FsbEZyYW1lKiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBpbnQgb3BlcmFuZCkgUkVGRVJFTkNFRF9G
Uk9NX0FTTTsKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX3ZhbHVl
KENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IGZyb21XaGVyZSwgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CitleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBsbGludF9saW5rX2NhbGwoQ2FsbEZyYW1lKiwgSlNHbG9iYWxPYmplY3QqLCBD
YWxsTGlua0luZm8qLCB2b2lkKik7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGlu
dF92aXJ0dWFsX2NhbGwoQ2FsbEZyYW1lKiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8q
LCB2b2lkKik7CiBleHRlcm4gIkMiIHZvaWQgbGxpbnRfd3JpdGVfYmFycmllcl9zbG93KENhbGxG
cmFtZSosIEpTQ2VsbCopIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOwogCiAjZGVm
aW5lIExMSU5UX1NMT1dfUEFUSF9ERUNMKG5hbWUpIFwKQEAgLTExOSw5ICsxMjEsNiBAQCBMTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19hc3luY19nZW5lcmF0b3JfZnVu
Y19leHApOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNf
ZnVuYyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19hc3luY19m
dW5jX2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NldF9mdW5j
dGlvbl9uYW1lKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbCk7
Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCk7Ci1MTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdCk7CiBMTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MpOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJk
X2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxf
dmFyYXJncyk7CkBAIC0xMzEsOCArMTMwLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2NhbGxfZXZhbCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2NhbGxfZXZhbF93aWRlMTYpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jYWxsX2V2YWxfd2lkZTMyKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfdGVhcl9vZmZfYXJndW1lbnRzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfc3RyY2F0KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRUaHVua3MuY3BwCmluZGV4IDQ2MmNiZmJlNGUzNDU2ODQ1ZTA1YWE4YmMwYzQ4MTE1M2NiYjhk
MGEuLjE2MDNjMmM3ODU0Yzk5OWJlOWU2YzU3MDUzMzZjZmY3NDI3MjkwYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApAQCAtMzQ2LDkgKzM0Niw5IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZUpTR2F0
ZVRodW5rKHZvaWQqIHBvaW50ZXIsIFB0CiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAg
IGppdC5jYWxsKEdQUkluZm86OnJlZ1QzLCB0YWcpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIGppdC5mYXJK
dW1wKEdQUkluZm86OnJlZ1QzLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUklu
Zm86OnJlZ1Q1LCB0YWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDUpOworICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJl
Z1Q1LCBPcGVyYXRpb25QdHJUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywg
IkxMSW50ICVzIGNhbGwgZ2F0ZSB0aHVuayIsIG5hbWUpOwpAQCAtMzY2LDEzICszNjYsMTUgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlV2FzbUdh
dGVUaHVuayh2b2lkKiBwb2ludGVyLAogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyB3YXNtIGNhbGwgZ2F0ZSB0aHVu
ayIsIG5hbWUpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZykKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcgdGFnLCBi
b29sIHVudGFnKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQudW50YWdQdHIo
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBBUk02NFJlZ2lzdGVyczo6bHIpOwotICAgIGppdC52YWxp
ZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMCwgdGFnKTsKKyAgICBpZiAodW50YWcp
IHsKKyAgICAgICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQVJNNjRSZWdp
c3RlcnM6OmxyKTsKKyAgICAgICAgaml0LnZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3Rl
cnM6OmxyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIH0KKyAgICBqaXQuZmFySnVtcChH
UFJJbmZvOjphcmd1bWVudEdQUjcsIHRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpMTEludFRodW5rKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnLCAiTExJbnQgdGFpbCBjYWxsIGdhdGUgdGh1bmsiKTsKQEAgLTU3Myw4ICs1NzUsOCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmV0dXJuTG9jYXRpb25UaHVuayhP
cGNvZGVJRCBvcGNvZGVJRCwgT3BjbwogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9pdGVy
YXRvcl9vcGVuKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9pdGVyYXRvcl9uZXh0KQog
ICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3QpCi0gICAgTExJTlRfUkVUVVJO
X0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KQotICAgIExMSU5UX1JFVFVSTl9MT0NBVElP
TihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93KQorICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihv
cF9jYWxsX3ZhcmFyZ3MpCisgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92
YXJhcmdzKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlfaWQpCiAgICAgTExJ
TlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV92YWwpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX3B1dF9ieV9pZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtz
LmgKaW5kZXggYjg3YzQyMGNiZTQwMmExZjBjZjA4NjgxMDdiNWFmZDZkYmNmNTRhYy4uMDVlYzYw
MWMwMTY0Y2I5NTRiNzNhMjFjNzM1MWZmMDEwZmVhNzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50VGh1bmtzLmgKQEAgLTg4LDcgKzg4LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gaml0Q2FnZVB0clRodW5rKCk7CiAjaWYgQ1BV
KEFSTTY0RSkKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNy
ZWF0ZUpTR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9p
ZCosIFB0clRhZywgY29uc3QgY2hhciopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyk7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFn
LCBib29sKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGxv
b3BPU1JFbnRyeUdhdGVUaHVuaygpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz4gZW50cnlPU1JFbnRyeUdhdGVUaHVuaygpOwogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gd2FzbU9TUkVudHJ5R2F0ZVRodW5rKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
aW5kZXggYmI4OGI2ZmRiMDk5YjQ5OWFlNmZmNGU4MTAxMDE1MDRkYWE2ZDRlMy4uOWQ3NjM1ZTFk
ZWQ3M2I5NjhiNjg4ODA4ODYyMjA2MmUyZDlhZGMzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtNTUxLDYgKzU1MSw3
IEBAIGNvbnN0IFN5bWJvbFR5cGUgPSBjb25zdGV4cHIgU3ltYm9sVHlwZQogY29uc3QgT2JqZWN0
VHlwZSA9IGNvbnN0ZXhwciBPYmplY3RUeXBlCiBjb25zdCBGaW5hbE9iamVjdFR5cGUgPSBjb25z
dGV4cHIgRmluYWxPYmplY3RUeXBlCiBjb25zdCBKU0Z1bmN0aW9uVHlwZSA9IGNvbnN0ZXhwciBK
U0Z1bmN0aW9uVHlwZQorY29uc3QgSW50ZXJuYWxGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIgSW50
ZXJuYWxGdW5jdGlvblR5cGUKIGNvbnN0IEFycmF5VHlwZSA9IGNvbnN0ZXhwciBBcnJheVR5cGUK
IGNvbnN0IERlcml2ZWRBcnJheVR5cGUgPSBjb25zdGV4cHIgRGVyaXZlZEFycmF5VHlwZQogY29u
c3QgUHJveHlPYmplY3RUeXBlID0gY29uc3RleHByIFByb3h5T2JqZWN0VHlwZQpAQCAtMTE1MSwy
NyArMTE1MiwyNyBAQCBtYWNybyBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaQogICAgICAgICBjbG9vcENhbGxK
U0Z1bmN0aW9uIGNhbGxlZQogICAgIGVsc2lmIEFSTTY0RQogICAgICAgICBtYWNybyBjYWxsTmFy
cm93KCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0
T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSUpICogUHRy
U2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBj
YWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9m
ZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAq
IFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFn
ICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlOgot
ICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZworICAgICAgICAgICAgY2FsbCB0NSwgY2Fs
bFB0clRhZwogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBjYWxsV2lkZTE2KCkKLSAgICAg
ICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdH
YXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNpemUs
IGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0
clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRP
ZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJV93aWRlMTYp
ICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBvbGluZV8lb3Bjb2RlTmFtZSVf
d2lkZTE2OgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZworICAgICAgICAgICAgY2Fs
bCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBjYWxsV2lkZTMy
KCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZK
U0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMyKSAq
IFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFn
ICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1l
JV93aWRlMzIpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBvbGluZV8lb3Bj
b2RlTmFtZSVfd2lkZTMyOgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZworICAgICAg
ICAgICAgY2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAotICAgICAgICBtb3ZlIGNh
bGxlZSwgdDMKKyAgICAgICAgbW92ZSBjYWxsZWUsIHQ1CiAgICAgICAgIHNpemUoY2FsbE5hcnJv
dywgY2FsbFdpZGUxNiwgY2FsbFdpZGUzMiwgbWFjcm8gKGdlbikgZ2VuKCkgZW5kKQogICAgIGVs
c2UKICAgICAgICAgY2FsbCBjYWxsZWUsIGNhbGxQdHJUYWcKQEAgLTEyMDksMTIgKzEyMTAsMjMg
QEAgbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVj
dCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmkKICAgICBlbmQKIGVuZAogCi1tYWNybyBwcmVwYXJl
Rm9yUmVndWxhckNhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0
clRhZykKLSAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorbWFjcm8gcHJlcGFyZUZv
clJlZ3VsYXJDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQogZW5kCiAKLSMgc3AgcG9p
bnRzIHRvIHRoZSBuZXcgZnJhbWUKLW1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRl
bXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQorbWFjcm8gaW52b2tlRm9yUmVn
dWxhckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxs
UHRyVGFnKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNh
bGxlZSwgY2FsbFB0clRhZykKK2VuZAorCisjIHQ1IGlzIG1ldGFkYXRhCittYWNybyBwcmVwYXJl
Rm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxQdHJU
YWcpCitlbmQKKworbWFjcm8gcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCgpCitlbmQKKworIyBz
cCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZSArIENhbGxlckZyYW1lQW5kUENTaXplCisjIFdlIGxl
YXZlIGNmciB0ZW1wNCB0byB1c2UgaXQgZm9yIHVudGFnZ2luZy4KK21hY3JvIHByZXBhcmVGb3JU
YWlsQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKICAgICByZXN0b3JlQ2FsbGVlU2F2
ZXNVc2VkQnlMTEludCgpCiAKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXNbY2ZyXSwgdGVtcDIKQEAgLTEyMzIsMTggKzEyNDQsMTcgQEAgbWFjcm8g
cHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNh
bGxQdHJUYWcpCiAgICAgbW92ZSBjZnIsIHRlbXAxCiAgICAgYWRkcCB0ZW1wMiwgdGVtcDEKIAot
ICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1tzcF0s
IHRlbXAyCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gQ2FsbGVyRnJhbWVBbmRQQ1NpemVbc3BdLCB0ZW1wMgogICAgICMgV2UgYXNzdW1lIDwg
Ml4yOCBhcmd1bWVudHMKICAgICBtdWxpIFNsb3RTaXplLCB0ZW1wMgogICAgIGFkZGkgU3RhY2tB
bGlnbm1lbnQgLSAxICsgQ2FsbEZyYW1lSGVhZGVyU2l6ZSwgdGVtcDIKICAgICBhbmRpIH5TdGFj
a0FsaWdubWVudE1hc2ssIHRlbXAyCiAKICAgICBpZiBBUk12NyBvciBBUk02NCBvciBBUk02NEUg
b3IgQ19MT09QIG9yIENfTE9PUF9XSU4gb3IgTUlQUyBvciBSSVNDVjY0Ci0gICAgICAgIGFkZHAg
Q2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAgICAgICAgIHN1YmkgQ2FsbGVyRnJhbWVBbmRQQ1Np
emUsIHRlbXAyCiAgICAgICAgIGxvYWRwIENhbGxlckZyYW1lQW5kUEM6OnJldHVyblBDW2Nmcl0s
IGxyCiAgICAgZWxzZQotICAgICAgICBhZGRwIFB0clNpemUsIHNwCisgICAgICAgIHN1YnAgUHRy
U2l6ZSwgc3AKICAgICAgICAgc3ViaSBQdHJTaXplLCB0ZW1wMgogICAgICAgICBsb2FkcCBQdHJT
aXplW2Nmcl0sIHRlbXAzCiAgICAgICAgIHN0b3JlcCB0ZW1wMywgW3NwXQpAQCAtMTI3MCwxNCAr
MTI4MSwzNCBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIs
IHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBlbmQKIAogICAgIG1vdmUgdGVtcDEsIHNw
CitlbmQKKworbWFjcm8gaW52b2tlRm9yVGFpbENhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBj
YWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFnKQogICAgIGlmIEFSTTY0RQotICAgICAgICBt
b3ZlIHRlbXA0LCBhMgotICAgICAgICBtb3ZlIGNhbGxlZSwgYTAKKyAgICAgICAgbW92ZSBtYXli
ZU9sZENGUiwgYTIKKyAgICAgICAgbW92ZSBjYWxsZWUsIGE3CiAgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjp0YWlsQ2FsbCVjYWxsUHRyVGFnJSkgKiBQdHJTaXplLCBhMQogICAgICAgICBqbXAg
W2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJUYWclCiAgICAgZWxzZQogICAg
ICAgICBqbXAgY2FsbGVlLCBjYWxsUHRyVGFnCiAgICAgZW5kCisgICAgY2FsbFRhcmdldEZ1bmN0
aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVlLCBjYWxsUHRyVGFnKQorZW5kCisKKyMg
dDUgaXMgbWV0YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgY2FsbFB0clRhZykKKyAgICBpZiBBUk02NEUKKyAgICAgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21v
bm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTcKKyAgICAgICAgbGVhcCBKU0NDb25maWcg
KyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdh
dGU6OnRhaWxDYWxsV2l0aG91dFVudGFnJWNhbGxQdHJUYWclKSAqIFB0clNpemUsIGExCisgICAg
ICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyAlY2FsbFB0clRhZyUKKyAgICBl
bHNlCisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIGExCisgICAgICAg
IGptcCBhMSwgY2FsbFB0clRhZworICAgIGVuZAorZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93
VGFpbENhbGwoKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50KCkKIGVuZAogCiBt
YWNybyBzbG93UGF0aEZvckNvbW1vbkNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0
LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQpAQCAtMTI5MSw3ICsxMzIyLDcgQEAg
bWFjcm8gc2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFs
dWVQcm9maWxlTmFtZSwgZHN0VmlydHUKICAgICAgICAgbWFjcm8gKGNhbGxlZSwgY2FsbGVlRnJh
bWVQdHIpCiAgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQCiAg
ICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAotICAgICAgICAgICAgcHJlcGFyZUNh
bGwoY2FsbGVlLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQorICAgICAg
ICAgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCiAgICAgICAgIC5kb250VXBkYXRlU1A6
CiAgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgY2FsbGVlLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpCiAgICAgICAgIGVuZCkKQEAgLTE4
MjAsMTIgKzE4NTEsMTYgQEAgaWYgQVJNNjRFCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpTRW50cnlU
cmFtcG9saW5lCiAgICAgX3RhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmU6CiAgICAgICAgIHVudGFn
UmV0dXJuQWRkcmVzcyBhMgotICAgICAgICBqbXAgYTAsIEpTRW50cnlQdHJUYWcKKyAgICAgICAg
am1wIGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX3RhaWxDYWxsSlNFbnRyeVNsb3dQ
YXRoVHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmU6CiAg
ICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyBhMgotICAgICAgICBqbXAgYTAsIEpTRW50cnlTbG93
UGF0aFB0clRhZworICAgICAgICBqbXAgYTcsIEpTRW50cnlQdHJUYWcKKworICAgIGdsb2JhbCBf
dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZQorICAgIF90YWlsQ2FsbFdpdGhv
dXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lOgorICAgICAgICBqbXAgYTcsIEpTRW50cnlQdHJUYWcK
IAogICAgIGdsb2JhbCBfZXhjZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUKICAgICBfZXhjZXB0aW9u
SGFuZGxlclRyYW1wb2xpbmU6CkBAIC0yMzI1LDE3ICsyMzYwLDE3IEBAIGVuZCkKIAogCiAjIHdl
IGNhbid0IHVzZSBjYWxsT3AgYmVjYXVzZSB3ZSBjYW4ndCBwYXNzIGBjYWxsYCBhcyB0aGUgb3Bj
b2RlIG5hbWUsIHNpbmNlIGl0J3MgYW4gaW5zdHJ1Y3Rpb24gbmFtZQotY29tbW9uQ2FsbE9wKG9w
X2NhbGwsIF9sbGludF9zbG93X3BhdGhfY2FsbCwgT3BDYWxsLCBwcmVwYXJlRm9yUmVndWxhckNh
bGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKK2NvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxpbnRf
c2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JS
ZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JT
bG93UmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBhcnJheVByb2ZpbGVG
b3JDYWxsKE9wQ2FsbCwgZ2V0dSkKIGVuZCkKIAogCi1tYWNybyBjYWxsT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgZm4pCi0gICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNv
ZGVOYW1lJSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgcHJl
cGFyZUNhbGwsIGZuKQorbWFjcm8gY2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJl
cGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxs
LCBmbikKKyAgICBjb21tb25DYWxsT3Aob3BfJW9wY29kZU5hbWUlLCBfbGxpbnRfc2xvd19wYXRo
XyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJl
cGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIGZuKQogZW5kCiAKIAotY2FsbE9wKHRh
aWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBtYWNybyAoZ2V0dSwgbWV0
YWRhdGEpCitjYWxsT3AodGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGws
IGludm9rZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFy
ZUZvclNsb3dUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogICAgIGFycmF5UHJvZmls
ZUZvckNhbGwoT3BUYWlsQ2FsbCwgZ2V0dSkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9n
dWUoKQogICAgICMgcmVsb2FkIG1ldGFkYXRhIHNpbmNlIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGls
b2d1ZSgpIG1pZ2h0IGhhdmUgdHJhc2hlZCB0NQpAQCAtMjM0Myw3ICsyMzc4LDcgQEAgY2FsbE9w
KHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBtYWNybyAoZ2V0dSwg
bWV0YWRhdGEpCiBlbmQpCiAKIAotY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCitjYWxsT3AoY29u
c3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1
bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93
UmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQogCiAKIG1hY3JvIGJyYW5j
aElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKQEAgLTIzNTQsNyArMjM4OSw3IEBAIG1hY3Jv
IGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKIC5ub0V4Y2VwdGlvbjogICAgCiBl
bmQKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCittYWNybyBk
b0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVBy
b2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZnJhbWVT
bG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1v
cnBoaWMsIHByZXBhcmVTbG93Q2FsbCkKICAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkK
ICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZSkKICAgICAjIGNhbGxlZUZyYW1lIGluIHIxCkBAIC0yMzY5LDMyICsyNDA0LDcwIEBAIG1h
Y3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRj
aCwgZnJhbWVTbG93UGF0aCwgc2xvCiAgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSwgc3AKICAgICAgICAgZW5kCiAgICAgZW5kCi0gICAgc2xvd1BhdGhGb3JDb21tb25D
YWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBw
cmVwYXJlQ2FsbCkKKyAgICBjYWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBzbG93UGF0aCwKKyAg
ICAgICAgIyBUaG9zZSBhcmUgcjAgYW5kIHIxCisgICAgICAgIG1hY3JvIChyZXN0b3JlZFBDT3JU
aHJvdywgY2FsbGVlRnJhbWVQdHIpCisgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRyLCAu
ZG9udFVwZGF0ZVNQCisgICAgICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAgICAg
ICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCisgICAgICAgICAgICBnZXQobV9jYWxsZWUs
IHQxKQorICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCisg
ICAgICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCisKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0s
IHQxCisgICAgICAgICAgICBidHB6IHQxLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1v
cnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAgICAgICAgICAjIHByZXBhcmVD
YWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRv
IHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAgICAgICAgICMg
QnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNlIHNp
bmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgorICAg
ICAgICAgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVj
dCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgSlNFbnRy
eVB0clRhZykKKyAgICAgICAgICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisgICAgICAgIC5ub3RQ
b2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGJxbmVxIHQwLCB0MSwgLm9wQ2FsbFNsb3cKKyAgICAg
ICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisgICAgICAgIC5nb1BvbHltb3Jw
aGljOgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAg
ICAgICAgICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1
ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50
cnlQdHJUYWcpCisKKyAgICAgICAgLm9wQ2FsbFNsb3c6CisgICAgICAgICAgICAjIHQwIGlzIGNh
bGxlZQorICAgICAgICAgICAgIyB0MiBpcyBDYWxsTGlua0luZm8qCisgICAgICAgICAgICAjIHQz
IGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgICAgICAgICBhZGRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1LCB0MiAjIENhbGxMaW5rSW5mbyogaW4g
dDIKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9i
YWxPYmplY3RbdDNdLCB0MworICAgICAgICAgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICAgICAg
ICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwg
SlNFbnRyeVB0clRhZykKKyAgICAgICAgLmRvbnRVcGRhdGVTUDoKKyAgICAgICAgICAgIGptcCBf
bGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQorICAgICAgICBlbmQpCiBlbmQK
IAogCi1sbGludE9wKG9wX2NhbGxfdmFyYXJncywgT3BDYWxsVmFyYXJncywgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gpCi0gICAgZG9DYWxsVmFyYXJncyhvcF9jYWxsX3ZhcmFyZ3MsIHNpemUs
IE9wQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9y
X3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY2FsbF92YXJhcmdzLCBwcmVwYXJlRm9yUmVndWxh
ckNhbGwpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX2NhbGxfdmFyYXJncywgT3BDYWxsVmFyYXJn
cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgZG9D
YWxsVmFyYXJncyhvcF9jYWxsX3ZhcmFyZ3MsIHNpemUsIGdldCwgT3BDYWxsVmFyYXJncywgbV9w
cm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVf
ZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY2FsbF92YXJhcmdzLCBwcmVwYXJl
Rm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBo
aWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCkKIGVuZCkKIAotbGxpbnRP
cChvcF90YWlsX2NhbGxfdmFyYXJncywgT3BUYWlsQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF90YWlsX2NhbGxfdmFyYXJncywg
T3BUYWlsQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgIyBXZSBsaWUg
YW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmluZyBpdCBzaW5jZSB3
ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBvcGNvZGUKLSAgICBk
b0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBzaXplLCBPcFRhaWxDYWxsVmFyYXJn
cywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xs
aW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclRhaWxDYWxsKQorICAg
IGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIHNpemUsIGdldCwgT3BUYWlsQ2Fs
bFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Ns
b3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2Fs
bF92YXJhcmdzLCBwcmVwYXJlRm9yVGFpbENhbGwsIGludm9rZUZvclRhaWxDYWxsLCBwcmVwYXJl
Rm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFyZUZvclNsb3dUYWlsQ2FsbCkKIGVuZCkKIAog
Ci1sbGludE9wKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgT3BUYWlsQ2FsbEZvcndh
cmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQorbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAg
ICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQogICAgICMgV2UgbGllIGFuZCBwZXJmb3Jt
IHRoZSB0YWlsIGNhbGwgaW5zdGVhZCBvZiBwcmVwYXJpbmcgaXQgc2luY2Ugd2UgY2FuJ3QKICAg
ICAjIHByZXBhcmUgdGhlIGZyYW1lIGZvciBhIGNhbGwgb3Bjb2RlCi0gICAgZG9DYWxsVmFyYXJn
cyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHNpemUsIE9wVGFpbENhbGxGb3J3YXJk
QXJndW1lbnRzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3
YXJkX2FyZ3VtZW50cywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMsIHByZXBhcmVGb3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cywgc2l6ZSwgZ2V0LCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywg
bV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3Np
emVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2Fs
bCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwp
CiBlbmQpCiAKIAotbGxpbnRPcChvcF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25zdHJ1Y3RWYXJh
cmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJhcmdzKG9wX2Nv
bnN0cnVjdF92YXJhcmdzLCBzaXplLCBPcENvbnN0cnVjdFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxp
bnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29u
c3RydWN0X3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRh
dGEob3BfY29uc3RydWN0X3ZhcmFyZ3MsIE9wQ29uc3RydWN0VmFyYXJncywgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgZG9DYWxsVmFyYXJncyhvcF9j
b25zdHJ1Y3RfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcENvbnN0cnVjdFZhcmFyZ3MsIG1fcHJvZmls
ZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1l
X2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzLCBwcmVwYXJl
Rm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBo
aWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCkKIGVuZCkKIAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCmluZGV4IDkwM2U1YTQ1YjFiNjY4MmZkMjg3OGI5Nzk0ODUyYWVmZDY3NTFkNWUu
LjZjNmY1MDMyYzM5MzMzZTI4ODNjNmVhYTIwMjczODYwODQ3NmNlN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCkBAIC0yMTUxLDEyICsyMTUxLDEyIEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3Bj
b2RlU3RydWN0LCBnZXR1KQogICAgIGJpbmVxIFRoaXNBcmd1bWVudE9mZnNldCArIFRhZ09mZnNl
dFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICBsb2FkaSBUaGlzQXJndW1lbnRPZmZz
ZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGxvYWRpIEpTQ2VsbDo6bV9z
dHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0
NV0KKyAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVByb2Zp
bGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBlbmQKIAorIyB0NSBob2xkcyBt
ZXRhZGF0YS4KIG1hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0
cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwg
c2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBn
ZXRDYWxsZWUodDApCiAKICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLm1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0W3Q1XSwgdDIKQEAg
LTIxODgsNyArMjE4OCw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0
aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGVuZCwgbWV0
YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkKLSAgICAgICAgICAgZ2V0KG1f
Y2FsbGVlLCB0MCkKKyAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCBkc3QpCiAgICAgICAgIGVuZAog
CiAgICAgICAgIG1hY3JvIGdldEFyZ3VtZW50U3RhcnQoZHN0KQpAQCAtMjE5OSw2ICsyMTk5LDcg
QEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3Qs
IHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCBtX2FyZ2MsIGRzdCkKICAgICAgICAgZW5kCiAgICAgICAgIAorICAgICAgICAjIHQ1IGhv
bGRzIG1ldGFkYXRhCiAgICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9w
Y29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50
KQogICAgIGVuZCkKIGVuZApAQCAtMjg2Niw2ICsyODY3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJhdG9yT3BlbiwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QKICAgICBlbmQKIAorICAgIG1ldGFkYXRhKHQ1LCB0
MCkKICAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRl
cmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRl
cmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0
QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXRCeUlkU3RhcnQ6CkBAIC0yOTI3LDYg
KzI5MjksNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0
b3JOZXh0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2Ug
bV92YWx1ZSBzbG90IGFzIGEgdG1wIHNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBs
YXRlci4KKyAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9u
ZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQs
IG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6
ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVu
dEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5n
ZXREb25lU3RhcnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGE5MTMxNGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJl
MmY1OWMwYTgzNzAuLjFkY2IyZGQ4OGM1N2M5OTc5M2E2MmYzMjU3NDMxNThjZjJhZTU0MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCkBAIC0zMDksMTIgKzMwOSwxMiBAQCBtYWNybyBtYWtlSmF2YVNjcmlwdENhbGwo
ZW50cnksIHByb3RvQ2FsbEZyYW1lLCB0ZW1wMSwgdGVtcDIpCiAgICAgaWYgQ19MT09QIG9yIENf
TE9PUF9XSU4KICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBlbnRyeQogICAgIGVsc2lmIEFS
TTY0RQotICAgICAgICBtb3ZlIGVudHJ5LCB0MwotICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNv
bnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6
dm1FbnRyeVRvSmF2YVNjcmlwdCkgKiBQdHJTaXplLCBhMgotICAgICAgICBqbXAgW2EyXSwgTmF0
aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZworICAgICAgICBtb3ZlIGVudHJ5LCB0
NQorICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29u
ZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6dm1FbnRyeVRvSmF2YVNjcmlwdCkgKiBQdHJT
aXplLCBhNworICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRy
eVB0clRhZwogICAgICAgICBnbG9iYWwgX3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lCiAg
ICAgICAgIF92bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZToKLSAgICAgICAgY2FsbCB0Mywg
SlNFbnRyeVB0clRhZworICAgICAgICBjYWxsIHQ1LCBKU0VudHJ5UHRyVGFnCiAgICAgZWxzZQog
ICAgICAgICBjYWxsIGVudHJ5LCBKU0VudHJ5UHRyVGFnCiAgICAgZW5kCkBAIC0yMzYwLDQxICsy
MzYwLDU4IEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0LCBnZXR1KQog
ICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldFtjZnIsIHQzLCA4XSwgdDAKICAgICBidHFueiB0
MCwgbm90Q2VsbE1hc2ssIC5kb25lCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3Qw
XSwgdDMKLSAgICBzdG9yZWkgdDMsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQorICAgIHN0b3Jl
aSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVu
U3RydWN0dXJlSURbdDVdCiAuZG9uZToKIGVuZAogCi1tYWNybyBjYWxsSGVscGVyKG9wY29kZU5h
bWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxS
ZWdpc3RlciwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVl
LCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKLSAgICBt
ZXRhZGF0YSh0NSwgdDApCi0gICAgZ2V0Q2FsbGVlKHQwKQorIyB0NSBob2xkcyBtZXRhZGF0YS4K
K21hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFs
dWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2Fs
bCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykKKyAgICBnZXRDYWxsZWUodDEpCiAKLSAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhM
aW5rQml0W3Q1XSwgdDIKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykK
LSAgICBicW5lcSB0MywgdDIsIC5vcENhbGxTbG93CisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MSwgdDApCiAKKyAgICAjIEFsaWduZWQgdG8gSklUOjpjb21waWxlU2V0dXBGcmFt
ZQogICAgIGdldEFyZ3VtZW50U3RhcnQodDMpCiAgICAgbHNoaWZ0aSAzLCB0MwogICAgIG5lZ3Ag
dDMKICAgICBhZGRwIGNmciwgdDMKLSAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICBnZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh0MikKLSAgICBzdG9yZVBDKCkKICAgICBzdG9yZWkg
dDIsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KKworICAg
ICMgU3RvcmUgbG9jYXRpb24gYml0cyBhbmQgfGNhbGxlZXwsIGFuZCBjb25maWd1cmUgc3AuCisg
ICAgc3RvcmVQQygpCisgICAgc3RvcmVxIHQwLCBDYWxsZWVbdDNdCiAgICAgbW92ZSB0Mywgc3AK
LSAgICBpZiBBUk02NEUKLSAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDAKLSAgICAgICAgcHJlcGFy
ZUNhbGwodDAsIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5UHRyVGFnKQotICAgICAgICBsb2FkcCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJn
ZXRbdDVdLCB0MAotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3Bh
dGNoLCB0MCwgSlNFbnRyeVB0clRhZykKLSAgICBlbHNlCi0gICAgICAgIHByZXBhcmVDYWxsKCVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdl
dFt0NV0sIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5UHRyVGFnKQotICAgICAgICBjYWxsVGFyZ2V0
RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQot
ICAgIGVuZAotLm9wQ2FsbFNsb3c6Ci0gICAgc2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQotZW5kCisgICAgYWRkcCBDYWxsZXJGcmFt
ZUFuZFBDU2l6ZSwgc3AKKworICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQxCisgICAgYnRweiB0MSwgKGNv
bnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9y
cGhpYworICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50YWcgcmV0dXJuIGFk
ZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGluZSBzZXBhcmF0
ZWx5LgorICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMg
Y2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVu
ayBzaWRlLgorICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpT
RW50cnlQdHJUYWcpCisgICAgam1wIC5nb1BvbHltb3JwaGljCiAKLW1hY3JvIGNvbW1vbkNhbGxP
cChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9n
dWUpCisubm90UG9seW1vcnBoaWM6CisgICAgYnFuZXEgdDAsIHQxLCAub3BDYWxsU2xvdworICAg
IHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisuZ29Qb2x5bW9ycGhpYzoKKyAgICBsb2Fk
cCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGludm9rZUNhbGwob3Bjb2RlTmFt
ZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0
ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCisKKy5vcENhbGxTbG93OgorICAg
ICMgdDAgaXMgY2FsbGVlCisgICAgIyB0MiBpcyBDYWxsTGlua0luZm8qCisgICAgIyB0MyBpcyBj
YWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBpbiB0MgorICAgIGxvYWRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9zbG93UGF0aENhbGxE
ZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisgICAgcHJlcGFyZVNsb3dDYWxs
KCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwg
dDUsIEpTRW50cnlQdHJUYWcpCitlbmQKKworbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUs
IHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJl
UG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgcHJvbG9ndWUpCiAgICAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKQEAgLTI0
MDMsNyArMjQyMCw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwg
b3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRh
dGEpCiAKICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkKLSAgICAgICAgICAgIGdldChtX2Nh
bGxlZSwgdDApCisgICAgICAgICAgICBnZXQobV9jYWxsZWUsIGRzdCkKICAgICAgICAgZW5kCiAK
ICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3QpCkBAIC0yNDE0LDcgKzI0MzEsOCBA
QCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwg
cHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1
Y3QsIG1fYXJnYywgZHN0KQogICAgICAgICBlbmQKIAotICAgICAgICBjYWxsSGVscGVyKG9wY29k
ZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHByZXBhcmVD
YWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFy
dCwgZ2V0QXJndW1lbnRDb3VudCkKKyAgICAgICAgIyB0NSBob2xkcyBtZXRhZGF0YQorICAgICAg
ICBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmls
ZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHBy
ZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFy
Z3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCiAgICAgZW5kKQogZW5kCiAKQEAgLTI1MzMs
NiArMjU1MSw4OCBAQCBvcChsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lLCBtYWNy
byAoKQogICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQogZW5k
KQogCisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxl
cidzIEpTR2xvYmFsT2JqZWN0CittYWNybyBsaW5rU2xvd1BhdGhGb3IoZnVuY3Rpb24pCisgICAg
ZnVuY3Rpb25Qcm9sb2d1ZSgpCisgICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fdm1bdDNdLCB0
MQorICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDFdCisgICAgbW92ZSB0MiwgYTIK
KyAgICBtb3ZlIHQzLCBhMQorICAgIG1vdmUgY2ZyLCBhMAorICAgIGNDYWxsNChmdW5jdGlvbikK
KyAgICBmdW5jdGlvbkVwaWxvZ3VlKCkKKyAgICB1bnRhZ1JldHVybkFkZHJlc3Mgc3AKKyAgICBi
dHB6IHIxLCAuZG9Ob3RUcmFzaAorICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0
MSkKKyAgICBwcmVwYXJlRm9yVGFpbENhbGwodDEsIHQyLCB0MywgdDQpCisgICAgdW50YWdSZXR1
cm5BZGRyZXNzIHQ0CisuZG9Ob3RUcmFzaDoKKyAgICAjIEZJWE1FOiBVc2UgaW52b2tlRm9yVGFp
bENhbGw/CisgICAgam1wIHQwLCBKU0VudHJ5UHRyVGFnCitlbmQKKworIyB0MCBpcyBjYWxsZWUK
KyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAor
bWFjcm8gdmlydHVhbFRodW5rRm9yKG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrLCBpbnRl
cm5hbEZ1bmN0aW9uVHJhbXBvbGluZSwgcHJlcGFyZUNhbGwsIHNsb3dDYXNlKQorICAgIGFkZGkg
MSwgQ2FsbExpbmtJbmZvOjptX3Nsb3dQYXRoQ291bnRbdDJdCisgICAgbW92ZSBOb3RDZWxsTWFz
aywgdDEKKyAgICBidHFueiB0MCwgdDEsIHNsb3dDYXNlCisgICAgYmJuZXEgSlNDZWxsOjptX3R5
cGVbdDBdLCBKU0Z1bmN0aW9uVHlwZSwgLm5vdEpTRnVuY3Rpb24KKyAgICBsb2FkcCBKU0Z1bmN0
aW9uOjptX2V4ZWN1dGFibGVPclJhcmVEYXRhW3QwXSwgdDEKKyAgICBidHB6IHQxLCAoY29uc3Rl
eHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgLmlzRXhlY3V0YWJsZQorICAgIGxvYWRwIChG
dW5jdGlvblJhcmVEYXRhOjptX2V4ZWN1dGFibGUgLSAoY29uc3RleHByIEpTRnVuY3Rpb246OnJh
cmVEYXRhVGFnKSlbdDFdLCB0MQorLmlzRXhlY3V0YWJsZToKKyAgICBsb2FkcCBvZmZzZXRPZkpJ
VENvZGVXaXRoQXJpdHlDaGVja1t0MV0sIHQxCisgICAgYnRweiB0MSwgc2xvd0Nhc2UKKy5jYWxs
Q29kZToKKyAgICBwcmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkKKyAgICBqbXAgdDEsIEpTRW50
cnlQdHJUYWcKKy5ub3RKU0Z1bmN0aW9uOgorICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwg
SW50ZXJuYWxGdW5jdGlvblR5cGUsIHNsb3dDYXNlCisgICAgcHJlcGFyZUNhbGwodDUsIHQyLCB0
MywgdDQpCisgICAgam1wIGludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lCitlbmQKKworIyB0MCBp
cyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2Jh
bE9iamVjdAorb3AobGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgbGlu
a1Nsb3dQYXRoRm9yKF9sbGludF9saW5rX2NhbGwpCitlbmQpCisKKyMgdDAgaXMgY2FsbGVlCisj
IHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29w
KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVu
a0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBfbGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAy
LCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93
UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQorCisjIHQwIGlzIGNhbGxlZQorIyB0
MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChs
bGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxU
aHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8g
KHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KSBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToK
KyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkKK2VuZCkKKworIyB0MCBp
cyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2Jh
bE9iamVjdAorb3AobGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkK
KyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1faml0Q29kZUZvckNhbGxXaXRo
QXJpdHlDaGVjaywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZSwgbWFj
cm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQorICAgICAgICBwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwodGVtcDEpCisgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0ZW1wMSwg
dGVtcDIsIHRlbXAzLCB0ZW1wNCkKKyAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIHRlbXA0Cisg
ICAgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGlu
dF92aXJ0dWFsX2NhbGwpCitlbmQpCiAKIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1
dGFibGVPZmZzZXRUb0Z1bmN0aW9uKQogICAgIGZ1bmN0aW9uUHJvbG9ndWUoKQpAQCAtMzA0Niw4
ICszMTQ2LDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJh
dG9yT3BlbiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QK
ICAgICBlbmQKIAotCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xv
d19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9m
aWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlk
Q2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlz
U3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0
MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRl
cmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRl
cmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBh
cmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBz
aXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3Vt
ZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAog
LmdldEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9yZU5leHRBbmREaXNwYXRjaCh2YWx1ZSkKQEAg
LTMxMDQsNyArMzIwNCw4IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwg
T3BJdGVyYXRvck5leHQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgZW5kCiAKICAg
ICAjIFVzZSBtX3ZhbHVlIHNsb3QgYXMgYSB0bXAgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRl
IHRvIGl0IGxhdGVyLgotICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Ns
b3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQ
cm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25l
Q2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlz
U3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0
MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRl
cmF0b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92
YWx1ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFy
ZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNp
emUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1l
bnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAu
Z2V0RG9uZVN0YXJ0OgogICAgIG1hY3JvIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUoZG9uZVZh
bHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZUJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgK
aW5kZXggOTU4MTA1ZDMyNjZkZGZmODViZTVkNzZkODdjZGU1Y2IzMzEzMTRjMy4uNDhmZDkyZjhi
NmE4ZWQyOTQ0YTcyNDhiMTU3ZDJhZjcyNzczYzViNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIGlubGluZSBi
b29sIGlzQ2FsbChDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAKIGNsYXNzIEV4ZWN1dGFi
bGVCYXNlIDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7
CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaAppbmRleCBmNmEw
NWIwNjVlMzJkOGFlY2Q1NjdiZjZhYjc0YWFlNjM4OTk3Nzc4Li4wZmI0NjA2NDQxODg1YjkwZTZj
OGJjYzdlZDgwOWJjYmM1NzYzMDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HYXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5o
CkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoaml0Q2FnZVB0ciwgTm9Q
dHJUYWcpIFwKICAgICB2KHRhaWxDYWxsSlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2
KHRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoUHRyVGFnLCBOb1B0clRhZykgXAorICAgIHYodGFpbENh
bGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnLCBOb1B0clRhZykgXAogICAgIHYobG9vcE9TUkVu
dHJ5LCBOb1B0clRhZykgXAogICAgIHYoZW50cnlPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2
KHdhc21PU1JFbnRyeSwgTm9QdHJUYWcpIFwKQEAgLTUwLDE2ICs1MSwyMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB2KG9wX2NvbnN0cnVjdCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfaXRl
cmF0b3JfbmV4dCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfaXRlcmF0b3Jfb3BlbiwgSlNF
bnRyeVB0clRhZykgXAotICAgIHYob3BfY2FsbF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcp
IFwKLSAgICB2KG9wX3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAg
ICB2KG9wX2NvbnN0cnVjdF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9w
X2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3Rh
aWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykg
XAotICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFn
KSBcCisgICAgdihvcF9jYWxsX3ZhcmFyZ3MsIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3Rh
aWxfY2FsbF92YXJhcmdzLCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMsIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJh
cmdzLCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcp
IFwKKyAgICB2KG9wX3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9j
b25zdHJ1Y3Rfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfaXRlcmF0b3JfbmV4dF9z
bG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50
cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBc
CisgICAgdihvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAg
dihvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdywgSlNFbnRyeVB0clRhZykgXAor
ICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAogICAgIHYo
b3BfY2FsbF9ldmFsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRl
cmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJh
dG9yX29wZW5fc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5Y2Y1ZmVh
MDE5ODQ5ZGI2ZTY2MDkxMGJiOTQ1MWNkMjdjMjVmYmM1Li5mYjI1ZDU0YWJjZTQ2OTEyOGFiYWEx
ZmE2ODRjN2Y2YTA1Y2FiZDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBA
IC0xMzgsNiArMTM4LDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVk
ZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTElu
dEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgogI2lu
Y2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5oIgpAQCAtOTEwLDYgKzkxMSw0NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENv
ZAogICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7CiB9CiAKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJTGlua0NhbGwoKQoreworI2lmIEVOQUJM
RShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRy
VGFnPigpOworI2VuZGlmCisgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJU
YWc+KGxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGgoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAg
ICAgICByZXR1cm4gZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gTExJbnQ6OmNhbGxUb1Rocm93KCp0aGlzKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5
UHRyVGFnPigpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IFZNOjpnZXRDVElWaXJ0dWFsQ2FsbChDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sK
KyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0
dXJuIHZpcnR1YWxUaHVua0ZvcigqdGhpcywgY2FsbExpbmtJbmZvKTsKKyNlbmRpZgorICAgIGF1
dG8gbW9kZSA9IGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpOworICAgIGF1dG8ga2luZCA9IGNhbGxM
aW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBj
YXNlIENhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQg
PT0gQ29kZUZvckNhbGwpOworICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsKKyAgICBjYXNl
IENhbGxNb2RlOjpUYWlsOgorICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gQ29k
ZUZvckNhbGwpOworICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUpOworICAgIGNhc2Ug
Q2FsbE1vZGU6OkNvbnN0cnVjdDoKKyAgICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUpOwor
ICAgIH0KKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsKK30KKwogVk06OkNsaWVudERhdGE6On5D
bGllbnREYXRhKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDZmZTQ2
NzQwNWJiYjQ3NGVjMjIzZDY5YjQ4MWIxOGQ2ZjBhZDNkOTguLjBkZDc5ZmZkZDNhNDUwMDIzMDQ2
YTk2NDE2NDhlNGYyM2U2YTUzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAt
MTA1LDYgKzEwNSw3IEBAIGNsYXNzIEJhc2ljQmxvY2tMb2NhdGlvbjsKIGNsYXNzIEJ1aWx0aW5F
eGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxs
RnJhbWU7CitjbGFzcyBDYWxsTGlua0luZm87CiBzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CkBAIC04OTMsNiArODk0
LDkgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMg
RG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+IHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRCb3Vu
ZEZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uLCBib29sIGNhbkNvbnN0cnVjdCk7CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlv
blRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENUSUxpbmtDYWxsKCk7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz4gZ2V0Q1RJVmlydHVhbENhbGwoQ2FsbExpbmtJbmZvJik7CiAKICAgICBzdGF0aWMgcHRyZGlm
Zl90IGV4Y2VwdGlvbk9mZnNldCgpCiAgICAgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA2ZTg5YzQ1MmE2NTY5Mzc2YmEyMzkxNjBjNDY5
ZjliYmRhNzA1OGM4Li4yOGNkZDAzNGI3YWRhNTNmZDQwYjFkZjY2N2QyMTQzMjA1ZDE1Mzg5IDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDIxLTExLTExICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5j
b20+CisKKyAgICAgICAgW0pTQ10gVXNlIENhbGxMaW5rSW5mbyBpbiBMTEludAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNzQ2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvaXMtY2FsbGFi
bGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzOgorICAgICAgICAqIHN0cmVz
cy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qczoKKyAgICAgICAgKHBsYXRm
b3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnZtLmlzV2FzbVN1cHBvcnRlZCk6CisgICAgICAg
ICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanM6CisgICAgICAgIChwbGF0Zm9ybVN1
cHBvcnRzU2FtcGxpbmdQcm9maWxlci52bS5pc1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0
cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzOgorICAgICAgICAoZG9l
c1RyZWVIYXZlU3RhY2tUcmFjZSk6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKiB3YXNt
L2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzOgorCiAyMDIxLTExLTA5ICBTYWFtIEJhcmF0
aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdoZW4gaW5saW5pbmcgTmV3U3ltYm9s
IGluIHRoZSBERkcgZG9uJ3QgdW5pdmVyc2FsbHkgY2FsbCBUb1N0cmluZyBvbiB0aGUgaW5wdXQK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1i
ZS1hd2FyZS1vZi1wcm94eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1u
ZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcwppbmRleCA1MGNhZWVkMTE0ODQyOWZkMWI1Y2Uw
YjBmZWFlNmJkZGRlNjcxMGI4Li45NGRhYjQ2ZDJkNzE4NGYzNWQ0M2UyZGI0YTJkZDU2NDE5OGJl
ZmY1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMt
dG8tYmUtYXdhcmUtb2YtcHJveHkuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUt
aW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCkBAIC0xLDQgKzEsNCBAQAotLy9A
IHJ1bkRlZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUgLS11c2VDb25jdXJyZW50SklUPWZh
bHNlIiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0x
MCIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xk
Rm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1p
emVTb29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQor
Ly9AIHJ1bkRlZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUiLCAiLS11c2VDb25jdXJyZW50
SklUPWZhbHNlIiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklU
U29vbj0xMCIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhy
ZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRM
T3B0aW1pemVTb29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRy
dWUiKQogCiBmdW5jdGlvbiBtYWluKCkgewogICAgIGxldCB2MTYyOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMgYi9KU1Rl
c3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwppbmRleCA2
ODlhMDA1YWI1NTVhMWZjNjAxYTU0ZTRlYmY5NGU5OWE2NjhmNzdlLi41YzIyMGZkNzZjZGM1YzQw
ZTU5Y2M2NmU1NzM0MmM3MmQ4YzdmM2FhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1w
bGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9z
YW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwpAQCAtNjksNSArNjksNSBAQAog
ICAgIHZhciB3YXNtRW50cnkgPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNl
LmV4cG9ydHMuX3BhcnJvdCgxKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9z
aWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNt
LWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNt
LWZ1bmN0aW9uW19wYXJyb3RdIiwgIndhc20tc3R1YiIsICIyNCIsICJ3YXNtRW50cnkiXSk7Cisg
ICAgcnVuVGVzdCh3YXNtRW50cnksIFsiX3NpbGx5IiwgIih1bmtub3duKSIsICI8Pz4ud2FzbS1m
dW5jdGlvbltfZWdnc10iLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXSIsICI8Pz4ud2FzbS1m
dW5jdGlvbltfc3BhbV0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF0iLCAiKHVua25vd24p
IiwgIndhc21FbnRyeSJdKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5n
LXByb2ZpbGVyLXdhc20uanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNt
LmpzCmluZGV4IGNkMjFmMjg4YzE0OGE0Yjc0MDViZjg2OGRlZjliNTQ1NzM0MDUwNDUuLjA2ZGYw
MTI0OTU5NjllMjg0MjE4Nzc4NjkwMTM1YmYwOTAxMGVjNmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
c3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItd2FzbS5qcwpAQCAtOCw1ICs4LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5
ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmxvb3AoMTAw
MDAwMDApOwogICAgIH07Ci0gICAgcnVuVGVzdCh3YXNtRW50cnksIFsiPD8+Lndhc20tZnVuY3Rp
b25bMF0iLCAid2FzbS1zdHViIiwgIjAiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2Fz
bUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnki
XSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1w
bGluZ1Byb2ZpbGVyLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxp
bmdQcm9maWxlci5qcwppbmRleCA5NjQyZGRjN2MxZTZmMDZlM2IxMzI3OWMwZTRhMDI1YjU0ZGNh
YmYxLi4xYjkyZTk0ODU0YWY2M2Y2N2QwOGY1NDg4N2M1MjE3OTE0ZWUyYmY1IDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCisr
KyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMK
QEAgLTcwLDExICs3MCwxMyBAQCBmdW5jdGlvbiBjaGVjayhub2RlKSB7CiAgICAgCiAgICAgbGV0
IG5vZGUgPSB0cmVlOwogICAgIGZvciAobGV0IGkgPSBzdGFja1RyYWNlLmxlbmd0aDsgaS0tOyAp
IHsKKyAgICAgICAgbGV0IHByZXYgPSBub2RlOwogICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJl
bltzdGFja1RyYWNlW2ldXTsKICAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICBpZiAo
VkVSQk9TRSkgewogICAgICAgICAgICAgICAgIHByaW50KCJmYWlsaW5nIG9uICIgKyBpICsgIiA6
ICIgKyBzdGFja1RyYWNlW2ldKTsKICAgICAgICAgICAgICAgICBwcmludChKU09OLnN0cmluZ2lm
eSh0cmVlKSk7CisgICAgICAgICAgICAgICAgcHJpbnQoT2JqZWN0LmtleXMocHJldi5jaGlsZHJl
bikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC0xMDgsNyArMTEwLDcgQEAgZnVuY3Rpb24gcnVuVGVzdChmdW5jLCBzdGFja1RyYWNlT3JT
dHJpbmcpIHsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUg
PCB0aW1lVG9GYWlsKTsKICAgICBwcmludChKU09OLnN0cmluZ2lmeShyb290LCB1bmRlZmluZWQs
IDIpKTsKLSAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2UsIHRydWUs
IHRydWUpOworICAgIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwgc3RhY2tUcmFjZU9yU3Ry
aW5nLCB0cnVlLCB0cnVlKTsKICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGFjayB0cmFjZSIp
OwogfQogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rp
b24uanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKaW5kZXgg
NjgwNWU2ODlmNWM4NzllMmNhNTA5Yzg4ZDNlN2IzNzZkZTA5ZmFhYS4uMzNjODZiZjFjZGU5YThk
YWIxMThlMGU0Y2IwYmFjZDU5Yjc0OTFlOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0
aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0
cy9uYW1lU2VjdGlvbi5qcwpAQCAtNjksNCArNjksNCBAQAogYXNzZXJ0LmVxKHN0YWNrdHJhY2Vb
M10sICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dQFt3YXNtIGNvZGVdIik7CiBhc3NlcnQuZXEo
c3RhY2t0cmFjZVs0XSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXUBbd2FzbSBjb2RlXSIpOwog
YXNzZXJ0LmVxKHN0YWNrdHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XUBbd2Fz
bSBjb2RlXSIpOwotYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW3dhc20gY29k
ZV0iKTsgLy8gd2FzbSBlbnRyeQorYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJA
W25hdGl2ZSBjb2RlXSIpOyAvLyB3YXNtIGVudHJ5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443987</attachid>
            <date>2021-11-11 12:08:28 -0800</date>
            <delta_ts>2021-11-11 12:58:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111120827.patch</filename>
            <type>text/plain</type>
            <size>156316</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTJjYjM0NzU4NTc2NDdhOWNhNTgyMWIxYzIyZjdkNGI5NDZmMjM0Li4wYmMyMmMxMDdkODk2YTVl
MTc5ZjU3ZjIxOTAyNTg4YzBkN2EyMzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjQgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBjb25zdCk6CisgICAgICAgICogYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3BlcmFu
ZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OmNhbGxMaW5rSW5mb0Zvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRTbG93
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjpzZXRTbG93U3R1Yik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6Y2xlYXJTbG93U3R1Yik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpn
ZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0aXNv
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0
dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAq
IGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6
CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6YWRkVW5saW5rZWRD
YWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9K
SVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6
OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAgIChKU0M6
OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JXaXRo
RnVuY3Rpb24pOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0
L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAgIChKU0M6
OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6
bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAg
ICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFRo
dW5rRm9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yUmVndWxhckNvbnN0cnVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICogbGxpbnQv
TExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmluaXRpYWxpemUpOgorICAgICAg
ICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50
X2xpbmtfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF92aXJ0dWFsX2NhbGwpOgor
ICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlSG9zdENhbGwpOgorICAgICAgICAoSlNDOjpMTElu
dDo6c2V0VXBDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAg
ICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxM
SW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6
IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBs
bGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVhdGVKU0dhdGVU
aHVuayk6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVhdGVUYWlsQ2FsbEdhdGUpOgorICAgICAg
ICAoSlNDOjpMTEludDo6cmV0dXJuTG9jYXRpb25UaHVuayk6CisgICAgICAgICogbGxpbnQvTExJ
bnRUaHVua3MuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9FeGVjdXRh
YmxlQmFzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2F0ZS5oOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJTGlua0NhbGwpOgorICAgICAgICAoSlND
OjpWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKToKKyAgICAgICAgKEpT
Qzo6Vk06OmdldENUSVZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIw
MjEtMTEtMDkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg1MjQ2LgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IGE1ZGVkNjIwNzRhODUyMmYxZDU1YzcyMjZlZTkwZDAyMDQzYzgyNTEu
LjQyYjRjNDQxNDJkY2Y0YzIzZjBjYTAxYzM3Y2VhMTViYTg5NmMyNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY1OSw3ICs2NTksNiBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGJ5dGVjb2RlL0ludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRh
LmgKICAgICBieXRlY29kZS9KdW1wVGFibGUuaAotICAgIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJ
bmZvLmgKICAgICBieXRlY29kZS9MTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKICAgICBi
eXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMzE5NGUzMDI5ZDRjZjY1NGJjZjg4OGIzYTkwYzM1ZDRiMzQzOTNkNi4uMGZhNmVmMzVjZmUy
YThmN2U4OGJjNDEzMzIwOTZjZDNkNzU5Mzk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCQkwRjBDQUVGQzFFQzREQTZCMDA5NzBEMTIgLyogSlNI
ZWFwRmluYWxpemVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwQ0FFRkExRUM0REE2MjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclBy
aXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBDQUVGRjFFQzREQTg4MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDQUVGRTFFQzRE
QTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMw
IC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAw
QjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1
c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
MEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovOyB9OwogCQkwRjEyREUxMDE5
NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2Vw
dGlvbkZ1enouaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0
IC8qIERlZmVyR0MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMjM4OSw3ICsyMzg4LDYgQEAKIAkJMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEyIC8q
IEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwRmluYWxpemVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXREaXJlY3RJbmRleE1vZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMEZD
NDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMTEludENhbGxMaW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjEwRjFBMjFDNDIwQkYwMDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckN1c3RvbS5oOyBwYXRoID0gYjMvYWly
L0FpckN1c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEyREUwRDE5NzlE
NUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFeGNlcHRpb25GdXp6LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uRnV6ei5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODgwOSw3ICs4ODA3LDYgQEAKIAkJCQkwRkI1NDY3NjE0RjU5QUQx
MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQlFMzYzN0VFODIz
NkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8sCiAJCQkJRTM2MzdFRTcy
MzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLywKLQkJCQkwRjBGQzQ1ODE0
QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLywKIAkJCQk1M0ZBMkFFMjFD
RjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLywKIAkJCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMTRGNzlGNkUy
MTZFQUQ1MDAwMDQ2RDM5IC8qIE1ldGFkYXRhVGFibGUuY3BwICovLApAQCAtMTA1MTgsNyArMTA1
MTUsNiBAQAogCQkJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJh
bFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBERTlBMDkxQkU3RDY5RTAwNUQ4OUQ5IC8q
IExMSW50QXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMEZDNDVBMTRCRDE1RjUwMEI4
MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaAppbmRleCA5MjU1OTE4YjFiYTE3NWExZjQ5ZGMzMDI1ZWM2ZmNhODg5MzlkMzY0
Li4zMGUzYWJlMzFjMGUwMjAzOTMyMzRkY2I2YzI0MWI1ZjY3OGM3NGY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgKQEAgLTM3Nyw3ICszNzcsMTAgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlIHsKIAogICAgIHZvaWQgZHVtcFdpdGhOYW1l
KGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJl
c3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgICAgIGlmIChtX3ZhbHVlKQor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1
dGFibGVBZGRyZXNzKCksIGRhdGFMb2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUobnVs
bHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKICAgICB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCBiZTJl
OGM4MTFkNmRkZDBjMTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyLi42M2M3OGRmOTk5MWZmY2MwNzk2
MzQ3ZjNhMTg5YzZlMDg0NTNkYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI2LDYgKzI2LDcgQEAKIAogICAgIDpCYXNpY0Jsb2Nr
TG9jYXRpb24sCiAgICAgOkJvdW5kTGFiZWwsCisgICAgOkNhbGxMaW5rSW5mbywKICAgICA6RGVi
dWdIb29rVHlwZSwKICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24s
CkBAIC00NCw3ICs0NSw2IEBACiAgICAgOkpTU2NvcGUsCiAgICAgOkpTVHlwZSwKICAgICA6SlNW
YWx1ZSwKLSAgICA6TExJbnRDYWxsTGlua0luZm8sCiAgICAgOlJlc3VsdFR5cGUsCiAgICAgOk9w
ZXJhbmRUeXBlcywKICAgICA6UHJpdmF0ZUZpZWxkUHV0S2luZCwKQEAgLTU1LDYgKzU1LDcgQEAK
ICAgICA6U3RydWN0dXJlLAogICAgIDpTdHJ1Y3R1cmVJRCwKICAgICA6U3RydWN0dXJlQ2hhaW4s
CisgICAgOlN0cnVjdHVyZVN0dWJJbmZvLAogICAgIDpTeW1ib2xUYWJsZSwKICAgICA6U3ltYm9s
VGFibGVPclNjb3BlRGVwdGgsCiAgICAgOlRvVGhpc1N0YXR1cywKQEAgLTg0MCw3ICs4NDEsOCBA
QAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5m
bzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODUyLDcgKzg1NCw4IEBA
CiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZv
OiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NjUsNyArODY4LDggQEAK
ICAgICAgICAgZWNtYU1vZGU6IEVDTUFNb2RlLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAg
ICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJ
bmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAog
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NzksNiArODgzLDcg
QEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Cisg
ICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6
IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBA
IC05MDAsNiArOTA1LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAogICAgIH0sCkBAIC05MjEsNiArOTI3LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGlu
dCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExp
bmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KQEAgLTkzMyw3ICs5NDAsOCBAQAogICAgICAgICBh
cmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5r
SW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJ
bmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtOTQ3LDYgKzk1NSw3IEBACiAgICAgICAgIGZp
cnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlu
a0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUs
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAtMTI0OSw3ICsxMjU4
LDggQEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
LSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExp
bmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAogICAgICAgICBpdGVyYXRvclByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICAgICAgbW9kZU1l
dGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBuZXh0UHJvZmlsZTogVmFsdWVQ
cm9maWxlLApAQCAtMTI3Miw3ICsxMjgyLDggQEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBp
dGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJs
ZVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxM
aW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBuZXh0UmVzdWx0UHJvZmlsZTogVmFs
dWVQcm9maWxlLAogICAgICAgICBkb25lTW9kZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRh
LAogICAgICAgICBkb25lUHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTQxNSw2ICsxNDI2LDEw
IEBACiBvcCA6bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50ZXJuYWxfZnVuY3Rp
b25fY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZQor
b3AgOmxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF9jb25z
dHJ1Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUK
IG9wIDpjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUKIG9w
IDpjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUKIG9wIDpub3JtYWxfb3NyX2V4aXRfdHJh
bXBvbGluZQpAQCAtMTQyMyw2ICsxNDM4LDggQEAKIG9wIDpsbGludF9oYW5kbGVfdW5jYXVnaHRf
ZXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3Rf
cmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY2FsbF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgorb3Ag
Om9wX2NvbnN0cnVjdF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NhbGxfdmFyYXJn
c19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbgpAQCAtMTQzOCwx
NSArMTQ1NSwxNSBAQAogb3AgOm9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbgogb3Ag
Om9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9pdGVyYXRvcl9u
ZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCi1vcCA6b3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlv
bgogb3AgOm9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2Fs
bF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF9ldmFsX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiAKIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGwKLW9wIDpqc190cmFtcG9s
aW5lX29wX3RhaWxfY2FsbAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0CitvcCA6anNf
dHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3MKK29wIDpqc190cmFtcG9saW5lX29wX2NvbnN0cnVj
dF92YXJhcmdzCiBvcCA6anNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0CiBvcCA6anNfdHJh
bXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3cK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKaW5kZXggNGY0N2M4YmNjZjhlNTc0OGFhOWIwZjM2
ZTZmMzYzMDVhZGMzMDAxMS4uMjcwY2Q2ZjFkMDJmNDRkNTNkYjNlNmFhNjNhZmZhMTVlMGMwOTI2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKQEAgLTE4MCw3ICsxODAsNyBAQCBwdHJk
aWZmX3Qgc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCB1bnNpZ25lZCBjaGVjawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFk
YXRhPgotTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1ldGFkYXRh
JiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQorQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9p
bnRJbmRleCkKIHsKICAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4KTsKICAgICByZXR1
cm4gbWV0YWRhdGEubV9jYWxsTGlua0luZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDNiODAzYjM4YTc4NjliNDkzODljMDc5MGFi
YzhiZWI4ZDQwYTU1OGEuLjUyNWVkZWFhMWI0ZWQzMDhlNTMwYzhlODFlNzI4NDhiNGFiNGNkMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3Bw
CkBAIC0xMTMsOCArMTEzLDYgQEAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
Q2FsbExpbmtJbmZvOjpkb25lTG9jYXRpb24oKQogICAgIHJldHVybiBtX2RvbmVMb2NhdGlvbjsK
IH0KIAotc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxsZWVNYXNrID0g
MTsKLQogdm9pZCBDYWxsTGlua0luZm86OnNldE1vbm9tb3JwaGljQ2FsbGVlKFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwpA
QCAtMjg2LDcgKzI4NCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRh
KGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJiBzaHVmZmxlRGF0YSkKICAgICBtX2ZyYW1lU2h1
ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8dm9p
ZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogCkBAIC0zNDUsNyArMzQzLDcgQEAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGwK
ICAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5m
bzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlD
OjpObyk7CkBAIC0zNTgsNyArMzU2LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxM
aW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFIKICAgICBy
ZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgcmV0dXJu
IGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CkBA
IC0zNjYsNyArMzY0LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJgogCiB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCiB7Ci0gICAgc2V0
U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7CisgICAgc2V0U2xv
d1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOwogICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDIp
OwogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zm
c2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CkBAIC0z
NzcsMTggKzM3NSwyMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZN
JiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZgogICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjpp
bml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2Fs
bExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQordm9p
ZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBDYWxsVHlwZSBjYWxsVHlw
ZSwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSogZnJh
bWVTaHVmZmxlRGF0YSkKIHsKLSAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2Vk
Q2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOwotICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxM
aW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKLSAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlu
a2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKLSAgICBpZiAodW5saW5rZWRDYWxsTGlua0lu
Zm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gR1BSSW5mbzo6cmVnVDI7CisgICAg
bV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KTsKKyAgICBzZXRVcENhbGwo
Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgaWYgKGZyYW1lU2h1ZmZsZURhdGEpIHsKICAgICAg
ICAgLy8gRklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIHdlcmUgYSByZWZjb3VudGVkIGRhdGEg
c3RydWN0dXJlLgotICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxG
cmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSk7
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCpmcmFtZVNodWZmbGVEYXRhKTsKICAgICB9CiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNl
RGF0YUlDOjpZZXMpOwogICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJ
bmZvR1BSOwotICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkpOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSUxpbmtDYWxsKCku
Y29kZSgpKTsKKyAgICAvLyBJZiBKSVQgaXMgZGlzYWJsZWQsIHdlIHNob3VsZCBub3Qgc3VwcG9y
dCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY2FsbCBJQy4KKyAgICBpZiAoIU9wdGlvbnM6OnVzZUpJ
VCgpKQorICAgICAgICBkaXNhbGxvd1N0dWJzKCk7CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC00MDYsNyArNDA4LDcgQEAg
dm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkK
ICAgICB9KTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQ
YXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKQordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2Fs
bCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKaW5kZXggZTVmNzdjZjM3YmYyNjZm
NGI5YzkzYzUwY2Y5OTZkMjFjNjY4Y2U0NS4uMzU1ZTI2NTQ2MzIyNmIzYzNjYjc0ZjQyYTI0MTg5
YmE4N2M1MjVhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uaApAQCAtMzEsMTMgKzMxLDExIEBACiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9u
S2luZC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVk
ZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8
d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUKQotCiBjbGFzcyBDQ2FsbEhlbHBl
cnM7CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIEpTRnVuY3Rpb247CkBAIC00Nyw2
ICs0NSw4IEBAIHN0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKIAogY2xhc3MgQ2FsbExpbmtJ
bmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1Ymxp
YzoKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworCiAgICAgZW51bSBD
YWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLApAQCAtNTks
NiArNTksOCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBEaXJlY3RDb25zdHJ1Y3QsCiAgICAgICAgIERp
cmVjdFRhaWxDYWxsCiAgICAgfTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBv
bHltb3JwaGljQ2FsbGVlTWFzayA9IDE7CiAgICAgCiAgICAgc3RhdGljIENhbGxUeXBlIGNhbGxU
eXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKTsKIApAQCAtMTgzLDcgKzE4NSw3IEBAIGNsYXNzIENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7
CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAotICAgIHZvaWQgaW5p
dGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisgICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZN
JiwgQ2FsbFR5cGUsIEJ5dGVjb2RlSW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKik7CiAKICAg
ICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAK
QEAgLTE5MywxNCArMTk1LDE0IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRS
YXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJ
bmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRh
aWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CiAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOwot
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENh
bGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1p
dEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFNjb3BlZExhbWJkYTx2
b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9p
ZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7Ci0gICAgdm9pZCBlbWl0RGlyZWN0
VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKTsKKyAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKTsK
ICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOwogICAgIHN0YXRpYyB2
b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwpAQCAtMjU1LDE2ICsyNTcs
NiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENh
bGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4gbV9zdHViLmdldCgpOwogICAgIH0KIAotICAg
IHZvaWQgc2V0U2xvd1N0dWIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIG5ld1Nsb3dTdHViKQotICAg
IHsKLSAgICAgICAgbV9zbG93U3R1YiA9IFdURk1vdmUobmV3U2xvd1N0dWIpOwotICAgIH0KLQot
ICAgIHZvaWQgY2xlYXJTbG93U3R1YigpCi0gICAgewotICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzMwLDE5ICszMjIsMTcgQEAgY2xhc3MgQ2Fs
bExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsK
ICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAg
ICB9Ci0jZW5kaWYKLQogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OwogICAgIH0KICAgICAKICAgICB2b2lkIHNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KHVuc2lnbmVkKTsKKyAgICB2b2lkIHVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIHsKKyAgICAgICAgaWYg
KG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykKKyAgICAgICAgICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mU2xvd1BhdGhDb3VudCgpCiAgICAgewpAQCAtNDA4LDYgKzM5OCw3IEBAIGNsYXNzIENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7
CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0
KCk7CiAKKyAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9
OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50
cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIGFy
Z3VtZW50cy4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVM
b2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93
UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpAQCAtNDMwLDcgKzQy
MSw2IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVC
bG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRh
YmxlOwogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gbV9zdHViOwotICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gbV9zbG93U3R1YjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IG1fZnJhbWVTaHVmZmxlRGF0YTsKICAgICBDb2RlT3JpZ2lu
IG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwpAQCAt
NDQzLDcgKzQzMyw2IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgdW5zaWduZWQgbV91c2VEYXRhSUMgOiAxOyAv
LyBVc2VEYXRhSUMKICAgICBHUFJSZWcgbV9jYWxsZWVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAg
ICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9OwotICAgIHVpbnQzMl90IG1fbWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmls
ZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9m
IHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogfTsKIAogaW5saW5lIENvZGVP
cmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bykKQEAgLTQ1MywxMSArNDQyLDcgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZv
Q29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIAogc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJl
bnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVj
ZSBhIENvZGVPcmlnaW4uCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOwog
fTsKIAotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKaW5kZXgg
ZjdhZmIyYjBmMjhmZDllNWZmYzVjMzRiNmEzYTg1NmFlMzczMDJmNS4uZjJkZGEwZWVkYWFiOTY0
NGEwM2JlYjZlNTNmZWExNzIyM2EwY2FmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBAIC02MywzNCAr
NjIsNyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQgogICAgICAgICByZXR1cm4gdGFrZXNTbG93
UGF0aCgpOwogICAgIH0KICNlbmRpZgotCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVk
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgIE9w
Y29kZUlEIG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7Ci0KLSAgICBMTEludENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIG9wX2NhbGw6
Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpLm1ldGFk
YXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIG9wX2NvbnN0cnVjdDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5h
czxPcENvbnN0cnVjdD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF90YWlsX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5r
SW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJs
b2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9pdGVyYXRv
cl9vcGVuOgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0
b3JPcGVuPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6Ci0gICAgICAgIGNhbGxMaW5rSW5m
byA9ICZpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCkubWV0YWRhdGEocHJvZmlsZWRC
bG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHJl
dHVybiBDYWxsTGlua1N0YXR1cyhjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlKCkpOworICAg
IHJldHVybiBDYWxsTGlua1N0YXR1cygpOwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUZvcigKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKaW5kZXggYjkwOWRmNDU4NDRiMjI5ZWM5MTgzMzkxODQyNjIzNDU5MjdlYTZkZi4u
MDFjMWE4NmE2OGIwNTU1Mzc4ZjEyYzU0M2QzMDI1YjQ0MTc2NThhMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ0OSwxNCArNDQ5LDE3IEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YSh0aGlzKTsgXAogICAgIG5ldyAoJm1ldGFkYXRhKSBfX29wOjpNZXRhZGF0YSB7IGJ5
dGVjb2RlIH07IFwKIAotI2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKLQot
I2RlZmluZSBMSU5LKC4uLikgXAotICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18p
KTogeyBcCisjZGVmaW5lIExJTktfSU1QTCguLi4pIFwKICAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpIFwKICAgICAgICAgV1RGX0xBWllfSEFT
X1JFU1QoX19WQV9BUkdTX18pKHsgXAogICAgICAgICAgICAgV1RGX0xBWllfRk9SX0VBQ0hfVEVS
TShMSU5LX0ZJRUxELCAgV1RGX0xBWllfUkVTVF8oX19WQV9BUkdTX18pKSBcCiAgICAgICAgIH0p
IFwKKworI2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKKworI2RlZmluZSBM
SU5LKC4uLikgXAorICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKTogeyBcCisg
ICAgICAgIExJTktfSU1QTChfX1ZBX0FSR1NfXykgXAogICAgICAgICBicmVhazsgXAogICAgIH0K
IApAQCAtNDY1LDEwICs0NjgsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogICAgICAgICBtX2J5
dGVjb2RlQ29zdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKICAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgICAgICBMSU5LKE9wQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAg
IExJTksoT3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BDb25zdHJ1Y3RWYXJh
cmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0QnlWYWwsIHByb2ZpbGUpCiAgICAgICAg
IExJTksoT3BHZXRQcml2YXRlTmFtZSwgcHJvZmlsZSkKIApAQCAtNDk4LDExICs0OTcsNiBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blBy
b3BlcnR5KQogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQogCi0g
ICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHBy
b2ZpbGUpCi0gICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhP
cENvbnN0cnVjdCwgcHJvZmlsZSkKLQogICAgICAgICBMSU5LKE9wSW5CeVZhbCkKICAgICAgICAg
TElOSyhPcFB1dEJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlWYWxEaXJlY3QpCkBAIC01Mjcs
MTMgKzUyMSw4OSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wQ2F0
Y2gpCiAgICAgICAgIExJTksoT3BQcm9maWxlQ29udHJvbEZsb3cpCiAKKyAgICAgICAgY2FzZSBv
cF9jYWxsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsLCBwcm9maWxlKQorICAgICAg
ICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExp
bmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxw
dHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3Rh
aWxfY2FsbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGwsIHByb2ZpbGUpCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxs
ZWVKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAg
ICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDAgfTsKKyNlbmRpZgorICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgc2h1ZmZsZURhdGE7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0g
Ynl0ZWNvZGUubV9hcmdjOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9
IG51bVBhcmFtZXRlcnMoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyNl
bmRpZgorICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gYnl0ZWNvZGUubV9hcmd2
IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9h
cmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAg
IH0KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0g
VmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgRGF0YUZvcm1hdEpT
KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1Iu
cGF5bG9hZEdQUigpKTsKKyNlbmRpZgorICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5zaHJpbmtUb0ZpdCgp
OworICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2
bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4
KCksICZzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsRXZh
bCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxp
emVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVj
dGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENv
bnN0cnVjdCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmlu
aXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBp
bnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Ci0gICAgICAgICAgICBJTklU
SUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgTElOS19JTVBMKE9w
SXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlh
bGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3Ry
dWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKLSAgICAgICAgICAgIElOSVRJQUxJ
WkVfTUVUQURBVEEoT3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBMSU5LX0lNUEwoT3BJdGVy
YXRvck5leHQpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXpl
RGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rp
b24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BD
YWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZv
LmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
LCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczogeworICAgICAgICAg
ICAgTElOS19JTVBMKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0
YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpj
YWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50czogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxGb3J3
YXJkQXJndW1lbnRzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0lu
Zm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAg
ICAgICBMSU5LX0lNUEwoT3BDb25zdHJ1Y3RWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAg
bWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNzgzLDIxICs4NTMsMTggQEAgdm9p
ZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJ
VENvZGU+IGppdENvZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9qaXRDb25z
dGFudFBvb2wuaXNFbXB0eSgpKTsKICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9
IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkpOwogICAg
ICAgICBqaXREYXRhLm1fc3R1YkluZm9zID0gRml4ZWRWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+
KGppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKLSAgICAgICAgaml0RGF0YS5t
X2NhbGxMaW5rSW5mb3MgPSBGaXhlZFZlY3RvcjxDYWxsTGlua0luZm8+KGppdENvZGUtPm1fdW5s
aW5rZWRDYWxscy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkQ2FsbExpbmtJ
bmZvIDogaml0Q29kZS0+bV91bmxpbmtlZENhbGxzKSB7CisgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2Vy
LCB1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEFTU0VS
VChjYWxsTGlua0luZm8pOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRp
b25zKHsgfSwgdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0
YW50UG9vbC5hdChpKTsKICAgICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgogICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5n
ZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50ZXIoKSk7Ci0gICAgICAg
ICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gaml0
Q29kZS0+bV91bmxpbmtlZENhbGxzW2luZGV4XTsKLSAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zW2luZGV4XTsKLSAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENh
bGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAg
ICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gJmNhbGxMaW5rSW5mbzsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogewogICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucG9pbnRlcigpKTsK
ICAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJ
bmZvID0gaml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvc1tpbmRleF07CkBAIC0xNTY3LDE1ICsx
NjM0LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQotICAgIGZvckVhY2hMTEludENhbGxMaW5r
SW5mbyhbJl0oTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgewotICAgICAgICBpZiAo
Y2FsbExpbmtJbmZvLmlzTGlua2VkKCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZv
LmNhbGxlZSgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAiQ2xlYXJpbmcgTExJbnQgY2FsbCBmcm9tICIsICp0aGlzKTsKLSAgICAgICAgICAgIGNh
bGxMaW5rSW5mby51bmxpbmsoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2FsbExpbmtJbmZv
Lmxhc3RTZWVuQ2FsbGVlKCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZvLmxhc3RT
ZWVuQ2FsbGVlKCkpKQotICAgICAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyTGFzdFNlZW5DYWxs
ZWUoKTsKLSAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xNTkzLDggKzE2NTEsNiBA
QCBDb2RlQmxvY2s6OkpJVERhdGEmIENvZGVCbG9jazo6ZW5zdXJlSklURGF0YVNsb3coY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJikKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNh
Y2hlcygpCiB7CiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3Mp
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8udmlzaXRXZWFrKHZtKCkpOwogICAgICAgICBmb3Ig
KGF1dG8mIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlckJhc2UgbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAgICAgICAg
ICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CkBAIC0xNjM3
LDYgKzE2OTMsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZN
JiB2bSkKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAg
ICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAorICAgIGZvckVhY2hMTEludENh
bGxMaW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgY2Fs
bExpbmtJbmZvLnZpc2l0V2Vhayh2bSk7CisgICAgfSk7CisKICNpZiBFTkFCTEUoSklUKQogICAg
IGlmICghIWppdENvZGUoKSkKICAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKQEAg
LTE3MDAsMTIgKzE3NjAsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIElDU3RhdHVzTWFwJiByZXN1bHQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKKyAgICBmb3JFYWNo
TExJbnRDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAg
ICAgIHJlc3VsdC5hZGQoY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRl
cmF0b3ItPnZhbHVlLmNhbGxMaW5rSW5mbyA9ICZjYWxsTGlua0luZm87CisgICAgfSk7CiAgICAg
aWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGppdERh
dGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgc3R1YkluZm8g
OiBqaXREYXRhLT5tX3N0dWJJbmZvcykKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHN0dWJJ
bmZvLmNvZGVPcmlnaW4sIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5zdHViSW5mbyA9ICZz
dHViSW5mbzsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+
bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoY2FsbExpbmtJbmZv
LmNvZGVPcmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNhbGxMaW5rSW5mbyA9
ICZjYWxsTGlua0luZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CkBAIC0xNzYwLDE1ICsx
ODIxLDIyIEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUNhbGxMaW5rSW5m
byogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5k
ZXggaW5kZXgpCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4IGluZGV4
KQogewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBpZiAoYXV0
byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxM
aW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykgewotICAgICAgICAgICAgaWYgKGNh
bGxMaW5rSW5mby5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdpbihpbmRleCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuICZjYWxsTGlua0luZm87Ci0gICAgICAgIH0KKyAgICBhdXRvJiBpbnN0cnVj
dGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGluZGV4KTsKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9u
LT5vcGNvZGVJRCgpKSB7CisjZGVmaW5lIENBU0UoT3ApIFwKKyAgICBjYXNlIE9wOjpvcGNvZGVJ
RDogXAorICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2NhbGxMaW5rSW5mbzsgXAorICAgICAgICBicmVhazsKKworICAgIEZPUl9FQUNIX09QQ09E
RV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENBU0UpCisKKyN1bmRlZiBDQVNFCisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQorCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTIxNTQs
OCArMjIyMiw2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwo
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDCiAKIHZvaWQgQ29kZUJsb2NrOjp1
bmxpbmtJbmNvbWluZ0NhbGxzKCkKIHsKLSAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMu
YmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWlu
Z0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRE
YXRhKiBqaXREYXRhID0gbnVsbHB0cjsKICAgICB7CkBAIC0yMTcxLDEyICsyMjM3LDYgQEAgdm9p
ZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVy
RnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWlu
Z0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIG1faW5jb21pbmdMTEludENhbGxzLnB1c2goaW5jb21p
bmcpOwotfQotCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQogewogICAg
IHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3Bl
Y2lhbGl6YXRpb25LaW5kKCkpOwpAQCAtMjMyOSwxMyArMjM4OSwxMyBAQCB2b2lkIENvZGVCbG9j
azo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRpbWl6YXRp
b25Nb2RlIG1vZAogICAgIGlmICh2bS5oZWFwLmlzQ3VycmVudFRocmVhZEJ1c3koKSAmJiAhdm0u
aGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotI2lm
IEVOQUJMRShKSVQpCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7Ci0gICAgICAgIGlmIChKSVREYXRhKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExp
bmtJbmZvcykKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlz
b24oKTsKLSAgICAgICAgfQorICAgICAgICBmb3JFYWNoTExJbnRDYWxsTGlua0luZm8oWyZdKENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0
Q2xlYXJlZEJ5SmV0dGlzb24oKTsKKyAgICAgICAgfSk7CisKKyNpZiBFTkFCTEUoSklUKQogI2lm
IEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpIHsKICAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9q
aXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTI4NDcsMTkgKzI5MDcsMTMgQEAgQXJyYXlQcm9maWxl
KiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBC
eXRlY29kZUluZGUKIHsKICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQo
Ynl0ZWNvZGVJbmRleCk7CiAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewot
I2RlZmluZSBDQVNFMShPcCkgXAorI2RlZmluZSBDQVNFKE9wKSBcCiAgICAgY2FzZSBPcDo6b3Bj
b2RlSUQ6IFwKICAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEo
dGhpcykubV9hcnJheVByb2ZpbGU7CiAKLSNkZWZpbmUgQ0FTRTIoT3ApIFwKLSAgICBjYXNlIE9w
OjpvcGNvZGVJRDogXAotICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZTsKLQotICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRTEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ0FTRTIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
QVJSQVlfUFJPRklMRShDQVNFKQogCi0jdW5kZWYgQ0FTRTEKLSN1bmRlZiBDQVNFMgorI3VuZGVm
IENBU0UKIAogICAgIGNhc2UgT3BHZXRCeUlkOjpvcGNvZGVJRDogewogICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKQEAgLTMwMjksMTcgKzMwODMs
MTIgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVByZWRpY3Rpb25zKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2UKICAgICAgICAgfQogICAgIH0pOwogCi0jZGVm
aW5lIFZJU0lUMShfX29wKSBcCisjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICBtX21ldGFkYXRh
LT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZSk7IH0pOwogCi0jZGVmaW5lIFZJU0lUMihfX29wKSBcCi0gICAgbV9tZXRh
ZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRh
dGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUpOyB9KTsKLQotICAgIEZPUl9FQUNIX09Q
Q09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoVklTSVQxKQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRI
X0xMSU5UX0NBTExfTElOS19JTkZPKFZJU0lUMikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9B
UlJBWV9QUk9GSUxFKFZJU0lUKQogCi0jdW5kZWYgVklTSVQxCi0jdW5kZWYgVklTSVQyCisjdW5k
ZWYgVklTSVQKIAogICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck5leHQ+KFsmXSAo
YXV0byYgbWV0YWRhdGEpIHsKICAgICAgICAgcHJvY2VzcyhtZXRhZGF0YS5tX2l0ZXJhYmxlUHJv
ZmlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXgg
NjRmOWY1YWJjZmUyYWU3MDVkMWRhNjVhYTlmODMxOTdiOTZjNmQzMS4uZGNmMWY4ZjFkNzA0YTk3
YjY5NjNmOTlhNzA3YTNjOWFhMTcwMzNlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaApAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIkpTQ2FzdC5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCi0jaW5j
bHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oIgogI2luY2x1ZGUgIk1ldGFkYXRhVGFibGUuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZS5oIgpAQCAtMjYxLDcgKzI2MCw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1
YmxpYyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCiAgICAgICAgIEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsK
LSAgICAgICAgRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAg
ICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIFBhY2tlZFJhd1NlbnRpbmVsTm9k
ZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAgICAgICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBo
aWNDYWxsTm9kZT4+IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOwogICAgICAgICBib29sIG1f
aGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CkBAIC0yOTEsNyArMjg5LDcgQEAgY2xh
c3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVu
Y3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUg
Y2FzZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlm
IHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAgICAgLy8gbG9va2luZyBmb3Ig
YSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgot
ICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29k
ZUluZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5k
ZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAg
Y29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCkBAIC0zMTUsOCArMzEzLDYgQEAgY2xh
c3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5
bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSop
OwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKLQogICAgIGNvbnN0IElu
c3RydWN0aW9uKiBvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CiAg
ICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZz
ZXQpCiAgICAgewpAQCAtOTU5LDcgKzk1NSw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBK
U0NlbGwgewogICAgIFZNKiBtX3ZtOwogCiAgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVjdGlvbnNS
YXdQb2ludGVyIHsgbnVsbHB0ciB9OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxM
aW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNv
bWluZ0xMSW50Q2FsbHM7CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50R2V0QnlJ
ZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICNpZiBFTkFC
TEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50
Q2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1OGZmY2Q5MTdkZDJj
NTAxNjJlMTM1NWIzZDU4YjE4ZTZhMDcyNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkpTQ1B0clRhZy5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLSNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgSW5zdHJ1Y3Rpb247Ci0KLWNsYXNzIExM
SW50Q2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxMTEludENhbGxM
aW5rSW5mbz4gewotcHVibGljOgotICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCB1bmxpbmtlZEJpdCA9IDB4MTsK
LQotICAgIExMSW50Q2FsbExpbmtJbmZvKCkgPSBkZWZhdWx0OwotICAgIAotICAgIH5MTEludENh
bGxMaW5rSW5mbygpCi0gICAgewotICAgICAgICBpZiAoaXNPbkxpc3QoKSkKLSAgICAgICAgICAg
IHJlbW92ZSgpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzTGlua2VkKCkgY29uc3QgeyByZXR1
cm4gIShtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCAmIHVubGlua2VkQml0KTsg
fQotICAgIAotCi0gICAgdm9pZCBsaW5rKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3Qq
IGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCi0g
ICAgewotICAgICAgICBpZiAoaXNPbkxpc3QoKSkKLSAgICAgICAgICAgIHJlbW92ZSgpOwotICAg
ICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGNhbGxlZSk7Ci0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyLCBj
YWxsZWUpOwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKLSAgICB9Ci0K
LSAgICB2b2lkIHVubGluaygpCi0gICAgewotICAgICAgICAvLyBNYWtlIGxpbmsgaW52YWxpZGF0
ZWQuIEl0IHdvcmtzIGJlY2F1c2UgTExJbnQgdGVzdHMgdGhlIGdpdmVuIGNhbGxlZSB3aXRoIHRo
aXMgcG9pbnRlci4gQnV0IGl0IGlzIHN0aWxsIHZhbGlkIGFzIGxhc3RTZWVuQ2FsbGVlIQotICAg
ICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB8PSB1bmxpbmtlZEJpdDsK
LSAgICAgICAgbV9tYWNoaW5lQ29kZVRhcmdldCA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPigpOwotICAgICAgICBpZiAoaXNPbkxpc3QoKSkKLSAgICAgICAgICAgIHJlbW92
ZSgpOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBjYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKCFpc0xpbmtlZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNPYmplY3QqPihtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVX
aXRoTGlua0JpdCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGxhc3RTZWVuQ2FsbGVlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNPYmplY3QqPihtX2NhbGxl
ZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCAmIH51bmxpbmtlZEJpdCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCkKLSAgICB7Ci0gICAgICAgIG1fY2FsbGVlT3JM
YXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ID0gdW5saW5rZWRCaXQ7Ci0gICAgfQotCi0gICAgQXJy
YXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8s
IG1fYXJyYXlQcm9maWxlKTsgfQotCi1wcml2YXRlOgotICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9y
TGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fbWFjaGluZUNvZGVUYXJnZXQ7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApp
bmRleCBjYThiZWYzMjhiNGJmYjJiMGRmZGM4YjI4NTI0OTIxYWM4MzliZDM2Li4xY2JjNjZmODQ5
OTU0OTk3ZWY3YzUwZDQ5Mzg0MzAyZjM1YzYyOWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09wY29kZS5oCkBAIC0xMjYsMTEgKzEyNiwxOSBAQCBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4
cHIobQogICAgIG1hY3JvKE9wUnNoaWZ0KSBcCiAgICAgbWFjcm8oT3BHZXRQcml2YXRlTmFtZSkg
XAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwK
KyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8p
IFwKKyAgICBtYWNybyhPcENhbGwpIFwKKyAgICBtYWNybyhPcFRhaWxDYWxsKSBcCisgICAgbWFj
cm8oT3BDYWxsRXZhbCkgXAorICAgIG1hY3JvKE9wQ29uc3RydWN0KSBcCisgICAgbWFjcm8oT3BJ
dGVyYXRvck9wZW4pIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yTmV4dCkgXAogICAgIG1hY3JvKE9w
Q2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsVmFyYXJncykgXAogICAgIG1hY3Jv
KE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKSBcCiAgICAgbWFjcm8oT3BDb25zdHJ1Y3RWYXJh
cmdzKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNy
bykgXAogICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEluQnlWYWwpIFwKICAg
ICBtYWNybyhPcFB1dEJ5VmFsKSBcCkBAIC0xMzksNiArMTQ3LDcgQEAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29u
c3RleHByKG0KICAgICBtYWNybyhPcEVudW1lcmF0b3JHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9w
RW51bWVyYXRvckluQnlWYWwpIFwKICAgICBtYWNybyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eSkgXAorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3Jv
KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9G
SUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdBcnJheSkgXApAQCAtMTQ4LDE0ICsxNTcsNiBA
QCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0g
V1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9P
QkpFQ1RfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdPYmplY3Qp
IFwKIAotI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyht
YWNybykgXAotICAgIG1hY3JvKE9wQ2FsbCkgXAotICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKLSAg
ICBtYWNybyhPcENhbGxFdmFsKSBcCi0gICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwKLSAgICBtYWNy
byhPcEl0ZXJhdG9yT3BlbikgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCi0KICNkZWZp
bmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKICAg
ICBtYWNybyhPcEFkZCkgXAogICAgIG1hY3JvKE9wTXVsKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCAwZDE5ZTI3
OTA1NmU1ZjM3ZTc3MWM1YzQ5YTJkYjBlNmMyZDg0OGQ3Li5hYzU3MTI3YmNmODkwNzJiZTAzODQx
NmRhMTM5YjQxZjE2NGFlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTQwMyw3ICs0MDMsNiBAQCB2b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVuc2lnbmVkIG51bUJpbmFy
eUFyaXRoUHJvZmlsZXMsCiAKICNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZBcnJheVByb2Zp
bGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKICAgICAgICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDT1VOVCkKLSAgICAgICAgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ09VTlQpCiAjdW5kZWYgQ09VTlQKICAgICAgICAg
bnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRv
ck5leHQ+KCk7CiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5u
dW1FbnRyaWVzPE9wR2V0QnlJZD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggNDAzOTRhOTQzOTkyOTkzZjU0NWEyYWM2
MmNmNmVkYzA5ZGY1NTVmYS4uMWM1OTA0MmUwZDBjMzgxMWIzYzliZTIxNThjZGM1NGMwMWRiYjgx
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOwogCiB0eXBl
ZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5z
aWduZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQg
VW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKIAogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDVjNzIwNThkY2YyMTk2MGRjZjg1M2Uw
YTkyYzI3ZTg5YTJkNTZiZWUuLjVlMzJkMmQyNGYxYjNlZDg3MGMzMzBmMmVmMjNkODVlNGVjZTQ4
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAK
QEAgLTMxNSw2ICszMTUsMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNv
ZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIGxs
aW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbGlua19jYWxsX3RyYW1w
b2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNl
IGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0
dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9y
ZXR1cm5fdmFsdWU6CiAgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgog
ICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5l
OgpAQCAtMzI1LDYgKzMyOSw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBv
cF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NhbGxfcmV0dXJu
X2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBj
YXNlIG9wX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CkBA
IC0zMzUsNyArMzQxLDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2Nv
bnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5f
c2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Nsb3dfcmV0
dXJuX2xvY2F0aW9uOgotICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKICAg
ICBjYXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNl
IG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgpAQCAtMzQzLDggKzM0
OCw5IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQs
IENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3By
b2xvZ3VlOgogICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CiAgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NhbGw6Ci0gICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxf
Y2FsbDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2Nv
bnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0
OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgogICAgIGNhc2UganNf
dHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggYjQ1MWNkYjYxZjdhMTFi
MzMwMmMxODVjNjZiZmYxN2E5ZmRiZTA5Zi4uZTcyMmY5ZWJkYWNjODkzNjkwNjU2ZDViNjNlOWY2
MjQ0NDYxNWY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxv
Y2sqIGJhc2VsaW5lQ28KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJ
TlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KTsKKyAgICAgICAgICAgIGp1
bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFy
YXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3Bf
Y29uc3RydWN0X3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRf
UkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDogewogICAgICAgICAg
ICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX2dldF9ieV9pZCkKQEAgLTIw
MSwxMCArMjAxLDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAgICAgICAgIGNhc2UgSW5s
aW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpD
YWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFy
Z3M6IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAg
ICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IG51bGxwdHI7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9s
b2NrKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8gPSBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGNhbGxCeXRl
Y29kZUluZGV4KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bGxMaW5rSW5mbyk7Ci0KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmRv
bmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggNTIzOWI4YTQ0OTQwNzU4NTk2ODcxZmQyN2VhMjVl
MWE0NzQwYTE3NC4uNWRkYjE2MDM1ZDRiMGE1N2RkNWU4OWNhMWM5OTNkZjU1Njc1NmJmMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCkBAIC04NDcsMTAgKzg0NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVD
YWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW5mby0+
ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBpbmZv
LT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4o
WyZdewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0p
KTsKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFi
ZWwoKTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OwpAQCAtODkyLDcgKzg5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAo
aXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgc2NvcGVkTGFt
YmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwp
IHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWls
Q2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAg
ICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZhc3RQYXRoKG1faml0LCBj
YWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6
Tm8pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAppbmRleCBiM2ExMmJiNjgzNjc1NWNiN2UzNTFhYjAzOTBmODcwZDI1NzM3MDFjLi41
NjZmN2Q1ZTk5ZGYwMDk0MWMyMmJjYmFlNDU3ODhmNzAyNmUyOWI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTkzNywxMCAr
OTM3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwogICAg
ICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAKLSAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsm
XSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKQEAgLTk4
MCw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQog
ICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1Rh
aWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIHNjb3BlZExhbWJk
YTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7
CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZm
bGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTg4LDcgKzk4OCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0p
KTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0RmFz
dFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDAz
NmEyZTI0ODM4YTJiZTE1NDMxZDhmOGU1MmJjODhiYzY5YWYyNzYuLjI3ZmMxZmM5YTNlZDU2MDAy
OWQ4OWNlYjM5NGRlYzYxYTg4NGYyYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTEwMzk5LDEwICsxMDM5OSwxMCBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRl
eC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSkpOwotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5l
bWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChqaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDU1NSwxMCArMTA1NTUsMTAg
QEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRDYWxsTGlua0luZm8o
Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAg
YXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBH
UFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2Fs
bExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29w
ZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwot
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAg
ICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0
YXJ0ID0gaml0LmxhYmVsKCk7CkBAIC0xMDg5OCwxMCArMTA4OTgsMTAgQEAgSUdOT1JFX0NMQU5H
X1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgp
PihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3co
KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJS
ZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRv
bmUgPSBqaXQuanVtcCgpOwpAQCAtMTExNzksMTAgKzExMTc5LDEwIEBAIElHTk9SRV9DTEFOR19X
QVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBb
Jl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4o
WyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25l
ID0gaml0Lmp1bXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAppbmRleCBjOGNiYmVlMDZiZjdkNjY2MmMxOWE0YTRhOGExOGMyMWNlZmQzZjcyLi5l
NjQ1ODUzMWViYzkwNGRlNWRkMDRjZTNhYmE1M2M1YmQzYzcwYjBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC03NDUsMTggKzc0NSwxOCBA
QCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0
dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5m
byogaW5mbykKIHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5m
bzo6cmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qo
dm0sIGluZm8pOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIp
OworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIEdQUklu
Zm86OnJlZ1QyLCBpbmZvLT5jYWxsTW9kZSgpKTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlu
a0luZm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91
dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIENhbGxN
b2RlIGNhbGxNb2RlKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6
cmVnVDIpOworICAgIG1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAg
Q2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKICAgICAg
ICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFzayhbPSwgJnZtXSAoKSB7
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgKmluZm8pOwotICAgICAgICAgICAg
aW5mby0+c2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1
YWxUaHVuaykpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTW9kZSk7
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5j
b2RlKCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCA2NWRkOGVkZWY3NDc5OTZkNWY2ZDhmMTkyNDZlNmFk
OTMzNmQ0NzM4Li5hNDRhYTVjZjk1NGYyYzE2NTQ3OWVjMmRjZDkyM2Q1ZmY0ZjNkMWY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTE3NTIsNyAr
MTc1Miw3IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7
CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsTGlua0luZm8qKTsKLSAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBDYWxsTW9kZSk7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsK
ICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKaW5kZXggMTU4OTYwM2YxNDljMjc2YzM1OWU3
YmIyNmQ2NGY0ZDg1NzI3ZjE1MC4uMzAwM2IwNzM1MDE4OGU1ZjczZmNjOTY3MjBkNmE5ZTc0MWY4
YmNiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENv
ZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCkBA
IC02Miw3ICs2Miw2IEBAIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CiAKICAgICBlbnVtIGNsYXNz
IFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgR2xvYmFsT2JqZWN0LAotICAgICAgICBDYWxsTGlu
a0luZm8sCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAogICAgICAgICBGdW5jdGlvbkRlY2ws
CiAgICAgICAgIEZ1bmN0aW9uRXhwciwKQEAgLTkzLDcgKzkyLDYgQEAgY2xhc3MgQmFzZWxpbmVK
SVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAg
IH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKICAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNU
b0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdl
dCgpOyB9CiAKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAg
IEZpeGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CiAgICAg
Rml4ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZv
czsKICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA5Mjk0MjQ2MDczNDAwOTExYjZjMzU3Yzc4
YTRhMGM2YTc0ZTlhYWQ0Li4yOGFlNmY3NzBkZGFjZDcxYzZmMTgyYzlkMTc5ZmQxY2NlYjhkZmJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMDEsMTIgKzEwMSw5IEBAIHN0ZDo6
dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQ+IEpJVDo6YWRkVW5saW5rCiAgICAgcmV0dXJuIHN0ZDo6dHVwbGUgeyBzdHViSW5mbywgc3R1
YkluZm9JbmRleCB9OwogfQogCi1zdGQ6OnR1cGxlPFVubGlua2VkQ2FsbExpbmtJbmZvKiwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpCitV
bmxpbmtlZENhbGxMaW5rSW5mbyogSklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpCiB7Ci0g
ICAgdm9pZCogdW5saW5rZWRDYWxsTGlua0luZm9JbmRleCA9IGJpdHdpc2VfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PihtX3VubGlua2VkQ2FsbHMuc2l6ZSgpKSk7Ci0gICAgVW5s
aW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSAmbV91bmxpbmtlZENhbGxzLmFsbG9jKCk7Ci0gICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9JbmRleCA9IGFkZFRvQ29uc3Rh
bnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCB1bmxpbmtlZENhbGxM
aW5rSW5mb0luZGV4KTsKLSAgICByZXR1cm4gc3RkOjp0dXBsZSB7IGluZm8sIGNhbGxMaW5rSW5m
b0luZGV4IH07CisgICAgcmV0dXJuICZtX3VubGlua2VkQ2FsbHMuYWxsb2MoKTsKIH0KIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtMTAxMCw3ICsxMDA3LDYgQEAgdm9pZCBKSVQ6OmxpbmsoKQog
ICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRDYWxs
TGlua0luZm8+KG1fdW5saW5rZWRDYWxscy5zaXplKCkpOwogICAgIGlmIChtX2ppdENvZGUtPm1f
dW5saW5rZWRDYWxscy5zaXplKCkpCiAgICAgICAgIHN0ZDo6bW92ZShtX3VubGlua2VkQ2FsbHMu
YmVnaW4oKSwgbV91bmxpbmtlZENhbGxzLmVuZCgpLCBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxs
cy5iZWdpbigpKTsKLSAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3Zl
KG1fZXZhbENhbGxMaW5rSW5mb3MpOwogICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZv
cyA9IEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+KG1fdW5saW5rZWRTdHVi
SW5mb3Muc2l6ZSgpKTsKICAgICBpZiAobV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLnNp
emUoKSkKICAgICAgICAgc3RkOjptb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MuYmVnaW4oKSwgbV91
bmxpbmtlZFN0dWJJbmZvcy5lbmQoKSwgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLmJl
Z2luKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggZGUyYzVjZTc3MGJiZDU5M2I3YWU1
ZmQxYTY1MjY3Mzg5NDNkZDlhMS4uNjdiNDNkOGZhMzBiNzJjYmQ0OTQ0NjIyOGM2NDI5NjRmM2Qz
MzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0xNTMsNyArMTUzLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87Ci0gICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMjk0LDE2ICsyOTMsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAg
ICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAgICAsIHZvaWQ+IGNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0g
b3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwog
ICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9w
OjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7Cisg
ICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0lu
Zm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAg
ICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzA2LDYgKzcwNSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJ
Q1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7
CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihWTSYpOworCisgICAgcHJp
dmF0ZToKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2Vu
ZXJhdG9ycy4KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTcy
MSw3ICs3MjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJh
dG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0
b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKQpAQCAtOTU4LDcgKzk2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQ
b29sOjpUeXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cik7CiAgICAgICAgIHN0ZDo6dHVwbGU8
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IGFk
ZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKLSAgICAgICAgc3RkOjp0dXBsZTxVbmxpbmtl
ZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkQ2Fs
bExpbmtJbmZvKCk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBhZGRVbmxpbmtlZENh
bGxMaW5rSW5mbygpOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBA
IC0xMDI5LDcgKzEwMzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBWZWN0b3I8SklU
Q29uc3RhbnRQb29sOjpWYWx1ZT4gbV9jb25zdGFudFBvb2w7CiAgICAgICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxD
YWxsTGlua0luZm9zOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0lu
Zm8+IG1fdW5saW5rZWRDYWxsczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CiAgICAgICAgIEZpeGVkVmVjdG9y
PFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZlMTAyYjVkZmJmYTJiZTRmZTE3MzE5
N2UyYi4uODE1MWZmZGU2YTlmMmViMGMzMjQ3NWQ1YmZkZGFhZWRhMTAwMDM4MCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01OSwxNyArNTksMjEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
Ly8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIgKHJldHVyblZhbHVlR1BSMi9y
ZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwotCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci0j
ZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgorICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCku
Z2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpyZXR1cm5Gcm9tQmFzZWxp
bmVHZW5lcmF0b3IoVk0mKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQuY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZl
c0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsK
KworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIp
OworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC04NCw3ICs4OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwpAQCAtOTcsNyArMTAx
LDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1
ZGluZ1RoaXMoMCkpLCB0bXBKU1IpOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENl
bGwodG1wSlNSKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3ModG1wSlNSLnBheWxvYWRHUFIoKSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdG1wR1BSKTsKLSAgICAgICAgc3RvcmUzMlRv
TWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxs
TGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsg
QXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0
b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNl
dE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtMTEwLDcgKzEx
NCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFy
YXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvQ29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkK
IHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpA
QCAtMTYwLDcgKzE2NCw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mCiAKICAgICAvLyBQcm9m
aWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUNSwgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkQ29uc3Rh
bnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8o
KSwgcmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNl
dE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsKICAgICBKdW1wIG5v
dEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBzdG9yZTMyKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSkpOwpAQCAtMjAzLDY0ICsyMDcsNTkgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwotCiAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKIAogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IAogICAgIGxvYWRWYWx1ZShBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVn
aXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSwgY2FsbGVlSlNSKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBlbWl0Vmly
dHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BDYWxsRXZhbDo6TWV0YWRhdGE6Om9mZnNldE9m
Q2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgY2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZTo6
UmVndWxhcik7CiAgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNv
ZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENh
bGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwm
IGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBV
bmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtl
VW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOwotICAgIHNodWZmbGVEYXRhLT5udW1QYXNz
ZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJz
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcFRhaWxDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlu
a0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5
bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKKyAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGEgeyB9OworICAgICAgICBzaHVm
ZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVy
ID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgICAgIHNodWZmbGVEYXRhLm51bWJl
clRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CiAjZW5kaWYKLSAgICBz
aHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KLSAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS0+
YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0g
PQotICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5
dGVjb2RlLm1fYXJndiwKLSAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwotICAgIH0KKyAg
ICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICAgICAgICAgIGJ5dGVjb2RlLm1fYXJn
diAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgeworICAgICAgICAgICAg
c2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAg
ICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5
bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBW
YWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMp
OwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFs
dWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBheWxvYWRH
UFIoKSk7CisgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFp
cihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOwogI2VuZGlmCi0g
ICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKLSAgICBsb2FkQ29uc3RhbnQoY2Fs
bExpbmtJbmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgSnVtcExpc3Qgc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2Fs
bGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0gewotICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURhdGEgfTsKKyAgICAgICAg
c2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsIHNodWZmbGVEYXRhIH07CiAgICAgICAgIHNodWZm
bGVyLmxvY2tHUFIoY2FsbExpbmtJbmZvR1BSKTsKICAgICAgICAgc2h1ZmZsZXIucHJlcGFyZUZv
clRhaWxDYWxsKCk7Ci0gICAgfSk7CisgICAgfSkpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
cyk7CiAKLSAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKLSAgICBpbmZvLT5mcmFtZVNo
dWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7Ci0KICAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yODgsMTcgKzI4NywxNCBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgICovCiAKICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZv
Q29uc3RhbnQgPSBVSU5UX01BWDsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7
Ci0gICAgICAgIHN0ZDo6dGllKGluZm8sIGluZm9Db25zdGFudCkgPSBhZGRVbmxpbmtlZENhbGxM
aW5rSW5mbygpOworICAgICAgICBpbmZvID0gYWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsKICAg
ICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgaW5m
by0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKICAgICAg
ICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5k
ZXgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlv
bkluZm8oKSk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOwotICAgICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0
YW50OwogICAgIH0KLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50
KTsKKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSk7CiAKICAgICAvLyBTUCBob2xkcyBu
ZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3Vu
dCBpbml0aWFsaXplZC4KICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwpAQCAtMzE2LDE2ICszMTIsMTYgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmQKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoY2FsbGVlSlNS
KSk7CiAjZW5kaWYKIAotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNh
bGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwo
Ynl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKLSAgICBsb2FkQ29u
c3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5r
SW5mbygpLCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
IHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9H
UFIsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFp
bENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExp
bmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KGNh
bGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAgICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRocyk7CiAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
ICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9j
YXRpb24gPSBkb25lTG9jYXRpb247CkBAIC0zNDQsMTUgKzM0MCwxNiBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
K3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCkK
IHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9j
YWxsX2V2YWwpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOwotICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNl
dE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CkBAIC0zNjYsNyArMzYzLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUKIAog
ICAgIHJlc2V0U1AoKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0NTg3ODAzYzI2MThjNjgwMzk4MzZj
ZWU2YzdiMzRmZDJjMzA0Li4yZmUyM2M0OWZkMGY5NDA5MWY2ODYwNWI3NTdhZTJjZTMyMjAxNGEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTM3MCwyMSAr
MzcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQotewotICAgIEND
YWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
LSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1
bmspOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOwotfQotI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggY2FmNDdmYTU0M2M4NDJlMjcwZjFjZDI1
MTg3ZjQ1NDE1Y2JkZmUzOC4uZDFlNTMyYzVlZjQwMzk0NGFiM2MxOWY3NGRjNTQ2OGJjZjYzNGFm
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0x
NDY0LDcgKzE0NjQsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZQogICAgICAgICAgICAgRGlz
YWxsb3dHQyBkaXNhbGxvd0dDOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVz
cygpLAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgICAgICB9
CiAKQEAgLTE0NzYsNyArMTQ3Niw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxl
SG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lCiAgICAgICAg
IEFTU0VSVChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJy
b3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgK
LSAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVz
cygpLAorICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAKQEAgLTE0OTIsNyArMTQ5Miw3IEBA
IHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lCiAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsK
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElU
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKICAgICAgICAgfQogCkBAIC0xNTAyLDExICsxNTAyLDExIEBAIHN0YXRpYyBTbG93UGF0aFJl
dHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lCiAgICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6
Tm9uZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90
QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAotICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKKyAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvKSkKK1Nsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZy
YW1lKCk7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMTU0OSw3ICsxNTQ5
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0
aFJldHVyblR5cGUsIChDYWxsRnJhbWUqIGNhbGwKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKIAogICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgp
IHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1Rhcmdl
dCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1Rh
cmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH07
CiAKQEAgLTE1ODEsNyArMTU4MSwxMiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbAogICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwg
PyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9CiAKLWlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywg
SlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvKSkKK3sKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwgZ2xvYmFsT2JqZWN0
LCBjYWxsTGlua0luZm8pOworfQorCitTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZy
YW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlv
bkNlbGwpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVy
RnJhbWUoKTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0xNjA4LDcgKzE2
MTMsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0g
KCkgewotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFy
Z2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93
VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAg
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCA0YjVk
MDExZjkwNmEzMDMyZTJhNWI4NTBhM2EwYjlhNGM2ODM0YmYzLi4yMDA3YjU1MWQ1NmYwN2RhYjc5
OTEzOTIzZjg0NjU2MDQ1YzJmMGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaApAQCAtMzMyLDYgKzMzMiw5IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE5vT3B0aW1pemUsIEVuY29kZWRKU1ZhbHVlLCAoCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2cs
IHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHJvY2Vz
c1NoYWRvd0NoaWNrZW5Mb2csIHZvaWQsIChWTSopKTsKIAorU2xvd1BhdGhSZXR1cm5UeXBlIGxp
bmtGb3IoQ2FsbEZyYW1lKiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKK1Nsb3dQ
YXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiwgQ2FsbExpbmtJbmZvKiwgSlNDZWxsKiYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAppbmRleCAzNDRjOTUzMTIzYjNkNDNkNjlmNjY5YTM5NGJhNTA4Y2MyNWE2ZWUzLi5hNDI5ZWU2
NDk5OWJhMThiMGQ0MGRkMDk2NjUyODBiODU0ZWVjMDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKQEAgLTE0NDcsOSArMTQ0Nyw4IEBAIHN0YXRpYyB2b2lkIGxpbmtTbG93
UGF0aFRvKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9y
IGdlCiAKIHN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1
bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTGlua0luZm8uY2FsbE1vZGUoKSk7CiAgICAg
bGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxs
TGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZp
cnR1YWxUaHVuaykpOwogfQogCiBzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2Vs
bCogY2FsbGVlKQpAQCAtMTU0NSw3ICsxNTQ0LDYgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChW
TSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYK
ICAgICB9CiAgICAgY2FsbExpbmtJbmZvLmNsZWFyU2VlbigpOwogICAgIGNhbGxMaW5rSW5mby5j
bGVhclN0dWIoKTsKLSAgICBjYWxsTGlua0luZm8uY2xlYXJTbG93U3R1YigpOwogICAgIGlmIChj
YWxsTGlua0luZm8uaXNPbkxpc3QoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwog
fQpAQCAtMTU1NCw3ICsxNTUyLDcgQEAgdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlu
a0luZm8pKTsKICAgICAKLSAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KCkpOworICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0Nh
bGwoKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKQpAQCAtMTU2NSw5ICsxNTYzLDggQEAgc3RhdGljIHZvaWQgbGlua1Zp
cnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0kKICAgICBkYXRhTG9nTG5JZihzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29k
ZUJsb2NrKSwKICAgICAgICAgIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3Jp
Z2luKGNhbGxlckNvZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsg
PSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0
dWFsQ2FsbChjYWxsTGlua0luZm8uY2FsbE1vZGUoKSk7CiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2Fs
bExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihH
Q0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7CiAgICAgY2Fs
bExpbmtJbmZvLnNldENsZWFyZWRCeVZpcnR1YWwoKTsKIH0KIApAQCAtMTgwMyw4ICsxODAwLDEw
IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgY2FsbHNbY2FzZUluZGV4XS5jb2RlUHRyID0gY29kZVB0cjsKLSAgICAgICAgaWYgKG5l
ZWRzRG9uZUp1bXApCisgICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKSB7CisgICAgICAgICAgICBB
U1NFUlQoIWlzRGF0YUlDKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgp
KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsK
QEAgLTE4MjgsMTUgKzE4MjcsMjEgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICB9CiAg
ICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3Qp
LCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGlmIChpc0RhdGFJ
QyAmJiAhY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAgICAvLyBXZSB3ZXJlIGNh
bGxlZCBmcm9tIHRoZSBmYXN0IHBhdGgsIGdldCByaWQgb2YgYW55IHJlbW5hbnRzIG9mIHRoYXQK
LSAgICAgICAgLy8gd2hpY2ggbWF5IGV4aXN0LiBUaGlzIHJlYWxseSBvbmx5IG1hdHRlcnMgZm9y
IHg4Niwgd2hpY2ggYWRqdXN0cwotICAgICAgICAvLyBTUCBmb3IgY2FsbHMuCi0gICAgICAgIHN0
dWJKaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Q0KTsKKwor
ICAgIC8vIDEuIElmIGl0IGlzIG5vdCBEYXRhSUMsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRp
bmcgdGhlIGRvbmVMb2NhdGlvbi4KKyAgICAvLyAyLiBJZiBpdCBpcyB0YWlsLWNhbGwsIGxpbmtS
ZWdpc3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbiBmb3Igc2xvdy1jYWxsIGNh
c2UuCisgICAgLy8gVGh1cyB3ZSBuZWVkIHRvIHB1dCBpdCBmb3IgdGhlIHNsb3ctcGF0aCBjYWxs
LgorICAgIGlmICghaXNEYXRhSUMpIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVj
dXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICBzdHViSml0LnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQoaXNEYXRhSUMpOworICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlz
VGFpbENhbGwoKSkgeworICAgICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih2bS5nZXRDVElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9y
KS5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwor
ICAgICAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJ
bmZvOjpyZWdUNCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRF
eGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwotICAgIAotICAgIHN0dWJKaXQu
cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworCiAgICAg
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAgICAgICAgCiAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0xODU4LDggKzE4
NjMsMTAgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICNlbmRpZgogICAgIH0KIAotICAgIGlm
ICghZG9uZS5lbXB0eSgpKQorICAgIGlmICghZG9uZS5lbXB0eSgpKSB7CisgICAgICAgIEFTU0VS
VCghaXNEYXRhSUMpOwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5m
by5kb25lTG9jYXRpb24oKSk7CisgICAgfQogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua1BvbHltb3Jw
aGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAKICAgICBhdXRvIHN0dWJSb3V0
aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCAyOTcxNDdlMWM0
YzA4ZGNjZDVmN2I3ODY0MTFkODU1YjJhMWRlNDdjLi5kYmQ1YWJkMzc4OGQ3MWI4MDMwNWJiODUx
ZmJjYzI3MTNlODdiMDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCkBAIC0zNDQsNDggKzM0NCwyNSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbChWTSYgdm0p
CiAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlJlZ3VsYXIsIENvZGVG
b3JDYWxsKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdmlydHVhbFRodW5rRm9yUmVndWxhckNvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAgcmV0dXJu
IHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlJlZ3VsYXIsIENvZGVGb3JDb25zdHJ1Y3Qp
OwotfQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0
dWFsVGh1bmtGb3JUYWlsQ2FsbChWTSYgdm0pCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zv
cih2bSwgQ2FsbE1vZGU6OlRhaWwsIENvZGVGb3JDYWxsKTsKIH0KIAotc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVj
dChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlRh
aWwsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsKFZNJiB2bSkKLXsK
LSAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6Q29uc3RydWN0LCBDb2Rl
Rm9yQ2FsbCk7Ci19Ci0KIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENvbnN0cnVjdChWTSYgdm0pCiB7CiAgICAgcmV0
dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNvbnN0
cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4g
dmlydHVhbFRodW5rRm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihW
TSYgdm0sIENhbGxNb2RlIGNhbGxNb2RlKQogewotICAgIGF1dG8gbW9kZSA9IGNhbGxMaW5rSW5m
by5jYWxsTW9kZSgpOwotICAgIGF1dG8ga2luZCA9IGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlv
bktpbmQoKTsKICAgICBhdXRvIGdlbmVyYXRvciA9IFsmXSAoKSAtPiBUaHVua0dlbmVyYXRvciB7
Ci0gICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7CiAg
ICAgICAgIGNhc2UgQ2FsbE1vZGU6OlJlZ3VsYXI6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBD
b2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxh
ckNhbGw7Ci0gICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNvbnN0cnVj
dDsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKICAgICAg
ICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoKLSAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKQotICAgICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsKLSAg
ICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0OworICAgICAgICAg
ICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclRhaWxDYWxsOwogICAgICAgICBjYXNlIENhbGxNb2Rl
OjpDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbDsKICAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDb25zdHJ1Y3Q7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IDBmOWY2ZTJkMzZmNmRkMjNlMTg3MjZh
Y2U2MzE0YTMwYTIwMWRiY2UuLmFiN2NmNjZjNDIxNTFlZTAxOTU4YzFhYjIyZjI5ZmNkOGRkNzAx
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAt
NDksNyArNDksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dl
bmVyYXRvcihWTSYpOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHZpcnR1YWxUaHVua0ZvcihWTSYsIENhbGxMaW5rSW5mbyYpOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mLCBDYWxsTW9k
ZSk7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ2FsbEdl
bmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRp
dmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAKaW5kZXggZThkYWZmN2Q4OGIzMGM2YmY4NDcyMzE0YmUyZjFjNzk2MGYyNDdm
NS4uZDBiMzczODkyMWE0ZjAwMTUxMmU3ZGVlM2E4NDQzYzUxOTNiZDI2YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKQEAgLTU4LDYgKzU4LDcgQEAgZXh0ZXJu
ICJDIiB2b2lkIHdhc21fZW50cnkodm9pZCosIHZvaWQqLCB2b2lkKik7CiBleHRlcm4gIkMiIHZv
aWQgdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQg
dGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCB0YWlsQ2Fs
bEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUodm9pZCk7CitleHRlcm4gIkMiIHZvaWQgdGFpbENh
bGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCBl
eGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCByZXR1cm5G
cm9tTExJbnRUcmFtcG9saW5lKHZvaWQpOwogI2VuZGlmCkBAIC0xNTMsNyArMTU0LDcgQEAgdm9p
ZCBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAg
ICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3Ry
dWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnKSk7CisgICAgICAgICAgICBjb2Rl
UmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwogICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
Ojp0YWlsQ2FsbEpTRW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKQEAgLTE2MSwxMSArMTYyLDE5IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAg
ewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6
dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdh
dGUoSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVj
dChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4oJnRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJhbXBvbGluZSkpKSk7CiAgICAgICAg
IGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRh
aWxDYWxsSlNFbnRyeVNsb3dQYXRoUHRyVGFnKV0gPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOwogICAgIH0KKyAgICB7CisgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNv
ZGVSZWY7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgICAgIGNvZGVS
ZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCBmYWxzZSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xp
bmUpKSkpOworICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVu
c2lnbmVkPihHYXRlOjp0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcpXT0gY29kZVJl
Zi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB9CiAgICAgewogICAgICAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRl
eCA0OTRlZjc2MWUzMjc5MjNmMTQyMDJmYThjNGUxY2QzMTI4NDIwYzY0Li5kMWJlZmQwMmQ1YTQ3
MTQ2Y2MyMmI5ZGFjNWUzNmE4ODhlZGNkYTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTU4Miw2ICs1ODIsMTcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc3RhY2tfY2hlY2spCiAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbEZy
YW1lKTsKIH0KIAorZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxs
KENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCB2b2lkKikKK3sKKyAgICByZXR1cm4gbGlua0Zvcihj
YWxsZWVGcmFtZSwgZ2xvYmFsT2JqZWN0LCBjYWxsTGlua0luZm8pOworfQorCitleHRlcm4gIkMi
IFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF92aXJ0dWFsX2NhbGwoQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8sIHZvaWQqKQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVk
OworICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgY2FsbGVl
RnJhbWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKK30KKwog
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19vYmplY3QpCiB7CiAgICAgTExJTlRf
QkVHSU4oKTsKQEAgLTE4MTksNyArMTgzMCw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUg
aGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsCiAg
ICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAg
ICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUu
ZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUp
OwogICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICAgICAgTExJTlRf
Q0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgTExJbnQ6OmdldEhvc3RDYWxs
UmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50
cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENh
bGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgICAgIExMSU5UX0NBTExf
UkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZh
bHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFn
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2xvd1BhdGhMb2coIkNhbGwgY2FsbGVl
IGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIpOwpAQCAtMTgzOCw3ICsxODUwLDgg
QEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNh
bGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxl
ZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9i
YWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dH
QzsKLSAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwg
TExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNh
bGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgICAgICBM
TElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6Z2V0SG9zdENh
bGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNF
bnRyeVB0clRhZyk7CiAgICAgfQogICAgIAogICAgIHNsb3dQYXRoTG9nKCJDb25zdHJ1Y3RvciBj
YWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwgIlxuIik7CkBAIC0xODQ3LDcgKzE4
NjAsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgIExMSU5UX0NBTExfVEhST1coZ2xv
YmFsT2JqZWN0LCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxl
ZSkpOwogfQogCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFsdWUgY2FsbGVl
QXNWYWx1ZSwgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxwdHIpCitpbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSkKIHsKICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAg
IENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKQEAg
LTE4NjIsMTQgKzE4NzUsOSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaQogICAgICAgICBpZiAo
YXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+
KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotCi0gICAgICAg
ICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8pIHsKLSAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNhbGxlckNv
ZGVCbG9jaywgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7Ci0gICAgICAgICAgICB9Ci0KICAg
ICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRy
VGFnKTsKKyAgICAgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVS
TihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpT
RW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkp
OwogICAgIH0KQEAgLTE5MDQsNzQgKzE5MTIsOSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaQog
ICAgIH0KIAogICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgIAotICAgIGlmICghTExJTlRfQUxX
QVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgY2FsbExpbmtJ
bmZvLT5saW5rKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0gICAgICAg
IGlmIChjb2RlQmxvY2spCi0gICAgICAgICAgICBjb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwo
Y2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgIH0KLQogICAgIGFzc2VydElzVGFnZ2VkV2l0
aDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIExMSU5U
X0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIE9wJiYgYnl0ZWNvZGUsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4ID0gMCkKLXsKLSAgICAvLyBUaGlz
IG5lZWRzIHRvOgotICAgIC8vIC0gU2V0IHVwIGEgY2FsbCBmcmFtZS4KLSAgICAvLyAtIEZpZ3Vy
ZSBvdXQgd2hhdCB0byBjYWxsIGFuZCBjb21waWxlIGl0IGlmIG5lY2Vzc2FyeS4KLSAgICAvLyAt
IElmIHBvc3NpYmxlLCBsaW5rIHRoZSBjYWxsJ3MgaW5saW5lIGNhY2hlLgotICAgIC8vIC0gUmV0
dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3MgdG8gY2FsbCBhbmQgdGhlIG5ldyBj
YWxsIGZyYW1lLgotICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9wZXJhbmQo
Y2FsbEZyYW1lLCBjYWxsZWVGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCkpOwotICAgIAot
ICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsRnJhbWUgLSBzdGFja09mZnNldEluUmVn
aXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludEluZGV4KTsKLSAgICAKLSAgICBjYWxs
ZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCkpOwotICAgIGNhbGxlZUZyYW1l
LT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNh
bGxlZUFzVmFsdWU7Ci0gICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7
Ci0gICAgCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OwotICAgIHJldHVybiBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUs
ICZjYWxsTGlua0luZm9Gb3IobWV0YWRhdGEsIGNoZWNrcG9pbnRJbmRleCkpOwotfQotCi1MTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTl9OT19T
RVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBj
LT5hczxPcENhbGw+KCksIENvZGVGb3JDYWxsKSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF90YWlsX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BUYWls
Q2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2NvbnN0cnVjdCkKLXsKLSAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcENvbnN0cnVjdD4o
KSwgQ29kZUZvckNvbnN0cnVjdCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfaXRlcmF0b3Jfb3Blbl9jYWxsKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcEl0ZXJhdG9yT3Bl
bj4oKSwgQ29kZUZvckNhbGwsIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsKSk7Ci19Ci0KLUxM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwpCi17Ci0gICAg
TExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxG
cmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JOZXh0PigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRvck5l
eHQ6OmNvbXB1dGVOZXh0KSk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENh
bGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihn
bG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50
cnlQdHJUYWcpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2l6ZV9mcmFt
ZV9mb3JfdmFyYXJncykKQEAgLTIwNDMsOCArMTk4Niw4IEBAIGVudW0gY2xhc3MgU2V0QXJndW1l
bnRzV2l0aCB7CiAgICAgQ3VycmVudEFyZ3VtZW50cwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQsIFNldEFyZ3VtZW50c1dpdGggc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgT3AsIFNldEFyZ3Vt
ZW50c1dpdGggc2V0PgoraW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCkKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKIApAQCAtMjA1MywxMSAr
MTk5NiwxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgLy8gLSBSZXR1cm4gYSB0dXBs
ZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUu
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wPigpOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICBKU1ZhbHVlIGNhbGxlZUFzVmFs
dWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpOwogCiAgICAgQ2Fs
bEZyYW1lKiBjYWxsZWVGcmFtZSA9IHZtLm5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwotCi0gICAg
aWYgKHNldCA9PSBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpIHsKKyAgICB1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZtLnZhcmFyZ3NMZW5ndGggKyAxOworICAgIGlmIGNv
bnN0ZXhwciAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCkgewogICAgICAgICBzZXR1
cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxlZUZy
YW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBnZXRPcGVy
YW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9hcmd1bWVudHMpLCBieXRlY29kZS5tX2ZpcnN0VmFy
QXJnLCB2bS52YXJhcmdzTGVuZ3RoKTsKICAgICAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJ
T04oZ2xvYmFsT2JqZWN0KTsKICAgICB9IGVsc2UKQEAgLTIwNjcsMjcgKzIwMTEsMzAgQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IEluc3RydWN0aW9uKgogICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2Fs
bEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKKyAg
ICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby51cGRhdGVNYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisKKyAgICBhdXRvKiBjYWxsZXJTUCA9
IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgIExM
SU5UX1JFVFVSTl9UV08ocGMsIGNhbGxlclNQKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NhbGxfdmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ2Fs
bFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpP
YmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncywgU2V0QXJndW1l
bnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncykKIHsKLSAgICByZXR1
cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9y
Q2FsbCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVw
PE9wVGFpbENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwg
cGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9w
VGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCwgU2V0
QXJndW1lbnRzV2l0aDo6Q3VycmVudEFyZ3VtZW50cyk7CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1
cDxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgU2V0QXJndW1lbnRzV2l0aDo6Q3VycmVudEFy
Z3VtZW50cz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHZhcmFy
Z3NTZXR1cDxPcENvbnN0cnVjdFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDb25zdHJ1
Y3QsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxP
cENvbnN0cnVjdFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBw
YywgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29t
bW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJldHVyblBvaW50KQpAQCAtMjEx
MCw3ICsyMDU3LDggQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24KICAgICAKICAgICB2bS5lbmNv
ZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmVuY29kZShldmFsKGdsb2JhbE9iamVj
dCwgY2FsbGVlRnJhbWUsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFt
ZSwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgIGF1dG8qIGNhbGxlclNQID0gY2Fs
bGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRf
Q0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0
dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQ
dHJUYWcpOwogfQogICAgIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZh
bCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKaW5kZXgg
ZTIwYTBkZmM2Yjg3YWNkNjIyNjhlODhhYTZhYTk2NGZiNmUwOWI2Ni4uMjQxZDMzNGFhMWQwYjc5
YTFiNTIwMTk4M2M3YjE1YWEwNjVjZTFiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmgKQEAgLTM4LDYgKzM4LDggQEAgbmFtZXNwYWNlIExMSW50IHsK
IAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhY2Vfb3BlcmFuZChDYWxs
RnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIGludCBvcGVyYW5kKSBS
RUZFUkVOQ0VEX0ZST01fQVNNOwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
dHJhY2VfdmFsdWUoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJl
LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgUkVGRVJFTkNFRF9GUk9NX0FTTTsKK2V4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X2xpbmtfY2FsbChDYWxsRnJhbWUqLCBKU0dsb2Jh
bE9iamVjdCosIENhbGxMaW5rSW5mbyosIHZvaWQqKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIGxsaW50X3ZpcnR1YWxfY2FsbChDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVjdCosIENh
bGxMaW5rSW5mbyosIHZvaWQqKTsKIGV4dGVybiAiQyIgdm9pZCBsbGludF93cml0ZV9iYXJyaWVy
X3Nsb3coQ2FsbEZyYW1lKiwgSlNDZWxsKikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJO
QUw7CiAKICNkZWZpbmUgTExJTlRfU0xPV19QQVRIX0RFQ0wobmFtZSkgXApAQCAtMTE5LDkgKzEy
MSw2IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jX2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X25ld19hc3luY19mdW5jKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
bmV3X2FzeW5jX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfc2V0X2Z1bmN0aW9uX25hbWUpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9jYWxsKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdGFpbF9j
YWxsKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0KTsK
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFy
YXJncyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVf
Zm9yX2ZvcndhcmRfYXJndW1lbnRzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfY2FsbF92YXJhcmdzKTsKQEAgLTEzMSw4ICsxMzAsNiBAQCBMTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUxNik7CiBMTElOVF9TTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbF93aWRlMzIpOwotTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpOwotTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwpOwogTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90ZWFyX29mZl9hcmd1bWVudHMpOwogTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFRodW5rcy5jcHAKaW5kZXggNDYyY2JmYmU0ZTM0NTY4NDVlMDVhYThiYzBj
NDgxMTUzY2JiOGQwYS4uMTYwM2MyYzc4NTRjOTk5YmU5ZTZjNTcwNTMzNmNmZjc0MjcyOTBiMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCkBAIC0zNDYs
OSArMzQ2LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4g
Y3JlYXRlSlNHYXRlVGh1bmsodm9pZCogcG9pbnRlciwgUHQKIHsKICAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCi0gICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDMsIHRhZyk7Ci0gICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpyZWdUMyk7Ci0g
ICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDMsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0
LmNhbGwoR1BSSW5mbzo6cmVnVDUsIHRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpyZWdUNSk7CisgICAgaml0LmZhckp1bXAo
R1BSSW5mbzo6cmVnVDUsIE9wZXJhdGlvblB0clRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpMTEludFRo
dW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnLCAiTExJbnQgJXMgY2FsbCBnYXRlIHRodW5rIiwgbmFtZSk7CkBAIC0zNjYsMTMg
KzM2NiwxNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBj
cmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqIHBvaW50ZXIsCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50ICVzIHdhc20gY2Fs
bCBnYXRlIHRodW5rIiwgbmFtZSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcgdGFnKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0
clRhZyB0YWcsIGJvb2wgdW50YWcpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGpp
dC51bnRhZ1B0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0g
ICAgaml0LnZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOwotICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QwLCB0YWcpOworICAg
IGlmICh1bnRhZykgeworICAgICAgICBqaXQudW50YWdQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIy
LCBBUk02NFJlZ2lzdGVyczo6bHIpOworICAgICAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihB
Uk02NFJlZ2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgfQorICAgIGpp
dC5mYXJKdW1wKEdQUkluZm86OmFyZ3VtZW50R1BSNywgdGFnKTsKIAogICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkxM
SW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVU
b0pJVEdhdGVQdHJUYWcsICJMTEludCB0YWlsIGNhbGwgZ2F0ZSB0aHVuayIpOwpAQCAtNTczLDgg
KzU3NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXR1cm5Mb2Nh
dGlvblRodW5rKE9wY29kZUlEIG9wY29kZUlELCBPcGNvCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX2l0ZXJhdG9yX29wZW4pCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2l0ZXJh
dG9yX25leHQpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdCkKLSAgICBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Nsb3cpCi0gICAgTExJTlRfUkVU
VVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3cpCisgICAgTExJTlRfUkVUVVJO
X0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncykKKyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3Bf
Y29uc3RydWN0X3ZhcmFyZ3MpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV9p
ZCkKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X3ZhbCkKICAgICBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfcHV0X2J5X2lkKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuaAppbmRleCBiODdjNDIwY2JlNDAyYTFmMGNmMDg2ODEwN2I1YWZkNmRiY2Y1
NGFjLi4wNWVjNjAxYzAxNjRjYjk1NGI3M2EyMWM3MzUxZmYwMTBmZWE3MTBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaApAQCAtODgsNyArODgsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBqaXRDYWdlUHRyVGh1bmso
KTsKICNpZiBDUFUoQVJNNjRFKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4gY3JlYXRlSlNHYXRlVGh1bmsodm9pZCosIFB0clRhZywgY29uc3QgY2hhciopOwog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlV2FzbUdh
dGVUaHVuayh2b2lkKiwgUHRyVGFnLCBjb25zdCBjaGFyKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxs
R2F0ZShQdHJUYWcsIGJvb2wpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4gbG9vcE9TUkVudHJ5R2F0ZVRodW5rKCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBlbnRyeU9TUkVudHJ5R2F0ZVRodW5rKCk7CiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiB3YXNtT1NSRW50cnlHYXRlVGh1
bmsoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQppbmRleCBiYjg4YjZmZGIwOTliNDk5YWU2ZmY0ZTgxMDEwMTUwNGRhYTZkNGUz
Li4zYTI1MjMzMDdiNGNkMDBlOTI2MDFkZjYwMGQ3MzViYjRmODk2NzM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC01
NTEsNiArNTUxLDcgQEAgY29uc3QgU3ltYm9sVHlwZSA9IGNvbnN0ZXhwciBTeW1ib2xUeXBlCiBj
b25zdCBPYmplY3RUeXBlID0gY29uc3RleHByIE9iamVjdFR5cGUKIGNvbnN0IEZpbmFsT2JqZWN0
VHlwZSA9IGNvbnN0ZXhwciBGaW5hbE9iamVjdFR5cGUKIGNvbnN0IEpTRnVuY3Rpb25UeXBlID0g
Y29uc3RleHByIEpTRnVuY3Rpb25UeXBlCitjb25zdCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSA9IGNv
bnN0ZXhwciBJbnRlcm5hbEZ1bmN0aW9uVHlwZQogY29uc3QgQXJyYXlUeXBlID0gY29uc3RleHBy
IEFycmF5VHlwZQogY29uc3QgRGVyaXZlZEFycmF5VHlwZSA9IGNvbnN0ZXhwciBEZXJpdmVkQXJy
YXlUeXBlCiBjb25zdCBQcm94eU9iamVjdFR5cGUgPSBjb25zdGV4cHIgUHJveHlPYmplY3RUeXBl
CkBAIC0xMTUxLDI3ICsxMTUyLDI3IEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAgICAgICAg
IGNsb29wQ2FsbEpTRnVuY3Rpb24gY2FsbGVlCiAgICAgZWxzaWYgQVJNNjRFCiAgICAgICAgIG1h
Y3JvIGNhbGxOYXJyb3coKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIg
SlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVO
YW1lJSkgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0
ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3Rl
eHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bj
b2RlTmFtZSUpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBvbGluZV8lb3Bj
b2RlTmFtZSU6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisgICAgICAgICAgICBj
YWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGNhbGxXaWRl
MTYoKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRP
ZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJV93aWRlMTYp
ICogUHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWcgIyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBK
U0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5h
bWUlX3dpZGUxNikgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9saW5lXyVv
cGNvZGVOYW1lJV93aWRlMTY6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisgICAg
ICAgICAgICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3Jv
IGNhbGxXaWRlMzIoKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1l
JV93aWRlMzIpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNv
bnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6
JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10s
IE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFt
cG9saW5lXyVvcGNvZGVOYW1lJV93aWRlMzI6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRy
VGFnCisgICAgICAgICAgICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCi0gICAg
ICAgIG1vdmUgY2FsbGVlLCB0MworICAgICAgICBtb3ZlIGNhbGxlZSwgdDUKICAgICAgICAgc2l6
ZShjYWxsTmFycm93LCBjYWxsV2lkZTE2LCBjYWxsV2lkZTMyLCBtYWNybyAoZ2VuKSBnZW4oKSBl
bmQpCiAgICAgZWxzZQogICAgICAgICBjYWxsIGNhbGxlZSwgY2FsbFB0clRhZwpAQCAtMTIwOSwx
MiArMTIxMCwyMyBAQCBtYWNybyBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaQogICAgIGVuZAogZW5kCiAKLW1h
Y3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRl
bXA0LCBjYWxsUHRyVGFnKQotICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCittYWNy
byBwcmVwYXJlRm9yUmVndWxhckNhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCiBlbmQK
IAotIyBzcCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZQotbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxs
KGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCittYWNybyBp
bnZva2VGb3JSZWd1bGFyQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVl
UHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgbWF5YmVP
bGRDRlIsIGNhbGxQdHJUYWcpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgY2FsbGVlLCBjYWxsUHRyVGFnKQorZW5kCisKKyMgdDUgaXMgbWV0YWRhdGEKK21h
Y3JvIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgY2FsbFB0clRhZykKK2VuZAorCittYWNybyBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKCkK
K2VuZAorCisjIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQ1Np
emUKKyMgV2UgbGVhdmUgY2ZyIHRlbXA0IHRvIHVzZSBpdCBmb3IgdW50YWdnaW5nLgorbWFjcm8g
cHJlcGFyZUZvclRhaWxDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQogICAgIHJlc3Rv
cmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50KCkKIAogICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1tjZnJdLCB0ZW1wMgpAQCAtMTIzMiwxOCArMTI0NCwx
NyBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAz
LCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBtb3ZlIGNmciwgdGVtcDEKICAgICBhZGRwIHRlbXAy
LCB0ZW1wMQogCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzW3NwXSwgdGVtcDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZVtzcF0sIHRlbXAyCiAgICAgIyBX
ZSBhc3N1bWUgPCAyXjI4IGFyZ3VtZW50cwogICAgIG11bGkgU2xvdFNpemUsIHRlbXAyCiAgICAg
YWRkaSBTdGFja0FsaWdubWVudCAtIDEgKyBDYWxsRnJhbWVIZWFkZXJTaXplLCB0ZW1wMgogICAg
IGFuZGkgflN0YWNrQWxpZ25tZW50TWFzaywgdGVtcDIKIAogICAgIGlmIEFSTXY3IG9yIEFSTTY0
IG9yIEFSTTY0RSBvciBDX0xPT1Agb3IgQ19MT09QX1dJTiBvciBNSVBTIG9yIFJJU0NWNjQKLSAg
ICAgICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKICAgICAgICAgc3ViaSBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgQ2FsbGVyRnJhbWVBbmRQQzo6cmV0
dXJuUENbY2ZyXSwgbHIKICAgICBlbHNlCi0gICAgICAgIGFkZHAgUHRyU2l6ZSwgc3AKKyAgICAg
ICAgc3VicCBQdHJTaXplLCBzcAogICAgICAgICBzdWJpIFB0clNpemUsIHRlbXAyCiAgICAgICAg
IGxvYWRwIFB0clNpemVbY2ZyXSwgdGVtcDMKICAgICAgICAgc3RvcmVwIHRlbXAzLCBbc3BdCkBA
IC0xMjcwLDkgKzEyODEsMTIgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVt
cDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCiAgICAgZW5kCiAKICAgICBtb3Zl
IHRlbXAxLCBzcAorZW5kCisKK21hY3JvIGludm9rZUZvclRhaWxDYWxsKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKICAgICBpZiBBUk02NEUK
LSAgICAgICAgbW92ZSB0ZW1wNCwgYTIKLSAgICAgICAgbW92ZSBjYWxsZWUsIGEwCisgICAgICAg
IG1vdmUgbWF5YmVPbGRDRlIsIGEyCisgICAgICAgIG1vdmUgY2FsbGVlLCBhNwogICAgICAgICBs
ZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCAr
IChjb25zdGV4cHIgR2F0ZTo6dGFpbENhbGwlY2FsbFB0clRhZyUpICogUHRyU2l6ZSwgYTEKICAg
ICAgICAgam1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjICVjYWxsUHRyVGFnJQogICAg
IGVsc2UKQEAgLTEyODAsNiArMTI5NCwyMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2Fs
bGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBlbmQKIGVu
ZAogCisjIHQ1IGlzIG1ldGFkYXRhCittYWNybyBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2Fs
bChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZp
cnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxQdHJUYWcpCisgICAgaWYgQVJNNjRFCisgICAg
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRh
SUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIGE3CisgICAgICAgIGxlYXAgSlND
Q29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0
ZXhwciBHYXRlOjp0YWlsQ2FsbFdpdGhvdXRVbnRhZyVjYWxsUHRyVGFnJSkgKiBQdHJTaXplLCBh
MQorICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJUYWcl
CisgICAgZWxzZQorICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCBhMQor
ICAgICAgICBqbXAgYTEsIGNhbGxQdHJUYWcKKyAgICBlbmQKK2VuZAorCittYWNybyBwcmVwYXJl
Rm9yU2xvd1RhaWxDYWxsKCkKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCitl
bmQKKwogbWFjcm8gc2xvd1BhdGhGb3JDb21tb25DYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBzbG93UGF0aEZv
ckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBk
aXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogZW5kCkBAIC0xMjkxLDcgKzEzMjEsNyBA
QCBtYWNybyBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dQogICAgICAgICBtYWNybyAoY2FsbGVlLCBjYWxsZWVG
cmFtZVB0cikKICAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250VXBkYXRlU1AK
ICAgICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCi0gICAgICAgICAgICBwcmVwYXJl
Q2FsbChjYWxsZWUsIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpCisgICAg
ICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKICAgICAgICAgLmRvbnRVcGRhdGVT
UDoKICAgICAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6
ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRp
c3BhdGNoLCBjYWxsZWUsIEpTRW50cnlTbG93UGF0aFB0clRhZykKICAgICAgICAgZW5kKQpAQCAt
MTgyMCwxMiArMTg1MCwxNiBAQCBpZiBBUk02NEUKICAgICBnbG9iYWwgX3RhaWxDYWxsSlNFbnRy
eVRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZToKICAgICAgICAgdW50
YWdSZXR1cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwgSlNFbnRyeVB0clRhZworICAgICAg
ICBqbXAgYTcsIEpTRW50cnlQdHJUYWcKIAogICAgIGdsb2JhbCBfdGFpbENhbGxKU0VudHJ5U2xv
d1BhdGhUcmFtcG9saW5lCiAgICAgX3RhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJhbXBvbGluZToK
ICAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwgSlNFbnRyeVNs
b3dQYXRoUHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZworCisgICAgZ2xvYmFs
IF90YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lCisgICAgX3RhaWxDYWxsV2l0
aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmU6CisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRh
ZwogCiAgICAgZ2xvYmFsIF9leGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZQogICAgIF9leGNlcHRp
b25IYW5kbGVyVHJhbXBvbGluZToKQEAgLTIzMjUsMTcgKzIzNTksMTcgQEAgZW5kKQogCiAKICMg
d2UgY2FuJ3QgdXNlIGNhbGxPcCBiZWNhdXNlIHdlIGNhbid0IHBhc3MgYGNhbGxgIGFzIHRoZSBv
cGNvZGUgbmFtZSwgc2luY2UgaXQncyBhbiBpbnN0cnVjdGlvbiBuYW1lCi1jb21tb25DYWxsT3Ao
b3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFy
Q2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY29tbW9uQ2FsbE9wKG9wX2NhbGwsIF9sbGlu
dF9zbG93X3BhdGhfY2FsbCwgT3BDYWxsLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZv
clJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZv
clNsb3dSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogICAgIGFycmF5UHJvZmls
ZUZvckNhbGwoT3BDYWxsLCBnZXR1KQogZW5kKQogCiAKLW1hY3JvIGNhbGxPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKLSAgICBjb21tb25DYWxsT3Aob3BfJW9w
Y29kZU5hbWUlLCBfbGxpbnRfc2xvd19wYXRoXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBw
cmVwYXJlQ2FsbCwgZm4pCittYWNybyBjYWxsT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBw
cmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0Nh
bGwsIGZuKQorICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3Bh
dGhfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBw
cmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCiBlbmQKIAogCi1jYWxsT3Ao
dGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1hY3JvIChnZXR1LCBt
ZXRhZGF0YSkKK2NhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2Fs
bCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVw
YXJlRm9yU2xvd1RhaWxDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJyYXlQcm9m
aWxlRm9yQ2FsbChPcFRhaWxDYWxsLCBnZXR1KQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGls
b2d1ZSgpCiAgICAgIyByZWxvYWQgbWV0YWRhdGEgc2luY2UgY2hlY2tTd2l0Y2hUb0pJVEZvckVw
aWxvZ3VlKCkgbWlnaHQgaGF2ZSB0cmFzaGVkIHQ1CkBAIC0yMzQzLDcgKzIzNzcsNyBAQCBjYWxs
T3AodGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1hY3JvIChnZXR1
LCBtZXRhZGF0YSkKIGVuZCkKIAogCi1jYWxsT3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJl
cGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKK2NhbGxPcChj
b25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJl
Z3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNs
b3dSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAogbWFjcm8gYnJh
bmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQpAQCAtMjM1NCw3ICsyMzg4LDcgQEAgbWFj
cm8gYnJhbmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQogLm5vRXhjZXB0aW9uOiAgICAK
IGVuZAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVj
dCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKK21hY3Jv
IGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgZ2V0LCBvcGNvZGVTdHJ1Y3QsIHZhbHVl
UHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBmcmFt
ZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5
bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsKQogICAgIGNhbGxTbG93UGF0aChmcmFtZVNsb3dQYXRo
KQogICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFt
cG9saW5lKQogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKQEAgLTIzNjksMzIgKzI0MDMsNzAgQEAg
bWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3Bh
dGNoLCBmcmFtZVNsb3dQYXRoLCBzbG8KICAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1l
QW5kUENTaXplLCBzcAogICAgICAgICBlbmQKICAgICBlbmQKLSAgICBzbG93UGF0aEZvckNvbW1v
bkNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgs
IHByZXBhcmVDYWxsKQorICAgIGNhbGxDYWxsU2xvd1BhdGgoCisgICAgICAgIHNsb3dQYXRoLAor
ICAgICAgICAjIFRob3NlIGFyZSByMCBhbmQgcjEKKyAgICAgICAgbWFjcm8gKHJlc3RvcmVkUENP
clRocm93LCBjYWxsZWVGcmFtZVB0cikKKyAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIs
IC5kb250VXBkYXRlU1AKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQorICAg
ICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKKyAgICAgICAgICAgIGdldChtX2NhbGxl
ZSwgdDEpCisgICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkK
KyAgICAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKKworICAgICAgICAgICAgbG9hZHAgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1
XSwgdDEKKyAgICAgICAgICAgIGJ0cHogdDEsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5
bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAgICAgICAgICMgcHJlcGFy
ZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQg
dG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGluZSBzZXBhcmF0ZWx5LgorICAgICAgICAgICAg
IyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhpYyBjYWxsIGNhc2Ug
c2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRodW5rIHNpZGUuCisg
ICAgICAgICAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0Vu
dHJ5UHRyVGFnKQorICAgICAgICAgICAgam1wIC5nb1BvbHltb3JwaGljCisKKyAgICAgICAgLm5v
dFBvbHltb3JwaGljOgorICAgICAgICAgICAgYnFuZXEgdDAsIHQxLCAub3BDYWxsU2xvdworICAg
ICAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKyAgICAgICAgLmdvUG9seW1v
cnBoaWM6CisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQor
ICAgICAgICAgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZh
bHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNF
bnRyeVB0clRhZykKKworICAgICAgICAub3BDYWxsU2xvdzoKKyAgICAgICAgICAgICMgdDAgaXMg
Y2FsbGVlCisgICAgICAgICAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAgICAgICAgICMg
dDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICAgICAgICAgIGFkZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBp
biB0MgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGxv
YWRwIENvZGVCbG9ja1tjZnJdLCB0MworICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ds
b2JhbE9iamVjdFt0M10sIHQzCisgICAgICAgICAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgICAg
ICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1
LCBKU0VudHJ5UHRyVGFnKQorICAgICAgICAuZG9udFVwZGF0ZVNQOgorICAgICAgICAgICAgam1w
IF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCisgICAgICAgIGVuZCkKIGVu
ZAogCiAKLWxsaW50T3Aob3BfY2FsbF92YXJhcmdzLCBPcENhbGxWYXJhcmdzLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6
ZSwgT3BDYWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9m
b3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1
bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfY2FsbF92YXJhcmdzLCBPcENhbGxWYXJh
cmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICBk
b0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcENhbGxWYXJhcmdzLCBt
X3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6
ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9y
cGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKQogZW5kKQogCi1sbGlu
dE9wKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF92YXJhcmdz
LCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIFdlIGxp
ZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0IHNpbmNl
IHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29kZQotICAg
IGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIHNpemUsIE9wVGFpbENhbGxWYXJh
cmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBf
bGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzLCBwcmVwYXJlRm9yVGFpbENhbGwpCisg
ICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcFRhaWxD
YWxsVmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRf
c2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfdGFpbF9j
YWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBh
cmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKQogZW5kKQog
CiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1l
dGFkYXRhKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgT3BUYWlsQ2FsbEZvcndhcmRB
cmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQog
ICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgIyBXZSBsaWUgYW5kIHBlcmZv
cm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmluZyBpdCBzaW5jZSB3ZSBjYW4ndAog
ICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBvcGNvZGUKLSAgICBkb0NhbGxWYXJh
cmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgc2l6ZSwgT3BUYWlsQ2FsbEZvcndh
cmRBcmd1bWVudHMsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX2Zv
cndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cywgcHJlcGFyZUZvclRhaWxDYWxsKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
LCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhf
c2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3BhdGhfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwsIGludm9rZUZvclRhaWxD
YWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFyZUZvclNsb3dUYWlsQ2Fs
bCkKIGVuZCkKIAogCi1sbGludE9wKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENvbnN0cnVjdFZh
cmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZhcmFyZ3Mob3Bf
Y29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIE9wQ29uc3RydWN0VmFyYXJncywgZGlzcGF0Y2gsIF9s
bGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9j
b25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25zdHJ1Y3RWYXJhcmdzLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICBkb0NhbGxWYXJhcmdzKG9w
X2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ29uc3RydWN0VmFyYXJncywgbV9wcm9m
aWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJh
bWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9y
cGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKQogZW5kKQogCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KaW5kZXggOTAzZTVhNDViMWI2NjgyZmQyODc4Yjk3OTQ4NTJhZWZkNjc1MWQ1
ZS4uNmM2ZjUwMzJjMzkzMzNlMjg4M2M2ZWFhMjAyNzM4NjA4NDc2Y2U3YiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20K
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KQEAgLTIxNTEsMTIgKzIxNTEsMTIgQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChv
cGNvZGVTdHJ1Y3QsIGdldHUpCiAgICAgYmluZXEgVGhpc0FyZ3VtZW50T2Zmc2V0ICsgVGFnT2Zm
c2V0W2NmciwgdDMsIDhdLCBDZWxsVGFnLCAuZG9uZQogICAgIGxvYWRpIFRoaXNBcmd1bWVudE9m
ZnNldCArIFBheWxvYWRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgbG9hZGkgSlNDZWxsOjpt
X3N0cnVjdHVyZUlEW3QwXSwgdDAKLSAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlE
W3Q1XQorICAgIHN0b3JlaSB0MCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FycmF5UHJv
ZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCiAuZG9uZToKIGVuZAogCisjIHQ1IGhvbGRz
IG1ldGFkYXRhLgogbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxs
LCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwg
Z2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEodDUsIHQwKQogICAg
IGdldENhbGxlZSh0MCkKIAogICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXRbdDVdLCB0MgpA
QCAtMjE4OCw3ICsyMTg4LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQ
YXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5kLCBt
ZXRhZGF0YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICBnZXQo
bV9jYWxsZWUsIHQwKQorICAgICAgICAgICBnZXQobV9jYWxsZWUsIGRzdCkKICAgICAgICAgZW5k
CiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3QpCkBAIC0yMTk5LDYgKzIxOTks
NyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVj
dCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVT
dHJ1Y3QsIG1fYXJnYywgZHN0KQogICAgICAgICBlbmQKICAgICAgICAgCisgICAgICAgICMgdDUg
aG9sZHMgbWV0YWRhdGEKICAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwg
b3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291
bnQpCiAgICAgZW5kKQogZW5kCkBAIC0yODY2LDYgKzI4NjcsNyBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRlcmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRzdAogICAgIGVuZAogCisgICAgbWV0YWRhdGEodDUs
IHQwKQogICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9p
dGVyYXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9p
dGVyYXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9p
bnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBn
ZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKQEAgLTI5Mjcs
NiArMjkyOSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3BJdGVy
YXRvck5leHQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgZW5kCiAKICAgICAjIFVz
ZSBtX3ZhbHVlIHNsb3QgYXMgYSB0bXAgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHRvIGl0
IGxhdGVyLgorICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9y
X25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9yTmV4
dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBz
aXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3Vt
ZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAog
LmdldERvbmVTdGFydDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggYTkxMzE0ZmNlOWVlNDRjYTZlMGJhYzc4MmQ5
YmUyZjU5YzBhODM3MC4uMWRjYjJkZDg4YzU3Yzk5NzkzYTYyZjMyNTc0MzE1OGNmMmFlNTQwNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KQEAgLTMwOSwxMiArMzA5LDEyIEBAIG1hY3JvIG1ha2VKYXZhU2NyaXB0Q2Fs
bChlbnRyeSwgcHJvdG9DYWxsRnJhbWUsIHRlbXAxLCB0ZW1wMikKICAgICBpZiBDX0xPT1Agb3Ig
Q19MT09QX1dJTgogICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAgZWxzaWYg
QVJNNjRFCi0gICAgICAgIG1vdmUgZW50cnksIHQzCi0gICAgICAgIGxlYXAgSlNDQ29uZmlnICsg
Y29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRl
Ojp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGEyCi0gICAgICAgIGptcCBbYTJdLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisgICAgICAgIG1vdmUgZW50cnks
IHQ1CisgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0ND
b25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0
clNpemUsIGE3CisgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0Vu
dHJ5UHRyVGFnCiAgICAgICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUK
ICAgICAgICAgX3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lOgotICAgICAgICBjYWxsIHQz
LCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGNhbGwgdDUsIEpTRW50cnlQdHJUYWcKICAgICBlbHNl
CiAgICAgICAgIGNhbGwgZW50cnksIEpTRW50cnlQdHJUYWcKICAgICBlbmQKQEAgLTIzNjAsNDEg
KzIzNjAsNTggQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUp
CiAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGJ0cW56
IHQwLCBub3RDZWxsTWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURb
dDBdLCB0MwotICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3Rv
cmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNl
ZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3JvIGNhbGxIZWxwZXIob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotICAg
IG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisjIHQ1IGhvbGRzIG1ldGFkYXRh
LgorbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBpbnZva2VD
YWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKQorICAgIGdldENhbGxlZSh0MSkKIAotICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0
aExpbmtCaXRbdDVdLCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQz
KQotICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQxLCB0MCkKIAorICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lCiAgICAgZ2V0QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAgICAgbmVn
cCB0MwogICAgIGFkZHAgY2ZyLCB0MwotICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgIGdl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKQotICAgIHN0b3JlUEMoKQogICAgIHN0b3Jl
aSB0MiwgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3QzXQorCisg
ICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3VyZSBzcC4K
KyAgICBzdG9yZVBDKCkKKyAgICBzdG9yZXEgdDAsIENhbGxlZVt0M10KICAgICBtb3ZlIHQzLCBz
cAotICAgIGlmIEFSTTY0RQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAgICBwcmVw
YXJlQ2FsbCh0MCwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGxvYWRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRh
cmdldFt0NV0sIHQwCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlz
cGF0Y2gsIHQwLCBKU0VudHJ5UHRyVGFnKQotICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwo
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFy
Z2V0W3Q1XSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJn
ZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5h
bWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQdHJUYWcp
Ci0gICAgZW5kCi0ub3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAgICBhZGRwIENhbGxlckZy
YW1lQW5kUENTaXplLCBzcAorCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDEKKyAgICBidHB6IHQxLCAo
Y29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHlt
b3JwaGljCisgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1cm4g
YWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNlcGFy
YXRlbHkuCisgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhp
YyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRo
dW5rIHNpZGUuCisgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwg
SlNFbnRyeVB0clRhZykKKyAgICBqbXAgLmdvUG9seW1vcnBoaWMKIAotbWFjcm8gY29tbW9uQ2Fs
bE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9s
b2d1ZSkKKy5ub3RQb2x5bW9ycGhpYzoKKyAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93Cisg
ICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgorICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworLm9wQ2FsbFNsb3c6Cisg
ICAgIyB0MCBpcyBjYWxsZWUKKyAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAjIHQzIGlz
IGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICBwcmVwYXJlU2xvd0Nh
bGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNo
LCB0NSwgSlNFbnRyeVB0clRhZykKK2VuZAorCittYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFt
ZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBh
cmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBsbGludE9wV2l0
aE1ldGFkYXRhKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIApAQCAt
MjQwMyw3ICsyNDIwLDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRo
LCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5kLCBtZXRh
ZGF0YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICAgZ2V0KG1f
Y2FsbGVlLCB0MCkKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAgICAgICBlbmQK
IAogICAgICAgICBtYWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTI0MTQsNyArMjQzMSw4
IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0
LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0
cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGNhbGxIZWxwZXIob3Bj
b2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFy
ZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0
YXJ0LCBnZXRBcmd1bWVudENvdW50KQorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRhCisgICAg
ICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9m
aWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywg
cHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0
QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKIApAQCAtMjUz
Myw2ICsyNTUxLDg4IEBAIG9wKGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUsIG1h
Y3JvICgpCiAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCiBl
bmQpCiAKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2Fs
bGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3JvIGxpbmtTbG93UGF0aEZvcihmdW5jdGlvbikKKyAg
ICBmdW5jdGlvblByb2xvZ3VlKCkKKyAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV92bVt0M10s
IHQxCisgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MV0KKyAgICBtb3ZlIHQyLCBh
MgorICAgIG1vdmUgdDMsIGExCisgICAgbW92ZSBjZnIsIGEwCisgICAgY0NhbGw0KGZ1bmN0aW9u
KQorICAgIGZ1bmN0aW9uRXBpbG9ndWUoKQorICAgIHVudGFnUmV0dXJuQWRkcmVzcyBzcAorICAg
IGJ0cHogcjEsIC5kb05vdFRyYXNoCisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KHQxKQorICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0MSwgdDIsIHQzLCB0NCkKKyAgICB1bnRhZ1Jl
dHVybkFkZHJlc3MgdDQKKy5kb05vdFRyYXNoOgorICAgICMgRklYTUU6IFVzZSBpbnZva2VGb3JU
YWlsQ2FsbD8KKyAgICBqbXAgdDAsIEpTRW50cnlQdHJUYWcKK2VuZAorCisjIHQwIGlzIGNhbGxl
ZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0
CittYWNybyB2aXJ0dWFsVGh1bmtGb3Iob2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2ssIGlu
dGVybmFsRnVuY3Rpb25UcmFtcG9saW5lLCBwcmVwYXJlQ2FsbCwgc2xvd0Nhc2UpCisgICAgYWRk
aSAxLCBDYWxsTGlua0luZm86Om1fc2xvd1BhdGhDb3VudFt0Ml0KKyAgICBtb3ZlIE5vdENlbGxN
YXNrLCB0MQorICAgIGJ0cW56IHQwLCB0MSwgc2xvd0Nhc2UKKyAgICBiYm5lcSBKU0NlbGw6Om1f
dHlwZVt0MF0sIEpTRnVuY3Rpb25UeXBlLCAubm90SlNGdW5jdGlvbgorICAgIGxvYWRwIEpTRnVu
Y3Rpb246Om1fZXhlY3V0YWJsZU9yUmFyZURhdGFbdDBdLCB0MQorICAgIGJ0cHogdDEsIChjb25z
dGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCAuaXNFeGVjdXRhYmxlCisgICAgbG9hZHAg
KEZ1bmN0aW9uUmFyZURhdGE6Om1fZXhlY3V0YWJsZSAtIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKVt0MV0sIHQxCisuaXNFeGVjdXRhYmxlOgorICAgIGxvYWRwIG9mZnNldE9m
SklUQ29kZVdpdGhBcml0eUNoZWNrW3QxXSwgdDEKKyAgICBidHB6IHQxLCBzbG93Q2FzZQorLmNh
bGxDb2RlOgorICAgIHByZXBhcmVDYWxsKHQ1LCB0MiwgdDMsIHQ0KQorICAgIGptcCB0MSwgSlNF
bnRyeVB0clRhZworLm5vdEpTRnVuY3Rpb246CisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBd
LCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgc2xvd0Nhc2UKKyAgICBwcmVwYXJlQ2FsbCh0NSwgdDIs
IHQzLCB0NCkKKyAgICBqbXAgaW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmUKK2VuZAorCisjIHQw
IGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xv
YmFsT2JqZWN0CitvcChsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICBs
aW5rU2xvd1BhdGhGb3IoX2xsaW50X2xpbmtfY2FsbCkKK2VuZCkKKworIyB0MCBpcyBjYWxsZWUK
KyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAor
b3AobGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRo
dW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9s
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVt
cDIsIHRlbXAzLCB0ZW1wNCkgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Ns
b3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgdDAgaXMgY2FsbGVlCisj
IHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29w
KGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVh
bFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVjaywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNy
byAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNl
OgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQorCisjIHQw
IGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xv
YmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAo
KQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrLCBfbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBt
YWNybyAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCisgICAgICAgIHByZXNlcnZlUmV0dXJu
QWRkcmVzc0FmdGVyQ2FsbCh0ZW1wMSkKKyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKHRlbXAx
LCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQorICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgdGVtcDQK
KyAgICBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xs
aW50X3ZpcnR1YWxfY2FsbCkKK2VuZCkKIAogbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pCiAgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCkBAIC0zMDQ2
LDggKzMxNDYsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRl
cmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRz
dAogICAgIGVuZAogCi0KLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9z
bG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclBy
b2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5
SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUs
IHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9p
dGVyYXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9p
dGVyYXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJl
cGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGws
IHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQog
CiAuZ2V0QnlJZFN0YXJ0OgogICAgIG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNoKHZhbHVlKQpA
QCAtMzEwNCw3ICszMjA0LDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0
LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAog
ICAgICMgVXNlIG1fdmFsdWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3Jp
dGUgdG8gaXQgbGF0ZXIuCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRf
c2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3Vs
dFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERv
bmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUs
IHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9p
dGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBt
X3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVw
YXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwg
c2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1
bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAK
IC5nZXREb25lU3RhcnQ6CiAgICAgbWFjcm8gc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25l
VmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlQmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2Uu
aAppbmRleCA5NTgxMDVkMzI2NmRkZmY4NWJlNWQ3NmQ4N2NkZTVjYjMzMTMxNGMzLi40OGZkOTJm
OGI2YThlZDI5NDRhNzI0OGIxNTdkMmFmNzI3NzNjNWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKQEAgLTU3LDYgKzU3LDcgQEAgaW5saW5l
IGJvb2wgaXNDYWxsKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIAogY2xhc3MgRXhlY3V0
YWJsZUJhc2UgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0q
KTsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2F0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCmluZGV4IGY2
YTA1YjA2NWUzMmQ4YWVjZDU2N2JmNmFiNzRhYWU2Mzg5OTc3NzguLmU0Nzc5MmI4NzY0ZTkxZDUw
NjEwZTRjZGRhZTMyMzFjMTQ1OWUyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRl
LmgKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihqaXRDYWdlUHRyLCBO
b1B0clRhZykgXAogICAgIHYodGFpbENhbGxKU0VudHJ5UHRyVGFnLCBOb1B0clRhZykgXAogICAg
IHYodGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcsIE5vUHRyVGFnKSBcCisgICAgdih0YWls
Q2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdihsb29wT1NS
RW50cnksIE5vUHRyVGFnKSBcCiAgICAgdihlbnRyeU9TUkVudHJ5LCBOb1B0clRhZykgXAogICAg
IHYod2FzbU9TUkVudHJ5LCBOb1B0clRhZykgXApAQCAtNDYsMjAgKzQ3LDIxIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAjZGVmaW5lIEpTQ19KU19HQVRFX09QQ09ERVModikgXAogICAgIHYob3BfY2Fs
bCwgSlNFbnRyeVB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsLCBKU0VudHJ5UHRyVGFnKSBc
CiAgICAgdihvcF9jb25zdHJ1Y3QsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2l0ZXJhdG9y
X25leHQsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2l0ZXJhdG9yX29wZW4sIEpTRW50cnlQ
dHJUYWcpIFwKLSAgICB2KG9wX2NhbGxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0g
ICAgdihvcF90YWlsX2NhbGxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihv
cF9jb25zdHJ1Y3Rfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jYWxs
X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2Nh
bGxfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAg
ICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAor
ICAgIHYob3BfY2FsbF92YXJhcmdzLCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1
Y3RfdmFyYXJncywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY2FsbF9zbG93LCBKU0VudHJ5
UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAg
IHYob3BfY29uc3RydWN0X3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9y
X25leHRfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfaXRlcmF0b3Jfb3Blbl9zbG93
LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0
clRhZykgXAorICAgIHYob3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykg
XAorICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3csIEpTRW50cnlQdHJU
YWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwK
ICAgICB2KG9wX2NhbGxfZXZhbF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2
KG9wX2l0ZXJhdG9yX25leHRfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihv
cF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXgg
OWNmNWZlYTAxOTg0OWRiNmU2NjA5MTBiYjk0NTFjZDI3YzI1ZmJjNS4uZWM0ODIyZjVhOTAzZDRm
Yjg1Y2I0ODQxYTRjZDY4ZjBjMTBiZmJmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcApAQCAtMTM4LDYgKzEzOCw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgog
I2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVk
ZSAiTExJbnRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiTWluaW11bVJlc2VydmVkWm9uZVNpemUu
aCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUuaCIKQEAgLTkxMCw2ICs5MTEsNDEgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihDb2QKICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUpOwogfQogCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUxpbmtDYWxsKCkKK3sKKyNp
ZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJu
IGdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWQ8SlNF
bnRyeVB0clRhZz4oKTsKKyNlbmRpZgorICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPihsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZSk7Cit9CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoKCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQo
KSkKKyAgICAgICAgcmV0dXJuIGdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlm
CisgICAgcmV0dXJuIExMSW50OjpjYWxsVG9UaHJvdygqdGhpcykudGVtcGxhdGUgcmV0YWdnZWQ8
SlNFbnRyeVB0clRhZz4oKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiBWTTo6Z2V0Q1RJVmlydHVhbENhbGwoQ2FsbE1vZGUgY2FsbE1vZGUpCit7Cisj
aWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVy
biB2aXJ0dWFsVGh1bmtGb3IoKnRoaXMsIGNhbGxNb2RlKTsKKyNlbmRpZgorICAgIHN3aXRjaCAo
Y2FsbE1vZGUpIHsKKyAgICBjYXNlIENhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICByZXR1cm4g
TExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY2Fs
bF90cmFtcG9saW5lKTsKKyAgICBjYXNlIENhbGxNb2RlOjpUYWlsOgorICAgICAgICByZXR1cm4g
TExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfdGFp
bF9jYWxsX3RyYW1wb2xpbmUpOworICAgIGNhc2UgQ2FsbE1vZGU6OkNvbnN0cnVjdDoKKyAgICAg
ICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92
aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lKTsKKyAgICB9CisgICAgcmV0dXJuIExMSW50Ojpn
ZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBv
bGluZSk7Cit9CisKIFZNOjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA2ZmU0Njc0MDViYmI0NzRlYzIyM2Q2OWI0ODFiMThk
NmYwYWQzZDk4Li42NjUxYWJlNGNiZGE2MGU5YmQ1MWZiYzA4Zjk1YWNiNDg1NmM4MTA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEwNSw2ICsxMDUsOCBAQCBjbGFzcyBCYXNp
Y0Jsb2NrTG9jYXRpb247CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CiBjbGFzcyBCeXRlY29k
ZUludHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3MgQ2FsbEZyYW1lOworY2xhc3MgQ2FsbExpbmtJbmZv
OworZW51bSBjbGFzcyBDYWxsTW9kZTsKIHN0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0
ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKQEAgLTg5Myw2ICs4OTUsOSBA
QCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBEb3Vi
bHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEJvdW5kRnVu
Y3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wgY2FuQ29uc3RydWN0KTsKIAogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJh
bXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJTGlua0NhbGwoKTsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBn
ZXRDVElWaXJ0dWFsQ2FsbChDYWxsTW9kZSk7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGV4Y2Vw
dGlvbk9mZnNldCgpCiAgICAgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rl
c3RzL0NoYW5nZUxvZwppbmRleCA2ZTg5YzQ1MmE2NTY5Mzc2YmEyMzkxNjBjNDY5ZjliYmRhNzA1
OGM4Li4yOGNkZDAzNGI3YWRhNTNmZDQwYjFkZjY2N2QyMTQzMjA1ZDE1Mzg5IDEwMDY0NAotLS0g
YS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
IEBACisyMDIxLTExLTExICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0pTQ10gVXNlIENhbGxMaW5rSW5mbyBpbiBMTEludAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNzQ2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRs
LW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGlu
Zy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qczoKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9y
dHNTYW1wbGluZ1Byb2ZpbGVyLnZtLmlzV2FzbVN1cHBvcnRlZCk6CisgICAgICAgICogc3RyZXNz
L3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2Ft
cGxpbmdQcm9maWxlci52bS5pc1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1w
bGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzOgorICAgICAgICAoZG9lc1RyZWVIYXZl
U3RhY2tUcmFjZSk6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9u
LXRlc3RzL25hbWVTZWN0aW9uLmpzOgorCiAyMDIxLTExLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdoZW4gaW5saW5pbmcgTmV3U3ltYm9sIGluIHRoZSBE
RkcgZG9uJ3QgdW5pdmVyc2FsbHkgY2FsbCBUb1N0cmluZyBvbiB0aGUgaW5wdXQKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1v
Zi1wcm94eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1i
ZS1hd2FyZS1vZi1wcm94eS5qcwppbmRleCA1MGNhZWVkMTE0ODQyOWZkMWI1Y2UwYjBmZWFlNmJk
ZGRlNjcxMGI4Li45NGRhYjQ2ZDJkNzE4NGYzNWQ0M2UyZGI0YTJkZDU2NDE5OGJlZmY1IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdh
cmUtb2YtcHJveHkuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5l
ZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bkRlZmF1
bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUgLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0t
dXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIsICItLXRo
cmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
cldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcD0xMDAi
LCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0
aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29uPTEw
MDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQorLy9AIHJ1bkRl
ZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUiLCAiLS11c2VDb25jdXJyZW50SklUPWZhbHNl
IiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIs
ICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1V
cD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xkRm9y
RlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVT
b29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQogCiBm
dW5jdGlvbiBtYWluKCkgewogICAgIGxldCB2MTYyOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMgYi9KU1Rlc3RzL3N0cmVz
cy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwppbmRleCA2ODlhMDA1YWI1
NTVhMWZjNjAxYTU0ZTRlYmY5NGU5OWE2NjhmNzdlLi41YzIyMGZkNzZjZGM1YzQwZTU5Y2M2NmU1
NzM0MmM3MmQ4YzdmM2FhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9m
aWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1w
cm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwpAQCAtNjksNSArNjksNSBAQAogICAgIHZhciB3
YXNtRW50cnkgPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMu
X3BhcnJvdCgxKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIo
dW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9u
W19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9u
W19wYXJyb3RdIiwgIndhc20tc3R1YiIsICIyNCIsICJ3YXNtRW50cnkiXSk7CisgICAgcnVuVGVz
dCh3YXNtRW50cnksIFsiX3NpbGx5IiwgIih1bmtub3duKSIsICI8Pz4ud2FzbS1mdW5jdGlvbltf
ZWdnc10iLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltf
c3BhbV0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF0iLCAiKHVua25vd24pIiwgIndhc21F
bnRyeSJdKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
LXdhc20uanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCmluZGV4
IGNkMjFmMjg4YzE0OGE0Yjc0MDViZjg2OGRlZjliNTQ1NzM0MDUwNDUuLjA2ZGYwMTI0OTU5Njll
Mjg0MjE4Nzc4NjkwMTM1YmYwOTAxMGVjNmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3Nh
bXBsaW5nLXByb2ZpbGVyLXdhc20uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJv
ZmlsZXItd2FzbS5qcwpAQCAtOCw1ICs4LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5ID0gZnVuY3Rp
b24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmxvb3AoMTAwMDAwMDApOwog
ICAgIH07Ci0gICAgcnVuVGVzdCh3YXNtRW50cnksIFsiPD8+Lndhc20tZnVuY3Rpb25bMF0iLCAi
d2FzbS1zdHViIiwgIjAiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBb
Ijw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnkiXSk7CiB9CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2Zp
bGVyLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxl
ci5qcwppbmRleCA5NjQyZGRjN2MxZTZmMDZlM2IxMzI3OWMwZTRhMDI1YjU0ZGNhYmYxLi4xYjky
ZTk0ODU0YWY2M2Y2N2QwOGY1NDg4N2M1MjE3OTE0ZWUyYmY1IDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCisrKyBiL0pTVGVz
dHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMKQEAgLTcwLDEx
ICs3MCwxMyBAQCBmdW5jdGlvbiBjaGVjayhub2RlKSB7CiAgICAgCiAgICAgbGV0IG5vZGUgPSB0
cmVlOwogICAgIGZvciAobGV0IGkgPSBzdGFja1RyYWNlLmxlbmd0aDsgaS0tOyApIHsKKyAgICAg
ICAgbGV0IHByZXYgPSBub2RlOwogICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJlbltzdGFja1Ry
YWNlW2ldXTsKICAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICBpZiAoVkVSQk9TRSkg
ewogICAgICAgICAgICAgICAgIHByaW50KCJmYWlsaW5nIG9uICIgKyBpICsgIiA6ICIgKyBzdGFj
a1RyYWNlW2ldKTsKICAgICAgICAgICAgICAgICBwcmludChKU09OLnN0cmluZ2lmeSh0cmVlKSk7
CisgICAgICAgICAgICAgICAgcHJpbnQoT2JqZWN0LmtleXMocHJldi5jaGlsZHJlbikpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMDgs
NyArMTEwLDcgQEAgZnVuY3Rpb24gcnVuVGVzdChmdW5jLCBzdGFja1RyYWNlT3JTdHJpbmcpIHsK
ICAgICAgICAgfQogICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCB0aW1lVG9G
YWlsKTsKICAgICBwcmludChKU09OLnN0cmluZ2lmeShyb290LCB1bmRlZmluZWQsIDIpKTsKLSAg
ICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2UsIHRydWUsIHRydWUpOwor
ICAgIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwgc3RhY2tUcmFjZU9yU3RyaW5nLCB0cnVl
LCB0cnVlKTsKICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGFjayB0cmFjZSIpOwogfQogCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMgYi9K
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKaW5kZXggNjgwNWU2ODlm
NWM4NzllMmNhNTA5Yzg4ZDNlN2IzNzZkZTA5ZmFhYS4uMzNjODZiZjFjZGU5YThkYWIxMThlMGU0
Y2IwYmFjZDU5Yjc0OTFlOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3Rz
L25hbWVTZWN0aW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2Vj
dGlvbi5qcwpAQCAtNjksNCArNjksNCBAQAogYXNzZXJ0LmVxKHN0YWNrdHJhY2VbM10sICI8Pz4u
d2FzbS1mdW5jdGlvbltfYmFjb25dQFt3YXNtIGNvZGVdIik7CiBhc3NlcnQuZXEoc3RhY2t0cmFj
ZVs0XSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVx
KHN0YWNrdHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XUBbd2FzbSBjb2RlXSIp
OwotYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW3dhc20gY29kZV0iKTsgLy8g
d2FzbSBlbnRyeQorYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW25hdGl2ZSBj
b2RlXSIpOyAvLyB3YXNtIGVudHJ5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443992</attachid>
            <date>2021-11-11 12:58:42 -0800</date>
            <delta_ts>2021-11-11 15:31:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111125841.patch</filename>
            <type>text/plain</type>
            <size>159762</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTJjYjM0NzU4NTc2NDdhOWNhNTgyMWIxYzIyZjdkNGI5NDZmMjM0Li43YzlkNGYzYjQxYTczNzIz
ODg4ZjQ1ZTQ4YjEyMjFlYzE3MzYyYTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjkgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpkdW1wV2l0aE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oOgor
ICAgICAgICAoSlNDOjpjYWxsTGlua0luZm9Gb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJTdHViKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmVtaXRTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdERpcmVj
dFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRTbG93U3R1Yik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJTbG93U3R1Yik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxM
SW50SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElu
bGluZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJy
YXlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2Zp
bGVQcmVkaWN0aW9ucyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9P
cGNvZGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6Cisg
ICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1Rv
QjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29t
cGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwpOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmpl
Y3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRDb2RlLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJldHVybkZyb21C
YXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVP
cENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5k
bGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6
OnZpcnR1YWxGb3JXaXRoRnVuY3Rpb24pOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6
CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6
CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxsKToK
KyAgICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1v
cnBoaWNDYWxsKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAg
KEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yUmVn
dWxhckNvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0ZvclRh
aWxDb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JDb25z
dHJ1Y3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmluaXRp
YWxpemUpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OmxsaW50X2xpbmtfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF92
aXJ0dWFsX2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlSG9zdENhbGwpOgorICAg
ICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFy
Z3NTZXR1cCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6Cisg
ICAgICAgIChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpnZW5lcmljQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMu
aDoKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
OjpjcmVhdGVKU0dhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVhdGVUYWlsQ2Fs
bEdhdGUpOgorICAgICAgICAoSlNDOjpMTEludDo6cmV0dXJuTG9jYXRpb25UaHVuayk6CisgICAg
ICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlQmFzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2F0ZS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJTGlua0NhbGwp
OgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
KToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBydW50
aW1lL1ZNLmg6CisKIDIwMjEtMTEtMDkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg1MjQ2LgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGE1ZGVkNjIwNzRhODUyMmYxZDU1YzcyMjZl
ZTkwZDAyMDQzYzgyNTEuLjQyYjRjNDQxNDJkY2Y0YzIzZjBjYTAxYzM3Y2VhMTViYTg5NmMyNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY1OSw3ICs2NTksNiBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGJ5dGVjb2Rl
L0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLmgKICAgICBieXRlY29kZS9KdW1wVGFibGUuaAotICAgIGJ5dGVjb2Rl
L0xMSW50Q2FsbExpbmtJbmZvLmgKICAgICBieXRlY29kZS9MTEludFByb3RvdHlwZUxvYWRBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmgKICAgICBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMzE5NGUzMDI5ZDRjZjY1NGJjZjg4OGIzYTkwYzM1ZDRiMzQzOTNk
Ni4uMGZhNmVmMzVjZmUyYThmN2U4OGJjNDEzMzIwOTZjZDNkNzU5Mzk5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCQkwRjBDQUVGQzFFQzREQTZC
MDA5NzBEMTIgLyogSlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0FFRkExRUM0REE2MjAwOTcwRDEyIC8qIEpT
SGVhcEZpbmFsaXplclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBDQUVGRjFFQzREQTg4MDA5NzBEMTIgLyogSGVhcEZpbmFsaXpl
ckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjBDQUVGRTFFQzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0Q0QzIx
NUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8q
IFB1dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5r
SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
RkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMEYxQTMxQzQyMEJGMDAw
MUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovOyB9
OwogCQkwRjEyREUxMDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzZENEIx
NzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM4OSw3ICsyMzg4LDYgQEAKIAkJMEYwQ0FFRkUxRUM0
REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIZWFwRmluYWxpemVyQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXREaXJlY3RJbmRleE1v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzMxNUY2QjZCNTAwMzJG
MUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMTEludENhbGxMaW5rSW5mby5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEwRjFBMjFDNDIwQkYwMDAxQzA3RDIgLyog
QWlyQ3VzdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckN1c3RvbS5o
OyBwYXRoID0gYjMvYWlyL0FpckN1c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25GdXp6LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlv
bkZ1enouaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uRnV6ei5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODgwOSw3ICs4ODA3LDYgQEAKIAkJCQkw
RkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLywK
IAkJCQlFMzYzN0VFODIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8s
CiAJCQkJRTM2MzdFRTcyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLywK
LQkJCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLywK
IAkJCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLywKIAkJCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8s
CiAJCQkJMTRGNzlGNkUyMTZFQUQ1MDAwMDQ2RDM5IC8qIE1ldGFkYXRhVGFibGUuY3BwICovLApA
QCAtMTA1MTgsNyArMTA1MTUsNiBAQAogCQkJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBM
aW5rVGltZUNvbnN0YW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2
MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBERTlBMDkxQkU3
RDY5RTAwNUQ4OUQ5IC8qIExMSW50QXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMEZD
NDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0NvZGVMb2NhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9j
YXRpb24uaAppbmRleCBhNmNhNWM4MWM1MTA5NWY4MTk4ZDliODJkYjE0YTU4MWEyNWNlNjA5Li4w
NzUwNGJhMDRlNTliNmQxZGNhMjM1ODhiZWZiNTRkZjE5MTg1YTJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKQEAgLTI3LDggKzI3LDYgQEAK
IAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogCi0jaWYgRU5BQkxFKEFTU0VN
QkxFUikKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gY2xhc3MgTmVhckNhbGxNb2RlIDogdWlu
dDhfdCB7IFJlZ3VsYXIsIFRhaWwgfTsKQEAgLTI2OSw1ICsyNjcsMyBAQCBpbmxpbmUgQ29kZUxv
Y2F0aW9uQ29udmVydGlibGVMb2FkPHJlc3VsdFRhZz4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46
OmNvbnZlcnRpYgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShB
U1NFTUJMRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCA5MjU1OTE4YjFiYTE3NWExZjQ5ZGMzMDI1ZWM2
ZmNhODg5MzlkMzY0Li4zMGUzYWJlMzFjMGUwMjAzOTMyMzRkY2I2YzI0MWI1ZjY3OGM3NGY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmgKQEAgLTM3Nyw3ICszNzcsMTAgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlIHsKIAogICAgIHZvaWQg
ZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAg
ICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgICAgIGlm
IChtX3ZhbHVlKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdp
dGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2NhdGlvbigpLCBuYW1lLCBvdXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1w
V2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKICAgICB9CiAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBv
dXQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgppbmRleCBiZTJlOGM4MTFkNmRkZDBjMTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyLi41NWQ5NGQ0
NzNjZWU4Yzc4MjkzMTZjZWQxZmMzMzk0YjkxYzAxODJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI2LDYgKzI2LDcgQEAKIAogICAg
IDpCYXNpY0Jsb2NrTG9jYXRpb24sCiAgICAgOkJvdW5kTGFiZWwsCisgICAgOkNhbGxMaW5rSW5m
bywKICAgICA6RGVidWdIb29rVHlwZSwKICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlwZVdp
dGhFeHRlbnNpb24sCkBAIC00NCw3ICs0NSw2IEBACiAgICAgOkpTU2NvcGUsCiAgICAgOkpTVHlw
ZSwKICAgICA6SlNWYWx1ZSwKLSAgICA6TExJbnRDYWxsTGlua0luZm8sCiAgICAgOlJlc3VsdFR5
cGUsCiAgICAgOk9wZXJhbmRUeXBlcywKICAgICA6UHJpdmF0ZUZpZWxkUHV0S2luZCwKQEAgLTg0
MCw3ICs4NDAsOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFk
YXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAg
IGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5
UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODUy
LDcgKzg1Myw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAg
Y2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQ
cm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NjUs
NyArODY3LDggQEAKICAgICAgICAgZWNtYU1vZGU6IEVDTUFNb2RlLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAg
ICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04
NzksNiArODgyLDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBh
cnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LAogICAgIH0sCkBAIC05MDAsNiArOTA0LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJ
bmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MjEsNiArOTI2LDcgQEAKICAgICAgICAgZmly
c3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5r
SW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwK
ICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KQEAgLTkzMyw3ICs5MzksOCBA
QAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5m
bzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtOTQ3LDYgKzk1NCw3IEBA
CiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAg
ICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAt
MTI0OSw3ICsxMjU3LDggQEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRh
ZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZh
bHVlUHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAg
ICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBpdGVyYXRvclByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAg
ICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBuZXh0UHJv
ZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTI3Miw3ICsxMjgxLDggQEAKICAgICBtZXRhZGF0YTog
ewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAg
ICAgICBpdGVyYWJsZVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZv
OiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8s
CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBuZXh0UmVzdWx0
UHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgICAgICBkb25lTW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBkb25lUHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTQx
NSw2ICsxNDI1LDEwIEBACiBvcCA6bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCiBv
cCA6bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF9saW5rX2NhbGxf
dHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRf
dmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfdGFpbF9jYWxs
X3RyYW1wb2xpbmUKIG9wIDpjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3Ry
YW1wb2xpbmUKIG9wIDpjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUKIG9wIDpub3JtYWxf
b3NyX2V4aXRfdHJhbXBvbGluZQpAQCAtMTQyMyw2ICsxNDM3LDggQEAKIG9wIDpsbGludF9oYW5k
bGVfdW5jYXVnaHRfZXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpv
cF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY2FsbF92YXJhcmdzX3JldHVybl9s
b2NhdGlvbgorb3AgOm9wX2NvbnN0cnVjdF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgogb3AgOm9w
X2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF92YXJh
cmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlv
bgpAQCAtMTQzOCwxNSArMTQ1NCwxNSBAQAogb3AgOm9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9s
b2NhdGlvbgogb3AgOm9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpv
cF9pdGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCi1vcCA6b3BfdGFpbF9jYWxsX3Jl
dHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbgogb3Ag
Om9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbgogb3Ag
Om9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF9l
dmFsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiAKIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGwKLW9w
IDpqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3Ry
dWN0CitvcCA6anNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3MKK29wIDpqc190cmFtcG9saW5l
X29wX2NvbnN0cnVjdF92YXJhcmdzCiBvcCA6anNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0
CiBvcCA6anNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuCiBvcCA6anNfdHJhbXBvbGluZV9v
cF9jYWxsX3Nsb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKaW5kZXggNGY0N2M4YmNjZjhl
NTc0OGFhOWIwZjM2ZTZmMzYzMDVhZGMzMDAxMS4uMjcwY2Q2ZjFkMDJmNDRkNTNkYjNlNmFhNjNh
ZmZhMTVlMGMwOTI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKQEAgLTE4MCw3ICsx
ODAsNyBAQCBwdHJkaWZmX3Qgc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCB1bnNpZ25lZCBjaGVjawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZU1ldGFkYXRhPgotTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRl
Y29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQorQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2ln
bmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKICAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4
KTsKICAgICByZXR1cm4gbWV0YWRhdGEubV9jYWxsTGlua0luZm87CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDNiODAzYjM4YTc4Njli
NDkzODljMDc5MGFiYzhiZWI4ZDQwYTU1OGEuLjRkNjc3ZTI4OGY3ZjdmNzVhZTZjOGEzNjQxYzEx
ZDY4OWEwNDczMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uY3BwCkBAIC04MiwxMSArODIsMTMgQEAgQ2FsbExpbmtJbmZvOjp+Q2FsbExpbmtJ
bmZvKCkKIAogdm9pZCBDYWxsTGlua0luZm86OmNsZWFyU3R1YigpCiB7CisjaWYgRU5BQkxFKEpJ
VCkKICAgICBpZiAoIXN0dWIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdHViLT5jbGVh
ckNhbGxOb2Rlc0Zvcih0aGlzKTsKICAgICBtX3N0dWIgPSBudWxscHRyOworI2VuZGlmCiB9CiAK
IHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQpAQCAtMTEzLDggKzExNSw2IEBAIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0
aW9uKCkKICAgICByZXR1cm4gbV9kb25lTG9jYXRpb247CiB9CiAKLXN0YXRpYyBjb25zdGV4cHIg
dWludHB0cl90IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7Ci0KIHZvaWQgQ2FsbExpbmtJbmZv
OjpzZXRNb25vbW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBj
YWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKQEAgLTI4MCwxMyArMjgwLDE0IEBAIHZv
aWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIH0KIH0KIAorI2lmIEVOQUJM
RShKSVQpCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxs
RnJhbWVTaHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCiB7CiAgICAgbV9mcmFtZVNodWZmbGVEYXRh
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oc2h1ZmZsZURhdGEpOwogICAgIG1f
ZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExh
bWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd1BhdGg7CiAKQEAgLTM0NSw3ICszNDYsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbAogICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BS
LCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhV
c2VEYXRhSUM6Ok5vKTsKQEAgLTM1OCw3ICszNTksNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UgogICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENh
bGwpKTsKQEAgLTM2Niw3ICszNjcsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmCiAKIHZvaWQg
Q2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKIHsK
LSAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAg
ICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2FsbCgpLmNvZGUoKSk7
CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsK
IH0KQEAgLTM3NiwxOSArMzc3LDI3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xv
d1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mCiAgICAgaml0
Lm1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmNhbGwoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KKyNlbmRpZgogCi12b2lkIENhbGxMaW5r
SW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxp
bmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UikKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgQ2FsbFR5cGUg
Y2FsbFR5cGUsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEqIGZyYW1lU2h1ZmZsZURhdGEpCiB7Ci0gICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1
bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKLSAgICBzZXRVcENhbGwodW5saW5r
ZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7Ci0gICAgbV9kb25lTG9jYXRpb24g
PSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247Ci0gICAgaWYgKHVubGlua2VkQ2Fs
bExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVTaHVm
ZmxlRGF0YSk7CisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBtX2NvZGVPcmlnaW4g
PSBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVwQ2FsbChjYWxsVHlwZSwgY2Fs
bGVlR1BSKTsKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChmcmFtZVNodWZmbGVEYXRhKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEgcmVmY291bnRlZCBk
YXRhIHN0cnVjdHVyZS4KLSAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURh
dGEpOworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNo
dWZmbGVEYXRhPigqZnJhbWVTaHVmZmxlRGF0YSk7CiAgICAgfQorI2VuZGlmCiAgICAgc2V0VXNl
c0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOwogICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BS
ID0gY2FsbExpbmtJbmZvR1BSOwotICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpT
RW50cnlQdHJUYWc+KCkpOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENU
SUxpbmtDYWxsKCkuY29kZSgpKTsKKyAgICAvLyBJZiBKSVQgaXMgZGlzYWJsZWQsIHdlIHNob3Vs
ZCBub3Qgc3VwcG9ydCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY2FsbCBJQy4KKyAgICBpZiAoIU9w
dGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBkaXNhbGxvd1N0dWJzKCk7CiB9CiAKIHZvaWQgQ2Fs
bExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC00MDYs
NyArNDE1LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCkKICAgICB9KTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKQordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBh
cmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogCkBA
IC00ODgsNiArNDk3LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIoKQog
ICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihS
ZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKIHsKICAgICBjbGVhclN0
dWIoKTsKQEAgLTUwNCw2ICs1MTQsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5jb2RlKCkp
KTsKICAgICB9CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAppbmRleCBlNWY3N2NmMzdiZjI2NmY0YjljOTNjNTBjZjk5NmQyMWM2NjhjZTQ1Li4yOGEwMzll
OGFjMTY3M2E2ZDFhN2QxZjEyYWZiMGU5Yzc0YTY5MWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCkBAIC0zMSwyMiArMzEsMjUgQEAKICNpbmNs
dWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLSNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3Rm
L1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIEVOQUJMRShK
SVQpCi0KIGNsYXNzIENDYWxsSGVscGVyczsKK2NsYXNzIEV4ZWN1dGFibGVCYXNlOwogY2xhc3Mg
RnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU0Z1bmN0aW9uOworY2xhc3MgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU7CiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKK3N0cnVjdCBDYWxs
RnJhbWVTaHVmZmxlRGF0YTsKIHN0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKIAogY2xhc3Mg
Q2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+
IHsKIHB1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworCiAg
ICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxs
LApAQCAtNTksNiArNjIsOCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3
U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBEaXJlY3RDb25zdHJ1Y3QsCiAg
ICAgICAgIERpcmVjdFRhaWxDYWxsCiAgICAgfTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dHB0cl90IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7CiAgICAgCiAgICAgc3RhdGljIENhbGxU
eXBlIGNhbGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKTsKIApAQCAtMTgzLDcgKzE4OCw3IEBA
IGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExp
bmtJbmZvPiB7CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAotICAg
IHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisgICAgdm9pZCBpbml0aWFsaXpl
RGF0YUlDKFZNJiwgQ2FsbFR5cGUsIEJ5dGVjb2RlSW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRh
Kik7CiAKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7
IH0KICAgICAKQEAgLTE5MiwxNyArMTk3LDE5IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIE5vCiAgICAg
fTsKIAorI2lmIEVOQUJMRShKSVQpCiBwcml2YXRlOgotICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJv
b2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2Fs
bCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBT
Y29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlD
KSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9y
VGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmKTsKLSAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOwor
ICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgU2NvcGVk
TGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQ
YXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CiAgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQ
YXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisjZW5kaWYK
ICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRh
SUM6OlllczsgfQpAQCAtMjU1LDE2ICsyNjIsNiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJs
aWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4g
bV9zdHViLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0U2xvd1N0dWIoUmVmPEpJVFN0dWJS
b3V0aW5lPiYmIG5ld1Nsb3dTdHViKQotICAgIHsKLSAgICAgICAgbV9zbG93U3R1YiA9IFdURk1v
dmUobmV3U2xvd1N0dWIpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJTbG93U3R1YigpCi0gICAg
ewotICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBib29sIHNlZW5P
bmNlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAt
MzMwLDE5ICszMjcsMTcgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0K
IAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICB9Ci0jZW5kaWYKLQogICAgIHVpbnQzMl90IG1h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldE1h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVuc2lnbmVkKTsKKyAgICB2b2lkIHVwZGF0ZU1h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICAgICAgICAgIG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICB9
CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhDb3VudCgpCiAgICAgewpA
QCAtMzk3LDE3ICszOTIsMjAgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJh
d1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAgIHZvaWQgdmlzaXRXZWFrKFZNJik7
CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBD
YWxsRnJhbWVTaHVmZmxlRGF0YSYpOwogCiAgICAgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEq
IGZyYW1lU2h1ZmZsZURhdGEoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZnJhbWVTaHVmZmxl
RGF0YS5nZXQoKTsKICAgICB9CisjZW5kaWYKIAogcHJpdmF0ZToKIAogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKIAorICAgIHVpbnQzMl90
IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0
aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUg
bnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
OwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MzAsOCArNDI4LDkgQEAgY2xhc3MgQ2FsbExp
bmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFy
cmllcjxKU0NlbGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3Nsb3dTdHViOworI2lmIEVOQUJMRShKSVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxGcmFtZVNodWZmbGVEYXRhPiBtX2ZyYW1lU2h1ZmZsZURhdGE7CisjZW5kaWYKICAgICBDb2Rl
T3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFzU2VlblNob3VsZFJlcGF0Y2ggOiAx
OwogICAgIGJvb2wgbV9oYXNTZWVuQ2xvc3VyZSA6IDE7CkBAIC00NDMsNyArNDQyLDYgQEAgY2xh
c3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0lu
Zm8+IHsKICAgICB1bnNpZ25lZCBtX3VzZURhdGFJQyA6IDE7IC8vIFVzZURhdGFJQwogICAgIEdQ
UlJlZyBtX2NhbGxlZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICB1aW50MzJfdCBtX3Nsb3dQ
YXRoQ291bnQgeyAwIH07Ci0gICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBv
ZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2Nh
dGVkIGZvciBhcmd1bWVudHMuCiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0lu
Zm9Db2RlT3JpZ2luKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtNDUzLDExICs0NTEs
NyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvKQogCiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8gewogICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkg
YmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KLSAg
ICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOwogICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7CiB9OwogCi0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLQogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAppbmRleCBmN2FmYjJiMGYyOGZkOWU1ZmZj
NWMzNGI2YTNhODU2YWUzNzMwMmY1Li5mMmRkYTBlZWRhYWI5NjQ0YTAzYmViNmU1M2ZlYTE3MjIz
YTBjYWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiTExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAj
aW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKQEAgLTYzLDM0ICs2Miw3IEBAIENhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIENvZGVCCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgfQogI2Vu
ZGlmCi0KLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgT3Bjb2RlSUQgb3AgPSBpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKTsKLQotICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87
Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJ
bmZvID0gJmluc3RydWN0aW9uLT5hczxPcENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jayku
bV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfY29uc3RydWN0Ogot
ICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpLm1l
dGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIG9wX3RhaWxfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9u
LT5hczxPcFRhaWxDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZv
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46Ci0gICAgICAgIGNh
bGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCkubWV0YWRhdGEo
cHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
b3BfaXRlcmF0b3JfbmV4dDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5m
bzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQ2FsbExp
bmtTdGF0dXMoKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcmV0dXJuIENhbGxMaW5rU3RhdHVz
KGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUoKSk7CisgICAgcmV0dXJuIENhbGxMaW5rU3Rh
dHVzKCk7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBiOTA5
ZGY0NTg0NGIyMjllYzkxODMzOTE4NDI2MjM0NTkyN2VhNmRmLi5mYzc2NmE5ZGZkMmZkMmE5NmE2
NDQ0NWNjNDM0MGNhMmEwOGFmYmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcApAQCAtNDQ5LDE0ICs0NDksMTcgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHRoaXMpOyBcCiAg
ICAgbmV3ICgmbWV0YWRhdGEpIF9fb3A6Ok1ldGFkYXRhIHsgYnl0ZWNvZGUgfTsgXAogCi0jZGVm
aW5lIENBU0UoX19vcCkgY2FzZSBfX29wOjpvcGNvZGVJRAotCi0jZGVmaW5lIExJTksoLi4uKSBc
Ci0gICAgQ0FTRShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpOiB7IFwKKyNkZWZpbmUgTElO
S19JTVBMKC4uLikgXAogICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKFdURl9MQVpZX0ZJUlNU
KF9fVkFfQVJHU19fKSkgXAogICAgICAgICBXVEZfTEFaWV9IQVNfUkVTVChfX1ZBX0FSR1NfXyko
eyBcCiAgICAgICAgICAgICBXVEZfTEFaWV9GT1JfRUFDSF9URVJNKExJTktfRklFTEQsICBXVEZf
TEFaWV9SRVNUXyhfX1ZBX0FSR1NfXykpIFwKICAgICAgICAgfSkgXAorCisjZGVmaW5lIENBU0Uo
X19vcCkgY2FzZSBfX29wOjpvcGNvZGVJRAorCisjZGVmaW5lIExJTksoLi4uKSBcCisgICAgQ0FT
RShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpOiB7IFwKKyAgICAgICAgTElOS19JTVBMKF9f
VkFfQVJHU19fKSBcCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCkBAIC00NjUsMTAgKzQ2OCw2
IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0g
aW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAgICAgICAgIG1fYnl0ZWNvZGVDb3N0ICs9IG9wY29k
ZUxlbmd0aHNbb3Bjb2RlSURdOwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAg
IExJTksoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxDYWxsVmFy
YXJncywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywg
cHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENvbnN0cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCiAgICAg
ICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFByaXZhdGVO
YW1lLCBwcm9maWxlKQogCkBAIC00OTgsMTEgKzQ5Nyw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpCiAgICAgICAgIExJ
TksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCiAKLSAgICAgICAgTElOSyhPcENhbGws
IHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElO
SyhPcENhbGxFdmFsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wQ29uc3RydWN0LCBwcm9maWxl
KQotCiAgICAgICAgIExJTksoT3BJbkJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlWYWwpCiAg
ICAgICAgIExJTksoT3BQdXRCeVZhbERpcmVjdCkKQEAgLTUyNywxMyArNTIxLDkxIEBAIGJvb2wg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BDYXRjaCkKICAgICAgICAgTElOSyhP
cFByb2ZpbGVDb250cm9sRmxvdykKIAorICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAg
ICAgIExJTktfSU1QTChPcENhbGwsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2Nh
bGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9y
KG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7CisgICAgICAg
ICAgICBMSU5LX0lNUEwoT3BUYWlsQ2FsbCwgcHJvZmlsZSkKKyNpZiBFTkFCTEUoSklUKQorI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVl
SlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
ICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwIH07CisjZW5kaWYKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRh
IHNodWZmbGVEYXRhOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5
dGVjb2RlLm1fYXJnYzsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBu
dW1QYXJhbWV0ZXJzKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisjZW5k
aWYKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IGJ5dGVjb2RlLm1fYXJndiAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7CisgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJn
diwKKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICB9
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZh
bHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVl
ID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBh
eWxvYWRHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2hyaW5rVG9GaXQoKTsK
KyNlbmRpZgorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURh
dGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9u
LmluZGV4KCksICZzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BD
YWxsRXZhbCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmlu
aXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBp
bnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAgIExJTktfSU1Q
TChPcENvbnN0cnVjdCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJ
bmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Ci0gICAgICAgICAg
ICBJTklUSUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgTElOS19J
TVBMKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8u
aW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCks
IGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKLSAgICAgICAgICAgIElO
SVRJQUxJWkVfTUVUQURBVEEoT3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBMSU5LX0lNUEwo
T3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0
aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5z
dHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lN
UEwoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExp
bmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bj
b2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczogeworICAg
ICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAg
ICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50czogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxs
TGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihv
cGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7Cisg
ICAgICAgICAgICBMSU5LX0lNUEwoT3BDb25zdHJ1Y3RWYXJhcmdzLCBwcm9maWxlKQorICAgICAg
ICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExp
bmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxw
dHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNzgzLDIxICs4NTUsMTgg
QEAgdm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNl
bGluZUpJVENvZGU+IGppdENvZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9q
aXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50
UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkp
OwogICAgICAgICBqaXREYXRhLm1fc3R1YkluZm9zID0gRml4ZWRWZWN0b3I8U3RydWN0dXJlU3R1
YkluZm8+KGppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKLSAgICAgICAgaml0
RGF0YS5tX2NhbGxMaW5rSW5mb3MgPSBGaXhlZFZlY3RvcjxDYWxsTGlua0luZm8+KGppdENvZGUt
Pm1fdW5saW5rZWRDYWxscy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkQ2Fs
bExpbmtJbmZvIDogaml0Q29kZS0+bV91bmxpbmtlZENhbGxzKSB7CisgICAgICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
bG9ja2VyLCB1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAg
IEFTU0VSVChjYWxsTGlua0luZm8pOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2Rl
TG9jYXRpb25zKHsgfSwgdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFu
dFBvb2wuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5t
X2NvbnN0YW50UG9vbC5hdChpKTsKICAgICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0Ogog
ICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9i
amVjdC5nZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50ZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZv
ID0gaml0Q29kZS0+bV91bmxpbmtlZENhbGxzW2luZGV4XTsKLSAgICAgICAgICAgICAgICBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zW2luZGV4XTsK
LSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxp
bmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAg
ICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gJmNhbGxMaW5rSW5mbzsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ug
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucG9pbnRl
cigpKTsKICAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvID0gaml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvc1tpbmRleF07CkBAIC0xNTY3
LDE1ICsxNjM2LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMo
KQogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQotICAgIGZvckVhY2hMTEludENh
bGxMaW5rSW5mbyhbJl0oTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgewotICAgICAg
ICBpZiAoY2FsbExpbmtJbmZvLmlzTGlua2VkKCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExp
bmtJbmZvLmNhbGxlZSgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCAiQ2xlYXJpbmcgTExJbnQgY2FsbCBmcm9tICIsICp0aGlzKTsKLSAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby51bmxpbmsoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2FsbExp
bmtJbmZvLmxhc3RTZWVuQ2FsbGVlKCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZv
Lmxhc3RTZWVuQ2FsbGVlKCkpKQotICAgICAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyTGFzdFNl
ZW5DYWxsZWUoKTsKLSAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xNTkzLDggKzE2
NTMsNiBAQCBDb2RlQmxvY2s6OkpJVERhdGEmIENvZGVCbG9jazo6ZW5zdXJlSklURGF0YVNsb3co
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElu
bGluZUNhY2hlcygpCiB7CiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5r
SW5mb3MpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8udmlzaXRXZWFrKHZtKCkpOwogICAgICAg
ICBmb3IgKGF1dG8mIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAg
ICAgICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CkBA
IC0xNjM3LDYgKzE2OTUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KFZNJiB2bSkKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUo
KSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAorICAgIGZvckVhY2hM
TEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KSB7CisgICAgICAgIGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0pOworICAgIH0pOworCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCiAgICAgICAgIGZpbmFsaXplSklUSW5s
aW5lQ2FjaGVzKCk7CkBAIC0xNzAwLDEyICsxNzYyLDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKIHZvaWQgQ29kZUJsb2NrOjpnZXRJQ1N0YXR1c01hcChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBJQ1N0YXR1c01hcCYgcmVzdWx0KQogewogI2lmIEVOQUJMRShK
SVQpCisgICAgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhbJl0oQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29k
ZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNh
bGxMaW5rSW5mbzsKKyAgICB9KTsKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkg
ewogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAg
ICAgICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKQogICAgICAg
ICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8uY29kZU9yaWdpbiwgSUNTdGF0dXMoKSkuaXRl
cmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwotICAgICAgICAgICAgZm9yIChhdXRv
JiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVy
YXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNhbGxMaW5rSW5mbzsKICAgICAgICAgfQogI2lm
IEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpIHsKQEAgLTE3NjAsMTUgKzE4MjMsMjIgQEAgU3RydWN0dXJlU3R1YkluZm8qIENv
ZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0Zv
ckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKK0NhbGxMaW5rSW5mbyogQ29kZUJs
b2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIEJ5dGVjb2RlSW5kZXggaW5kZXgpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwotICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0lu
Zm9zKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSA9PSBDb2Rl
T3JpZ2luKGluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gJmNhbGxMaW5rSW5mbzsKLSAg
ICAgICAgfQorICAgIGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgp
OworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyNkZWZpbmUgQ0FTRShP
cCkgXAorICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCisgICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJbmZvOyBcCisgICAgICAgIGJy
ZWFrOworCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ0FT
RSkKKworI3VuZGVmIENBU0UKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CisK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENv
ZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjE1NCw4ICsyMjI0LDYgQEAgdm9pZCBDb2RlQmxvY2s6Omxp
bmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5bW9y
cGhpY0MKIAogdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogewotICAgIHdo
aWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdMTEludENhbGxz
LmVuZCgpKQotICAgICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51bmxpbmsoKTsK
ICNpZiBFTkFCTEUoSklUKQogICAgIEpJVERhdGEqIGppdERhdGEgPSBudWxscHRyOwogICAgIHsK
QEAgLTIxNzEsMTIgKzIyMzksNiBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxs
cygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNv
bWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qIGluY29t
aW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgbV9pbmNv
bWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIENvZGVCbG9jayogQ29kZUJsb2Nr
OjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5uZXdS
ZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yMzI5LDEz
ICsyMzkxLDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25S
ZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZtLmhlYXAuaXND
dXJyZW50VGhyZWFkQnVzeSgpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgp
KSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKEpJVCkKICAgICB7CiAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgaWYgKEpJVERhdGEqIGpp
dERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExp
bmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9CisgICAgICAgIGZvckVh
Y2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvKSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsK
KyAgICAgICAgfSk7CisKKyNpZiBFTkFCTEUoSklUKQogI2lmIEVOQUJMRShERkdfSklUKQogICAg
ICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAg
ICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsK
QEAgLTI4NDcsMTkgKzI5MDksMTMgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5
UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGUKIHsKICAgICBh
dXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewotI2RlZmluZSBDQVNFMShPcCkgXAor
I2RlZmluZSBDQVNFKE9wKSBcCiAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKICAgICAgICAgcmV0
dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2ZpbGU7
CiAKLSNkZWZpbmUgQ0FTRTIoT3ApIFwKLSAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAgICAg
ICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxMaW5r
SW5mby5tX2FycmF5UHJvZmlsZTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BS
T0ZJTEUoQ0FTRTEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lO
Rk8oQ0FTRTIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNFKQog
Ci0jdW5kZWYgQ0FTRTEKLSN1bmRlZiBDQVNFMgorI3VuZGVmIENBU0UKIAogICAgIGNhc2UgT3BH
ZXRCeUlkOjpvcGNvZGVJRDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKQEAgLTMwMjksMTcgKzMwODUsMTIgQEAgdm9pZCBDb2RlQmxvY2s6
OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVByZWRpY3Rpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYgbG9ja2UKICAgICAgICAgfQogICAgIH0pOwogCi0jZGVmaW5lIFZJU0lUMShfX29wKSBcCisj
ZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAo
YXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSk7IH0pOwog
Ci0jZGVmaW5lIFZJU0lUMihfX29wKSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihb
Jl0gKGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9h
cnJheVByb2ZpbGUpOyB9KTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJ
TEUoVklTSVQxKQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZP
KFZJU0lUMikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUKQog
Ci0jdW5kZWYgVklTSVQxCi0jdW5kZWYgVklTSVQyCisjdW5kZWYgVklTSVQKIAogICAgIG1fbWV0
YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck5leHQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsKICAg
ICAgICAgcHJvY2VzcyhtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggNjRmOWY1YWJjZmUyYWU3MDVkMWRh
NjVhYTlmODMxOTdiOTZjNmQzMS4uMzJmZGQ3YzkxZTg2ZDJiYzhmNzk1NDRjZmNmYzE4ZGJmZjc5
NzAzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAt
NTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0lu
Zm8uaCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIk1l
dGFkYXRhVGFibGUuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpAQCAt
MjYxLDcgKzI2MCw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEZpeGVkVmVj
dG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgRml4ZWRWZWN0b3I8
Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFNlbnRpbmVsTGlua2VkTGlz
dDxDYWxsTGlua0luZm8sIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2lu
Y29taW5nQ2FsbHM7CiAgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxO
b2RlLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5jb21p
bmdQb2x5bW9ycGhpY0NhbGxzOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyB7IGZhbHNlIH07CkBAIC0yOTEsNyArMjg5LDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1h
cmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQogICAgIC8vIHRoYXQgdGhl
cmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlz
LCB5b3UncmUgcmVhbGx5CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8g
YW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0
Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKKyAgICBDYWxsTGlu
a0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgY29uc3QgSklUQ29kZU1hcCYgaml0
Q29kZU1hcCgpOwogCkBAIC0zMTUsOCArMzEzLDYgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAKLSAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwg
TExJbnRDYWxsTGlua0luZm8qKTsKLQogICAgIGNvbnN0IEluc3RydWN0aW9uKiBvdXRPZkxpbmVK
dW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CiAgICAgaW50IG91dE9mTGluZUp1bXBP
ZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNDUzLDcg
KzQ0OSw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9y
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYp
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExMSW50Q2FsbExp
bmtJbmZvKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYpOwog
CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBiaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiB1bmFyeUFyaXRoUHJv
ZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CkBAIC05NTksNyArOTU1LDYgQEAg
Y2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgVk0qIG1fdm07CiAKICAgICBj
b25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRyIH07Ci0gICAgU2Vu
dGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8
TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJbnRDYWxsczsKICAgICBTdHJ1Y3R1cmVX
YXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklU
Q29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAppbmRleCAxZDU5NGFiODM1Mjg5N2Vj
OGE3NDVlYTI0OTNmOGQyZGEwMThiOTYyLi45MmRhOTlhMGJhMmFjYzFmY2RiNmE5NzM1ZmNkZGUy
M2VmYzkzM2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tJbmxpbmVzLmgKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJiBmdW5jKQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5r
SW5mbyhjb25zdCBGdW5jdG9yJiBmdW5jKQordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludE9y
QmFzZWxpbmVDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYgZnVuYykKIHsKICAgICBpZiAobV9t
ZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxMDU4ZmZjZDkxN2RkMmM1MDE2MmUxMzU1YjNkNThiMThlNmEwNzI2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNDUHRyVGFnLmgiCi0jaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2luY2x1
ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVj
dCBJbnN0cnVjdGlvbjsKLQotY2xhc3MgTExJbnRDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2Vk
UmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPiB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dHB0cl90IHVubGlua2VkQml0ID0gMHgxOwotCi0gICAgTExJbnRDYWxsTGlua0luZm8oKSA9IGRl
ZmF1bHQ7Ci0gICAgCi0gICAgfkxMSW50Q2FsbExpbmtJbmZvKCkKLSAgICB7Ci0gICAgICAgIGlm
IChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiAhKG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdp
dGhMaW5rQml0ICYgdW5saW5rZWRCaXQpOyB9Ci0gICAgCi0KLSAgICB2b2lkIGxpbmsoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLSAgICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQot
ICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdp
dGhMaW5rQml0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKTsKLSAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGNhbGxlZSk7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVU
YXJnZXQgPSBjb2RlUHRyOwotICAgIH0KLQotICAgIHZvaWQgdW5saW5rKCkKLSAgICB7Ci0gICAg
ICAgIC8vIE1ha2UgbGluayBpbnZhbGlkYXRlZC4gSXQgd29ya3MgYmVjYXVzZSBMTEludCB0ZXN0
cyB0aGUgZ2l2ZW4gY2FsbGVlIHdpdGggdGhpcyBwb2ludGVyLiBCdXQgaXQgaXMgc3RpbGwgdmFs
aWQgYXMgbGFzdFNlZW5DYWxsZWUhCi0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdp
dGhMaW5rQml0IHw9IHVubGlua2VkQml0OwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgIGlmIChpc09u
TGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGNh
bGxlZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWlzTGlua2VkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+
KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0KTsKLSAgICB9Ci0KLSAgICBKU09i
amVjdCogbGFzdFNlZW5DYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYg
fnVubGlua2VkQml0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKQot
ICAgIHsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1bmxp
bmtlZEJpdDsKLSAgICB9Ci0KLSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0gICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5s
aW5rZWRCaXQgfTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9t
YWNoaW5lQ29kZVRhcmdldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhiMjg1
MjQ5MjFhYzgzOWJkMzYuLjFjYmM2NmY4NDk5NTQ5OTdlZjdjNTBkNDkzODQzMDJmMzVjNjI5ZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTEyNiwxMSArMTI2
LDE5IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5n
dGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKICAg
ICBtYWNybyhPcEdldFByaXZhdGVOYW1lKSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfQVJSQVlfUFJPRklMRShtYWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9M
TElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAgIG1h
Y3JvKE9wVGFpbENhbGwpIFwKKyAgICBtYWNybyhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8oT3BD
b25zdHJ1Y3QpIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9wSXRl
cmF0b3JOZXh0KSBcCiAgICAgbWFjcm8oT3BDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFp
bENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwK
ICAgICBtYWNybyhPcENvbnN0cnVjdFZhcmFyZ3MpIFwKKworI2RlZmluZSBGT1JfRUFDSF9PUENP
REVfV0lUSF9BUlJBWV9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAog
ICAgIG1hY3JvKE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKQEAgLTEzOSw2
ICsxNDcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2Rl
TGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
TExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVf
V0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0Fy
cmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0
V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAjZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09CSkVDVF9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8p
IFwKICAgICBtYWNybyhPcE5ld09iamVjdCkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BDYWxsKSBcCi0g
ICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBtYWNy
byhPcENvbnN0cnVjdCkgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCi0gICAgbWFjcm8o
T3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllf
QVJJVEhfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wQWRkKSBcCiAgICAgbWFjcm8oT3BN
dWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCmluZGV4IDBkMTllMjc5MDU2ZTVmMzdlNzcxYzVjNDlhMmRiMGU2YzJkODQ4
ZDcuLmFjNTcxMjdiY2Y4OTA3MmJlMDM4NDE2ZGExMzliNDFmMTY0YWU2MTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApA
QCAtNDAzLDcgKzQwMyw2IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVk
UHJvZmlsZXModW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcywKIAogI2RlZmluZSBDT1VO
VChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxf
X29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5U
KQotICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VO
VCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRl
eCA0MDM5NGE5NDM5OTI5OTNmNTQ1YTJhYzYyY2Y2ZWRjMDlkZjU1NWZhLi4xYzU5MDQyZTBkMGMz
ODExYjNjOWJlMjE1OGNkYzU0YzAxZGJiODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtNzUsNyArNzUsNiBAQCBjbGFz
cyBDYWNoZWRDb2RlQmxvY2s7CiAKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9j
YXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwogCiBz
dHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewogICAgIHN0cnVjdCBPZmZzZXRMb2NhdGlv
biB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKaW5k
ZXggNWM3MjA1OGRjZjIxOTYwZGNmODUzZTBhOTJjMjdlODlhMmQ1NmJlZS4uNWUzMmQyZDI0ZjFi
M2VkODcwYzMzMGYyZWYyM2Q4NWU0ZWNlNDgzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMzE1LDYgKzMxNSwxMCBAQCBDYXBhYmlsaXR5
TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgSQogICAgIGNhc2UgbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5l
OgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAg
IGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxf
Y2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmU6CiAgICAg
Y2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVybl92YWx1ZToKICAgICBjYXNlIGxsaW50X2hh
bmRsZV91bmNhdWdodF9leGNlcHRpb246CiAgICAgY2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zy
b21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CkBAIC0zMjUsNiArMzI5LDggQEAgQ2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9u
OgogICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3JldHVybl9sb2Nh
dGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3JldHVybl9sb2NhdGlvbjoKICAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKQEAgLTMzNSw3ICszNDEsNiBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSQogICAgIGNhc2Ugb3BfY29uc3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgog
ICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNl
IG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb246Ci0gICAgY2FzZSBvcF90YWls
X2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1
cm5fbG9jYXRpb246CkBAIC0zNDMsOCArMzQ4LDkgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxp
dHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkK
ICAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWU6CiAgICAgY2FzZSB3YXNtX2Z1bmN0aW9u
X3Byb2xvZ3VlX25vX3RsczoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbDoKLSAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJnczoKKyAg
ICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0
ZXJhdG9yX29wZW46CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcAppbmRleCBiNDUxY2RiNjFmN2ExMWIzMzAyYzE4NWM2NmJmZjE3YTlmZGJlMDlmLi5lNzIy
ZjllYmRhY2M4OTM2OTA2NTZkNWI2M2U5ZjYyNDQ0NjE1ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0x
NjYsMTAgKzE2NiwxMCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogICAgICAgICAgICAganVt
cFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3QpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKLSAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJh
cmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElP
TihvcF9jYWxsX3ZhcmFyZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5s
aW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdldCA9
IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93KTsKKyAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3Zh
cmFyZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1l
OjpHZXR0ZXJDYWxsOiB7CiAgICAgICAgICAgICBpZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlE
KCkgPT0gb3BfZ2V0X2J5X2lkKQpAQCAtMjAxLDEwICsyMDEsMTIgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJh
c2VsaW5lQ28KICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAg
ICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIElubGlu
ZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczogewotICAgICAgICAgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPQotICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2xvY2spOworICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRl
Y29kZUluZGV4KGxvY2tlciwgY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKLQogICAgICAgICAgICAganVt
cFRhcmdldCA9IGNhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uKCkucmV0YWdnZWQ8SlNFbnRyeVB0
clRhZz4oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA1MjM5
YjhhNDQ5NDA3NTg1OTY4NzFmZDI3ZWEyNWUxYTQ3NDBhMTc0Li41ZGRiMTYwMzVkNGIwYTU3ZGQ1
ZTg5Y2ExYzk5M2RmNTU2NzU2YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTg0NywxMCArODQ3LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2pp
dCwgWyZdIHsKKyAgICAgICAgICAgIGluZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwogCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBAIC04OTIsNyArODkyLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIAogICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7
CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBj
YWxsZWVQYXlsb2FkR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkBAIC05MDAs
NyArOTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgfQotICAg
ICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgIH0gZWxzZQogICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGIzYTEyYmI2ODM2NzU1Y2I3
ZTM1MWFiMDM5MGY4NzBkMjU3MzcwMWMuLjU2NmY3ZDVlOTlkZjAwOTQxYzIyYmNiYWU0NTc4OGY3
MDI2ZTI5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcApAQCAtOTM3LDEwICs5MzcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWlu
UGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0
ZUluZGV4KGNhbGxTaXRlKTsKIAotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsm
XXsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1
ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0
LmxhYmVsKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKEludmFsaWRHUFJSZWcpOwpAQCAtOTgwLDcgKzk4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZUdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkBA
IC05ODgsNyArOTg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAg
fQotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgIH0gZWxzZQogICAgICAgICBzbG93Q2Fz
ZXMgPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKaW5kZXggMDM2YTJlMjQ4MzhhMmJlMTU0MzFkOGY4ZTUyYmM4OGJj
NjlhZjI3Ni4uMjdmYzFmYzlhM2VkNTYwMDI5ZDg5Y2ViMzk0ZGVjNjFhODg0ZjJiOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTAzOTks
MTAgKzEwMzk5LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBbJl0geworICAgICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
c2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
fSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0
V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTEwNTU1LDEwICsxMDU1NSwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBzdGF0ZS0+aml0Q29k
ZS0+Y29tbW9uLmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpy
ZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0geworICAgICAgICAg
ICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgfSkpOwogCiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKICAgICAg
ICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKQEAgLTEwODk4LDEw
ICsxMDg5OCwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBH
UFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
KTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7CkBAIC0xMTE3OSwxMCAr
MTExNzksMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7
CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IGM4Y2JiZWUwNmJmN2Q2NjYy
YzE5YTRhNGE4YTE4YzIxY2VmZDNmNzIuLmU2NDU4NTMxZWJjOTA0ZGU1ZGQwNGNlM2FiYTUzYzVi
ZDNjNzBiMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKQEAgLTc0NSwxOCArNzQ1LDE4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQCiB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1v
dmluZ0dsb2JhbE9iamVjdCh2bSwgR1BSSW5mbzo6cmVnVDIsIGluZm8tPmNhbGxNb2RlKCkpOwog
fQogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0ds
b2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3ZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgQ2FsbE1vZGUgY2FsbE1vZGUpCiB7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgbW92ZShjYWxsTGlua0luZm9H
UFIsIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFk
ZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1
dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGls
YXRpb25QdHJUYWc+KGNhbGwpOwogICAgICAgICBsaW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5h
bGl6YXRpb25UYXNrKFs9LCAmdm1dICgpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9y
KHZtLCAqaW5mbyk7Ci0gICAgICAgICAgICBpbmZvLT5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdl
dENUSVZpcnR1YWxDYWxsKGNhbGxNb2RlKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAgICB9KTsKICAgICB9KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDY1ZGQ4
ZWRlZjc0Nzk5NmQ1ZjZkOGYxOTI0NmU2YWQ5MzM2ZDQ3MzguLmE0NGFhNWNmOTU0ZjJjMTY1NDc5
ZWMyZGNkOTIzZDVmZjRmM2QxZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaApAQCAtMTc1Miw3ICsxNzUyLDcgQEAgY2xhc3MgQXNzZW1ibHlIZWxwZXJz
IDogcHVibGljIE1hY3JvQXNzZW1ibGVyIHsKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0Vmly
dHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOwotICAgIHZvaWQg
ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5m
byopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChW
TSYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIENhbGxNb2RlKTsKICAgICAKICAgICB2b2lkIG1h
a2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0Zv
ckNDYWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaApp
bmRleCAxNTg5NjAzZjE0OWMyNzZjMzU5ZTdiYjI2ZDY0ZjRkODU3MjdmMTUwLi4zMDAzYjA3MzUw
MTg4ZTVmNzNmY2M5NjcyMGQ2YTllNzQxZjhiY2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKQEAgLTYyLDcgKzYyLDYgQEAgY2xhc3MgSklUQ29uc3Rh
bnRQb29sIHsKIAogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBHbG9i
YWxPYmplY3QsCi0gICAgICAgIENhbGxMaW5rSW5mbywKICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8sCiAgICAgICAgIEZ1bmN0aW9uRGVjbCwKICAgICAgICAgRnVuY3Rpb25FeHByLApAQCAtOTMs
NyArOTIsNiBAQCBjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwg
cHVibGljIE1hdGhJQ0hvbGRlciB7CiAgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOwog
ICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KIAotICAgIEJhZzxDYWxsTGlua0luZm8+
IG1fZXZhbENhbGxMaW5rSW5mb3M7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0lu
Zm8+IG1fdW5saW5rZWRDYWxsczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOwogICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IDkyOTQyNDYwNzM0MDA5MTFiNmMzNTdjNzhhNGEwYzZhNzRlOWFhZDQuLjI4YWU2Zjc3MGRkYWNk
NzFjNmYxODJjOWQxNzlmZDFjY2ViOGRmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
QEAgLTEwMSwxMiArMTAxLDkgQEAgc3RkOjp0dXBsZTxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxpbmsKICAgICByZXR1cm4g
c3RkOjp0dXBsZSB7IHN0dWJJbmZvLCBzdHViSW5mb0luZGV4IH07CiB9CiAKLXN0ZDo6dHVwbGU8
VW5saW5rZWRDYWxsTGlua0luZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBKSVQ6OmFk
ZFVubGlua2VkQ2FsbExpbmtJbmZvKCkKK1VubGlua2VkQ2FsbExpbmtJbmZvKiBKSVQ6OmFkZFVu
bGlua2VkQ2FsbExpbmtJbmZvKCkKIHsKLSAgICB2b2lkKiB1bmxpbmtlZENhbGxMaW5rSW5mb0lu
ZGV4ID0gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1fdW5saW5r
ZWRDYWxscy5zaXplKCkpKTsKLSAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9ICZtX3Vu
bGlua2VkQ2FsbHMuYWxsb2MoKTsKLSAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0luZGV4ID0gYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlOjpD
YWxsTGlua0luZm8sIHVubGlua2VkQ2FsbExpbmtJbmZvSW5kZXgpOwotICAgIHJldHVybiBzdGQ6
OnR1cGxlIHsgaW5mbywgY2FsbExpbmtJbmZvSW5kZXggfTsKKyAgICByZXR1cm4gJm1fdW5saW5r
ZWRDYWxscy5hbGxvYygpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xMDEwLDcgKzEw
MDcsNiBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMg
PSBGaXhlZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4obV91bmxpbmtlZENhbGxzLnNpemUo
KSk7CiAgICAgaWYgKG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzLnNpemUoKSkKICAgICAgICAg
c3RkOjptb3ZlKG1fdW5saW5rZWRDYWxscy5iZWdpbigpLCBtX3VubGlua2VkQ2FsbHMuZW5kKCks
IG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzLmJlZ2luKCkpOwotICAgIG1faml0Q29kZS0+bV9l
dmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CiAgICAgbV9q
aXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gRml4ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbz4obV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpOwogICAgIGlmIChtX2ppdENv
ZGUtPm1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKQogICAgICAgICBzdGQ6Om1vdmUobV91bmxp
bmtlZFN0dWJJbmZvcy5iZWdpbigpLCBtX3VubGlua2VkU3R1YkluZm9zLmVuZCgpLCBtX2ppdENv
ZGUtPm1fdW5saW5rZWRTdHViSW5mb3MuYmVnaW4oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApp
bmRleCBkZTJjNWNlNzcwYmJkNTkzYjdhZTVmZDFhNjUyNjczODk0M2RkOWExLi42N2I0M2Q4ZmEz
MGI3MmNiZDQ5NDQ2MjI4YzY0Mjk2NGYzZDMzNTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTE1Myw3ICsxNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1Y3QgQ2FsbENvbXBp
bGF0aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247
CiAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKLSAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAg
ICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVz
c1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBA
IC0yOTQsMTYgKzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCk7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlE
ID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisgICAg
ICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmKTsKIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3Am
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29u
c3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBA
IC03MDYsNiArNzA1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlv
bj4KICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmV0dXJuRnJvbUJhc2VsaW5l
R2VuZXJhdG9yKFZNJik7CisKKyAgICBwcml2YXRlOgogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgICAgICAvLyBUaHVuayBnZW5lcmF0b3JzLgogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYpOwpAQCAtNzIxLDcgKzcyNCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9w
X2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRv
cihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9y
KFZNJik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BH
ZXRGcm9tU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCkBAIC05NTgsNyArOTYwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBhZGRU
b0NvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2w6OlR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxs
cHRyKTsKICAgICAgICAgc3RkOjp0dXBsZTxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudD4gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwot
ICAgICAgICBzdGQ6OnR1cGxlPFVubGlua2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudD4gYWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8qIGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CiAKICAgICAgICAgSW50ZXJw
cmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTEwMjksNyArMTAzMSw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIFZlY3RvcjxKSVRDb25zdGFudFBvb2w6OlZhbHVlPiBtX2NvbnN0YW50
UG9vbDsKICAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENv
bnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07Ci0gICAgICAg
IEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJ
bmZvczsKICAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCAwOTE5OTE1ODQ2
OGMwZmUxMDJiNWRmYmZhMmJlNGZlMTczMTk3ZTJiLi44MTUxZmZkZTZhOWYyZWIwYzMyNDc1ZDVi
ZmRkYWFlZGExMDAwMzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAg
LTU5LDE3ICs1OSwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5W
YWx1ZUdQUiAocmV0dXJuVmFsdWVHUFIyL3JldHVyblZhbHVlR1BSIG9uIDMyLWJpdCkuCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUpTUik7Ci0K
LSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKLSAgICByZXQoKTsKLSNlbHNlCi0gICAgZW1pdE5ha2VkTmVhckp1bXAodm0o
KS5nZXRDVElTdHViKG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKS5jb2RlKCkpOwotI2VuZGlmCisg
ICAgZW1pdE5ha2VkTmVhckp1bXAodm0oKS5nZXRDVElTdHViKHJldHVybkZyb21CYXNlbGluZUdl
bmVyYXRvcikuY29kZSgpKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihWTSYpCit7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKKworICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAg
IGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAi
QmFzZWxpbmU6IG9wX3JldF9oYW5kbGVyIik7Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKQEAgLTg0LDcg
Kzg4LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92
YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKK0pJVDo6
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIHVuc2lnbmVkIGNo
ZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwogICAgIGludCBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwg
Y2hlY2twb2ludCk7CkBAIC05Nyw3ICsxMDEsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHRtcEpTUik7CiAgICAgICAg
IEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbCh0bXBKU1IpOwogICAgICAgICBsb2FkMzIoQWRk
cmVzcyh0bXBKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCB0
bXBHUFIpOwotICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBPcENh
bGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86
Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29k
ZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmls
ZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAgICAgfQogCkBAIC0xMTAsNyArMTE0LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZv
aWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK0pJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFs
dWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC0xNjAsNyArMTY0LDcgQEAgSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmYKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1Q1LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0
KSwgcmVnVDIpOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDAp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFk
YXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcmVnVDMpOwogICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdU
MywgcmVnVDIpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5m
bzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CkBAIC0yMDMsNjQg
KzIwNyw1OSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+
KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJ
bmZvOjpDYWxsLCByZWdUMCk7Ci0KICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUu
bV9hcmd2OwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVv
ZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZFZhbHVlKEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsZWVKU1IpOwogICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmpl
Y3QoKm1fdm0sIGluZm8pOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0g
cmVnVDI7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcENh
bGxFdmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BS
KTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBj
YWxsTGlua0luZm9HUFIsIENhbGxNb2RlOjpSZWd1bGFyKTsKICAgICByZXNldFNQKCk7CiAKICAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJ
bmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7
Ci0gICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAg
c2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7CisgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVGFpbENhbGw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOworICAg
IEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgc2Nv
cGVkTGFtYmRhPHZvaWQoKT4oWyZdeworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVm
ZmxlRGF0YSB7IH07CisgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29k
ZS5tX2FyZ2M7CisgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzaHVm
ZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsK
KyAgICAgICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3RlcjsKICNlbmRpZgotICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQotICAgICAg
ICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVn
aXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAg
ICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9Ci0gICAgICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpk
aXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAotICAgICAgICAgICAgICAg
IERhdGFGb3JtYXRKUyk7Ci0gICAgfQorICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQor
ICAgICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8g
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNv
ZGUubV9hcmdjKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1f
YXJnYzsgKytpKSB7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAg
ICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAgICAg
ICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVj
b2RlLm1fYXJndiwKKyAgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAg
fQogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVj
b3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7CisgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5w
YXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRh
Z0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpKTsKKyAgICAgICAgc2h1ZmZsZURhdGEuY2Fs
bGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNS
LnBheWxvYWRHUFIoKSk7CiAjZW5kaWYKLSAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7Ci0KLSAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJl
Z1QyOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgY2FsbExpbmtJbmZv
R1BSKTsKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0lu
Zm9HUFIsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyIHNodWZmbGVyIHsgKnRoaXMs
ICpzaHVmZmxlRGF0YSB9OworICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2h1ZmZsZXIgeyAqdGhpcywgc2h1
ZmZsZURhdGEgfTsKICAgICAgICAgc2h1ZmZsZXIubG9ja0dQUihjYWxsTGlua0luZm9HUFIpOwog
ICAgICAgICBzaHVmZmxlci5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICB9KTsKKyAgICB9KSk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAotICAgIHNodWZmbGVEYXRhLT5zaHJpbmtU
b0ZpdCgpOwotICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRh
KTsKLQogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsK
ICAgICAKQEAgLTI4OCwxNyArMjg3LDE0IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiAgICAg
Ki8KIAogICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOwogICAgIGlmIChv
cGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgc3RkOjp0aWUoaW5mbywgaW5mb0Nv
bnN0YW50KSA9IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIGluZm8gPSBhZGRV
bmxpbmtlZENhbGxMaW5rSW5mbygpOwogICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OwotICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpOwogICAgICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZv
LnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87
Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CiAgICAgfQotICAgIGNvbXBpbGVTZXR1cEZy
YW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOworICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVj
b2RlKTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CkBAIC0z
MTYsMTYgKzMxMiwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChjYWxsZWVKU1IpKTsKICNlbmRpZgogCi0gICAgaWYgKGNvbXBpbGVU
YWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkp
CisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5k
ZXgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiA9IHJlZ1QyOwotICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5m
b0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CiAgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5w
YXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0
aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxs
ZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+
KFsmXXsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAg
IHByZXBhcmVGb3JUYWlsQ2FsbFNsb3coY2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgfSk7Cisg
ICAgICAgIH0pKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICAgICAgYXV0
byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKQEAgLTM0NCwx
NSArMzQwLDE2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkKQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCk7CiAKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgbG9hZENvbnN0
YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZv
Q29uc3RhbnQsIHJlZ1QyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgcmVnVDIpOwogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM2Niw3ICszNjMsNiBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogCiAgICAgcmVzZXRTUCgpOwogCi0gICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4
IGY4NDQ1ODc4MDNjMjYxOGM2ODAzOTgzNmNlZTZjN2IzNGZkMmMzMDQuLjJmZTIzYzQ5ZmQwZjk0
MDkxZjY4NjA1Yjc1N2FlMmNlMzIyMDE0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcApAQCAtMzcwLDIxICszNzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcihWTSYpCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQotICAgIGppdC5jaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVz
Rm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7Ci0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwot
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9wX3JldF9oYW5kbGVyIik7
Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KIHZvaWQgSklUOjplbWl0
X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRp
dmU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRl
eCBjYWY0N2ZhNTQzYzg0MmUyNzBmMWNkMjUxODdmNDU0MTVjYmRmZTM4Li5kMWU1MzJjNWVmNDAz
OTQ0YWIzYzE5Zjc0ZGM1NDY4YmNmNjM0YWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTE0NjQsNyArMTQ2NCw3IEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lCiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CiAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5
UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHZtLmdl
dENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLAogICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVw
VGhlRnJhbWUpKTsKICAgICAgICAgICAgIH0KIApAQCAtMTQ3Niw3ICsxNDc2LDcgQEAgc3RhdGlj
IFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUKICAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERh
dGE6OlR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNj
b3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwogICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5
UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICB2bS5nZXRDVElUaHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAg
IH0KIApAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUKICAgICAg
ICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAor
ICAgICAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAKQEAgLTE1MDIsMTEgKzE1
MDIsMTEgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUKICAgICBBU1NFUlQoY29uc3RydWN0RGF0
YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKICAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3Qs
IGNhbGxlZSkpOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgIHZtLmdldENUSVN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICB2bS5nZXRDVElU
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiB9CiAK
LUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1
cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQorU2xvd1BhdGhSZXR1cm5UeXBlIGxp
bmtGb3IoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CkBAIC0xNTQ5LDcgKzE1NDksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbAog
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFu
ZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJn
ZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAg
ICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihL
ZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfTsKIApAQCAtMTU4MSw3ICsxNTgxLDEyIEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBl
LCAoQ2FsbEZyYW1lKiBjYWxsCiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUp
KTsKIH0KIAotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1
cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQoreworICAgIHJldHVybiBsaW5rRm9y
KGNhbGxlZUZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7Cit9CisKK1Nsb3dQYXRo
UmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
LCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKQEAgLTE2MDgsNyArMTYxMyw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKICAgICAgICAgYXV0byBo
YW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1Rh
cmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCmluZGV4IDRiNWQwMTFmOTA2YTMwMzJlMmE1Yjg1MGEzYTBiOWE0YzY4
MzRiZjMuLjIwMDdiNTUxZDU2ZjA3ZGFiNzk5MTM5MjNmODQ2NTYwNDVjMmYwYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0zMzIsNiArMzMyLDkgQEAg
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRp
bWl6ZSwgRW5jb2RlZEpTVmFsdWUsICgKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywgdm9pZCwgKFZNKikp
OwogCitTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqLCBKU0dsb2JhbE9iamVj
dCosIENhbGxMaW5rSW5mbyopOworU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVu
Y3Rpb24oSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8qLCBKU0NlbGwq
Jik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDM0NGM5NTMxMjNiM2Q0M2Q2OWY2Njlh
Mzk0YmE1MDhjYzI1YTZlZTMuLmE0MjllZTY0OTk5YmExOGIwZDQwZGQwOTY2NTI4MGI4NTRlZWMw
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtMTQ0Nyw5ICsxNDQ3
LDggQEAgc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2UKIAogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3Io
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVu
a0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxM
aW5rSW5mby5jYWxsTW9kZSgpKTsKICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZv
LCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklU
U3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7CiB9CiAKIHN0YXRpYyBKU0Nl
bGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiBjYWxsZWUpCkBAIC0xNTQ1LDcgKzE1NDQsNiBA
QCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZgogICAgIH0KICAgICBjYWxsTGlua0luZm8uY2xlYXJT
ZWVuKCk7CiAgICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOwotICAgIGNhbGxMaW5rSW5mby5j
bGVhclNsb3dTdHViKCk7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQogICAgICAg
ICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7CiB9CkBAIC0xNTU0LDcgKzE1NTIsNyBAQCB2b2lkIHVu
bGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0lu
Zm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAotICAgIHJldmVydENhbGwo
dm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2Fs
bExpbmtJbmZvLCB2bS5nZXRDVElMaW5rQ2FsbCgpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPigpKTsKIH0KIAogc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCkBAIC0xNTY1LDkgKzE1
NjMsOCBAQCBzdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSQogICAgIGRhdGFMb2dMbklmKHNob3VsZER1
bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spLAogICAgICAgICAiTGlua2luZyB2aXJ0
dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFt
ZS0+Y29kZU9yaWdpbigpKSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJ
bmZvKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgp
KTsKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAg
Y2FsbExpbmtJbmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZt
LCB2aXJ0dWFsVGh1bmspKTsKICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgp
OwogfQogCkBAIC0xODAzLDggKzE4MDAsMTAgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIg
PSBjb2RlUHRyOwotICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkKKyAgICAgICAgaWYgKG5lZWRz
RG9uZUp1bXApIHsKKyAgICAgICAgICAgIEFTU0VSVCghaXNEYXRhSUMpOwogICAgICAgICAgICAg
ZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwpAQCAtMTgyOCwxNSArMTgyNywyMSBAQCB2b2lkIGxp
bmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENhbAogICAgIH0KICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKICAgICBzdHViSml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZv
OjpyZWdUMik7Ci0gICAgaWYgKGlzRGF0YUlDICYmICFjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgp
KSB7Ci0gICAgICAgIC8vIFdlIHdlcmUgY2FsbGVkIGZyb20gdGhlIGZhc3QgcGF0aCwgZ2V0IHJp
ZCBvZiBhbnkgcmVtbmFudHMgb2YgdGhhdAotICAgICAgICAvLyB3aGljaCBtYXkgZXhpc3QuIFRo
aXMgcmVhbGx5IG9ubHkgbWF0dGVycyBmb3IgeDg2LCB3aGljaCBhZGp1c3RzCi0gICAgICAgIC8v
IFNQIGZvciBjYWxscy4KLSAgICAgICAgc3R1YkppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwoR1BSSW5mbzo6cmVnVDQpOworCisgICAgLy8gMS4gSWYgaXQgaXMgbm90IERhdGFJQywg
bGlua1JlZ2lzdGVyIGlzIG5vdCBwb2ludGluZyB0aGUgZG9uZUxvY2F0aW9uLgorICAgIC8vIDIu
IElmIGl0IGlzIHRhaWwtY2FsbCwgbGlua1JlZ2lzdGVyIGlzIG5vdCBwb2ludGluZyB0aGUgZG9u
ZUxvY2F0aW9uIGZvciBzbG93LWNhbGwgY2FzZS4KKyAgICAvLyBUaHVzIHdlIG5lZWQgdG8gcHV0
IGl0IGZvciB0aGUgc2xvdy1wYXRoIGNhbGwuCisgICAgaWYgKCFpc0RhdGFJQykgeworICAgICAg
ICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5k
b25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdU
NCk7CisgICAgICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BS
SW5mbzo6cmVnVDQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpc0RhdGFJQyk7Cisg
ICAgICAgIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBzdHVi
Sml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtLmdldENUSVN0dWIoSklUOjpy
ZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNvZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1
cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgfQogICAgIH0K
LSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
by5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpy
ZWdUNCk7Ci0gICAgCi0gICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihHUFJJbmZvOjpyZWdUNCk7CisKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0
dWJKaXQuanVtcCgpOwogICAgICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJK
aXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKQEAgLTE4NTgsOCArMTg2MywxMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0Nh
bGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENh
bAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKCFkb25lLmVtcHR5KCkpCisgICAgaWYgKCFkb25l
LmVtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKKyAgICB9CiAgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4o
dm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkp
OwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCmluZGV4IDI5NzE0N2UxYzRjMDhkY2NkNWY3Yjc4NjQxMWQ4NTViMmExZGU0N2Mu
LmRiZDVhYmQzNzg4ZDcxYjgwMzA1YmI4NTFmYmNjMjcxM2U4N2IwMGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTM0NCw0OCArMzQ0LDI1
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxU
aHVua0ZvclJlZ3VsYXJDYWxsKFZNJiB2bSkKICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZt
LCBDYWxsTW9kZTo6UmVndWxhciwgQ29kZUZvckNhbGwpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3Ry
dWN0KFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6
UmVndWxhciwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDYWxsKFZNJiB2bSkKIHsK
ICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNh
bGwpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLXN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0Zv
ckNvbnN0cnVjdENhbGwoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0s
IENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDYWxsKTsKLX0KLQogc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29u
c3RydWN0KFZNJiB2bSkKIHsKICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9k
ZTo6Q29uc3RydWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiB2bSwgQ2FsbE1vZGUgY2FsbE1vZGUpCiB7Ci0g
ICAgYXV0byBtb2RlID0gY2FsbExpbmtJbmZvLmNhbGxNb2RlKCk7Ci0gICAgYXV0byBraW5kID0g
Y2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpOwogICAgIGF1dG8gZ2VuZXJhdG9yID0g
WyZdICgpIC0+IFRodW5rR2VuZXJhdG9yIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAg
ICAgIHN3aXRjaCAoY2FsbE1vZGUpIHsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoK
LSAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKLSAgICAgICAgICAgIHJldHVybiB2aXJ0
dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0OworICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxU
aHVua0ZvclJlZ3VsYXJDYWxsOwogICAgICAgICBjYXNlIENhbGxNb2RlOjpUYWlsOgotICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZp
cnR1YWxUaHVua0ZvclRhaWxDYWxsOwotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zv
clRhaWxDb25zdHJ1Y3Q7CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENh
bGw7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OkNvbnN0cnVjdDoKLSAgICAgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtG
b3JDb25zdHJ1Y3RDYWxsOwogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0
cnVjdENvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKaW5k
ZXggMGY5ZjZlMmQzNmY2ZGQyM2UxODcyNmFjZTYzMTRhMzBhMjAxZGJjZS4uYWI3Y2Y2NmM0MjE1
MWVlMDE5NThjMWFiMjJmMjlmY2Q4ZGQ3MDE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC00OSw3ICs0OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbExp
bmtJbmZvJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVua0ZvcihWTSYsIENhbGxNb2RlKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCBlOGRhZmY3ZDg4YjMw
YzZiZjg0NzIzMTRiZTJmMWM3OTYwZjI0N2Y1Li5kMGIzNzM4OTIxYTRmMDAxNTEyZTdkZWUzYTg0
NDNjNTE5M2JkMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNw
cApAQCAtNTgsNiArNTgsNyBAQCBleHRlcm4gIkMiIHZvaWQgd2FzbV9lbnRyeSh2b2lkKiwgdm9p
ZCosIHZvaWQqKTsKIGV4dGVybiAiQyIgdm9pZCB2bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGlu
ZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKHZvaWQp
OwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJhbXBvbGluZSh2b2lk
KTsKK2V4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5l
KHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIGV4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lKHZvaWQp
OwogZXh0ZXJuICJDIiB2b2lkIHJldHVybkZyb21MTEludFRyYW1wb2xpbmUodm9pZCk7CiAjZW5k
aWYKQEAgLTE1Myw3ICsxNTQsNyBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQot
ICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQ
dHJUYWcpKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0
ZShKU0VudHJ5UHRyVGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGVS
ZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8
dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxK
U0VudHJ5VHJhbXBvbGluZSkpKSk7CiAgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsSlNFbnRyeVB0clRhZyldPSBjb2Rl
UmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAtMTYxLDExICsxNjIsMTkg
QEAgdm9pZCBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVS
ZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGNvZGVSZWYu
Y29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5U2xvd1BhdGhQdHJUYWcpKTsKKyAg
ICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRy
VGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5j
dGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1Bh
dGhUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9
IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQorICAgIHsK
KyAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRl
KEpTRW50cnlQdHJUYWcsIGZhbHNlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGVS
ZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8
dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxX
aXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZSkpKSk7CisgICAgICAgIGdfanNjQ29uZmlnLmxs
aW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsV2l0aG91dFVu
dGFnSlNFbnRyeVB0clRhZyldPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDQ5NGVmNzYxZTMyNzkyM2YxNDIwMmZhOGM0ZTFj
ZDMxMjg0MjBjNjQuLmQxYmVmZDAyZDVhNDcxNDZjYzIyYjlkYWM1ZTM2YTg4OGVkY2RhMzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAt
NTgyLDYgKzU4MiwxNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICBM
TElOVF9SRVRVUk5fVFdPKHBjLCBjYWxsRnJhbWUpOwogfQogCitleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBsbGludF9saW5rX2NhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIHZvaWQq
KQoreworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxM
aW5rSW5mbyk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3ZpcnR1
YWxfY2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgdm9pZCopCit7CisgICAgSlNDZWxsKiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVu
Y3Rpb24oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbElnbm9yZWQpOworfQorCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bmV3X29iamVjdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTgxOSw3ICsxODMwLDggQEAg
c3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxs
ZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1
cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9i
YWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2Fs
bG93R0M7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxl
ZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBj
YWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJz
OworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwg
TExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBzbG93UGF0aExvZygiQ2FsbCBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwg
IlxuIik7CkBAIC0xODM4LDcgKzE4NTAsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhh
bmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAg
ICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2
bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKICAg
ICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihn
bG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVu
dHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7Cisg
ICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpz
aXplSW5SZWdpc3RlcnM7CisgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwg
Y2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAg
c2xvd1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2Fs
bGVlLCAiXG4iKTsKQEAgLTE4NDcsNyArMTg2MCw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5
cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUs
CiAgICAgTExJTlRfQ0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFDb25zdHJ1Y3Rv
ckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiB9CiAKLWlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlLCBMTEludENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gbnVsbHB0cikKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxs
KENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNW
YWx1ZSBjYWxsZWVBc1ZhbHVlKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVl
RnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTg2MiwxNCArMTg3NSw5IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVj
aWFsaXphdGlvbktpCiAgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5h
bWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAgQVNT
RVJUKCEhY29kZVB0cik7Ci0KLSAgICAgICAgICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19T
TE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2Rl
UHRyKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpT
RW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBM
TElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2FsbGVy
U1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAg
ICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGNhbGxlZUZy
YW1lLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7CiAgICAgfQpAQCAtMTkwNCw3NCArMTkxMiw5IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAgfQogCiAgICAgQVNTRVJUKCEhY29kZVB0cik7
Ci0gICAgCi0gICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZv
KSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5t
X2xvY2spOwotICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNhbGxlckNvZGVCbG9jaywg
Y2FsbGVlLCBjb2RlUHRyKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAgICAgIGNv
ZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAg
fQotCiAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxs
ZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVy
aWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgT3AmJiBi
eXRlY29kZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBjaGVja3BvaW50
SW5kZXggPSAwKQotewotICAgIC8vIFRoaXMgbmVlZHMgdG86Ci0gICAgLy8gLSBTZXQgdXAgYSBj
YWxsIGZyYW1lLgotICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBpbGUg
aXQgaWYgbmVjZXNzYXJ5LgotICAgIC8vIC0gSWYgcG9zc2libGUsIGxpbmsgdGhlIGNhbGwncyBp
bmxpbmUgY2FjaGUuCi0gICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUgYWRk
cmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCi0gICAgSlNWYWx1ZSBj
YWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGNhbGxlZUZvcihieXRlY29kZSwg
Y2hlY2twb2ludEluZGV4KSk7Ci0gICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNh
bGxGcmFtZSAtIHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3Bv
aW50SW5kZXgpOwotICAgIAotICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2lu
dEluZGV4KSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+
c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHNldFVwQ2FsbChjYWxsZWVG
cmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSwgJmNhbGxMaW5rSW5mb0ZvcihtZXRhZGF0YSwgY2hl
Y2twb2ludEluZGV4KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxs
KQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2Fs
bChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsK
LX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCkKLXsKLSAgICBM
TElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2Nr
LCBjYWxsRnJhbWUsIHBjLT5hczxPcFRhaWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQotCi1M
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0KQotewotICAgIExMSU5UX0JF
R0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxG
cmFtZSwgcGMtPmFzPE9wQ29uc3RydWN0PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7Ci19Ci0KLUxM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpCi17Ci0gICAg
TExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxG
cmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JPcGVuPigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRvck9w
ZW46OnN5bWJvbENhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0
ZXJhdG9yX25leHRfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9QQVJB
TShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdl
bmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck5leHQ+KCks
IENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQpKTsKKyAgICBhdXRvKiBj
YWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJz
OworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKQpAQCAtMjA0Myw4ICsxOTg2
LDggQEAgZW51bSBjbGFzcyBTZXRBcmd1bWVudHNXaXRoIHsKICAgICBDdXJyZW50QXJndW1lbnRz
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
dmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgU2V0QXJndW1lbnRzV2l0aCBzZXQpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPcCwgU2V0QXJndW1lbnRzV2l0aCBzZXQ+CitpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1
Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKQogewogICAgIExMSU5UX0JFR0lOX05P
X1NFVF9QQygpOwogCkBAIC0yMDUzLDExICsxOTk2LDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlv
bioKICAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNh
bGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3A+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRl
Y29kZS5tX2NhbGxlZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gdm0ubmV3Q2Fs
bEZyYW1lUmV0dXJuVmFsdWU7Ci0KLSAgICBpZiAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9i
amVjdCkgeworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdm0udmFy
YXJnc0xlbmd0aCArIDE7CisgICAgaWYgY29uc3RleHByIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0
aDo6T2JqZWN0KSB7CiAgICAgICAgIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRl
Y29kZS5tX3RoaXNWYWx1ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2FyZ3Vt
ZW50cyksIGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwogICAgICAg
ICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogICAgIH0gZWxzZQpA
QCAtMjA2NywyNyArMjAxMSwzMCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NT
ZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2FsbGVl
RnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkp
ID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwogCi0g
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwg
a2luZCwgY2FsbGVlQXNWYWx1ZSkpOworICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLnVwZGF0
ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KTsKKworICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbGVyU1ApOwog
fQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQogewotICAg
IHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZv
ckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1
cDxPcENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwgcGMs
IENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxf
Y2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFy
Z3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Qp
OworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNldEFyZ3VtZW50
c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogewot
ICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGNhbGxG
cmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRz
KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBT
ZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9y
Q2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFy
YXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncz4oY2Fs
bEZyYW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsK
KyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncywgU2V0QXJndW1lbnRz
V2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0
clRhZz4gcmV0dXJuUG9pbnQpCkBAIC0yMTEwLDcgKzIwNTcsOCBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0
cnVjdGlvbgogICAgIAogICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1
ZTo6ZW5jb2RlKGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNvZGUubV9lY21h
TW9kZSkpOwogICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICBMTElOVF9DQUxMX1JFVFVS
TihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1
ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7
CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNp
emVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxl
clNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4OGFhNmFhOTY0
ZmI2ZTA5YjY2Li4yNDFkMzM0YWExZDBiNzlhMWI1MjAxOTgzYzdiMTVhYTA2NWNlMWJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMzgsNiAr
MzgsOCBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF90cmFjZV9vcGVyYW5kKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwgaW50
IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CiBleHRlcm4gIkMi
IFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBjb25zdCBJ
bnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBSRUZF
UkVOQ0VEX0ZST01fQVNNOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlu
a19jYWxsKENhbGxGcmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKiwgdm9pZCop
OworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxG
cmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKiwgdm9pZCopOwogZXh0ZXJuICJD
IiB2b2lkIGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUqLCBKU0NlbGwqKSBSRUZF
UkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIAogI2RlZmluZSBMTElOVF9TTE9XX1BBVEhf
REVDTChuYW1lKSBcCkBAIC0xMTksOSArMTIxLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMpOwogTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuY19leHApOwogTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zZXRfZnVuY3Rpb25fbmFtZSk7Ci1MTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3QpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMpOwogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMTMxLDgg
KzEzMCw2IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0
X3ZhcmFyZ3MpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2
YWwpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lk
ZTE2KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dp
ZGUzMik7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29w
ZW5fY2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9y
X25leHRfY2FsbCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RlYXJf
b2ZmX2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0
cmNhdCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCA0
NjJjYmZiZTRlMzQ1Njg0NWUwNWFhOGJjMGM0ODExNTNjYmI4ZDBhLi4xNjAzYzJjNzg1NGM5OTli
ZTllNmM1NzA1MzM2Y2ZmNzQyNzI5MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFRodW5rcy5jcHAKQEAgLTM0Niw5ICszNDYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiBwb2ludGVy
LCBQdAogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpy
ZWdUMywgdGFnKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9p
bnRlciksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywg
T3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUNSwgdGFnKTsKKyAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86
OnJlZ1Q1KTsKKyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUNSwgT3BlcmF0aW9uUHRyVGFn
KTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OkxMSW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUg
dGh1bmsiLCBuYW1lKTsKQEAgLTM2NiwxMyArMzY2LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCogcG9pbnRl
ciwKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnLCAiTExJbnQgJXMgd2FzbSBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxH
YXRlKFB0clRhZyB0YWcpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZywgYm9vbCB1bnRhZykKIHsKICAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCi0gICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BS
MiwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02
NFJlZ2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmZhckp1bXAo
R1BSSW5mbzo6cmVnVDAsIHRhZyk7CisgICAgaWYgKHVudGFnKSB7CisgICAgICAgIGppdC51bnRh
Z1B0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAg
IGppdC52YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyKTsKKyAgICB9CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6YXJndW1lbnRHUFI3
LCB0YWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50IHRhaWwgY2Fs
bCBnYXRlIHRodW5rIik7CkBAIC01NzMsOCArNTc1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IHJldHVybkxvY2F0aW9uVGh1bmsoT3Bjb2RlSUQgb3Bjb2RlSUQsIE9w
Y28KICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3Jfb3BlbikKICAgICBMTElO
VF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3JfbmV4dCkKICAgICBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfY29uc3RydWN0KQotICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3Zh
cmFyZ3Nfc2xvdykKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFy
Z3Nfc2xvdykKKyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKQorICAg
IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X2lkKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihv
cF9nZXRfYnlfdmFsKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCmluZGV4IGI4N2M0MjBjYmU0
MDJhMWYwY2YwODY4MTA3YjVhZmQ2ZGJjZjU0YWMuLjA1ZWM2MDFjMDE2NGNiOTU0YjczYTIxYzcz
NTFmZjAxMGZlYTcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5oCkBAIC04OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+IGppdENhZ2VQdHJUaHVuaygpOwogI2lmIENQVShBUk02NEUpCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lk
KiwgUHRyVGFnLCBjb25zdCBjaGFyKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNo
YXIqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0
ZVRhaWxDYWxsR2F0ZShQdHJUYWcpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZywgYm9vbCk7CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBsb29wT1NSRW50cnlHYXRlVGh1bmso
KTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGVudHJ5T1NS
RW50cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+IHdhc21PU1JFbnRyeUdhdGVUaHVuaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGJiODhiNmZkYjA5OWI0
OTlhZTZmZjRlODEwMTAxNTA0ZGFhNmQ0ZTMuLjNhMjUyMzMwN2I0Y2QwMGU5MjYwMWRmNjAwZDcz
NWJiNGY4OTY3MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTU1MSw2ICs1NTEsNyBAQCBjb25zdCBTeW1ib2xUeXBl
ID0gY29uc3RleHByIFN5bWJvbFR5cGUKIGNvbnN0IE9iamVjdFR5cGUgPSBjb25zdGV4cHIgT2Jq
ZWN0VHlwZQogY29uc3QgRmluYWxPYmplY3RUeXBlID0gY29uc3RleHByIEZpbmFsT2JqZWN0VHlw
ZQogY29uc3QgSlNGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIgSlNGdW5jdGlvblR5cGUKK2NvbnN0
IEludGVybmFsRnVuY3Rpb25UeXBlID0gY29uc3RleHByIEludGVybmFsRnVuY3Rpb25UeXBlCiBj
b25zdCBBcnJheVR5cGUgPSBjb25zdGV4cHIgQXJyYXlUeXBlCiBjb25zdCBEZXJpdmVkQXJyYXlU
eXBlID0gY29uc3RleHByIERlcml2ZWRBcnJheVR5cGUKIGNvbnN0IFByb3h5T2JqZWN0VHlwZSA9
IGNvbnN0ZXhwciBQcm94eU9iamVjdFR5cGUKQEAgLTExNTEsMjcgKzExNTIsMjcgQEAgbWFjcm8g
Y2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmkKICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxsZWUKICAg
ICBlbHNpZiBBUk02NEUKICAgICAgICAgbWFjcm8gY2FsbE5hcnJvdygpCi0gICAgICAgICAgICBs
ZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCAr
IChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAg
ICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAg
ICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVN
YXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhNworICAgICAg
ICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAg
ICAgICAgIF9qc190cmFtcG9saW5lXyVvcGNvZGVOYW1lJToKLSAgICAgICAgICAgIGNhbGwgdDMs
IGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5k
CiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUxNigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZp
ZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIg
R2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1w
IFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxl
YXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsg
KGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGE3CisgICAg
ICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAg
ICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUxNjoKLSAgICAgICAgICAg
IGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAg
ICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUzMigpCi0gICAgICAgICAgICBsZWFw
IEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChj
b25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhMgotICAgICAg
ICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAg
ICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdH
YXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0clNpemUs
IGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0
clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUzMjoKLSAg
ICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQ
dHJUYWcKICAgICAgICAgZW5kCiAKLSAgICAgICAgbW92ZSBjYWxsZWUsIHQzCisgICAgICAgIG1v
dmUgY2FsbGVlLCB0NQogICAgICAgICBzaXplKGNhbGxOYXJyb3csIGNhbGxXaWRlMTYsIGNhbGxX
aWRlMzIsIG1hY3JvIChnZW4pIGdlbigpIGVuZCkKICAgICBlbHNlCiAgICAgICAgIGNhbGwgY2Fs
bGVlLCBjYWxsUHRyVGFnCkBAIC0xMjA5LDEyICsxMjEwLDIzIEBAIG1hY3JvIGNhbGxUYXJnZXRG
dW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUs
IGRzdFZpCiAgICAgZW5kCiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxl
ZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCi0gICAgYWRkcCBDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSwgc3AKK21hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCh0ZW1wMSwg
dGVtcDIsIHRlbXAzLCB0ZW1wNCkKIGVuZAogCi0jIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1l
Ci1tYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0
ZW1wNCwgY2FsbFB0clRhZykKK21hY3JvIGludm9rZUZvclJlZ3VsYXJDYWxsKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVy
LCBkaXNwYXRjaCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKKyAgICBjYWxsVGFy
Z2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIGNhbGxQdHJUYWcpCitl
bmQKKworIyB0NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxh
ckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBk
c3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorZW5kCisKK21hY3JvIHBy
ZXBhcmVGb3JTbG93UmVndWxhckNhbGwoKQorZW5kCisKKyMgc3AgcG9pbnRzIHRvIHRoZSBuZXcg
ZnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDU2l6ZQorIyBXZSBsZWF2ZSBjZnIgdGVtcDQgdG8gdXNl
IGl0IGZvciB1bnRhZ2dpbmcuCittYWNybyBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAy
LCB0ZW1wMywgdGVtcDQpCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogCiAg
ICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzW2Nmcl0s
IHRlbXAyCkBAIC0xMjMyLDE4ICsxMjQ0LDE3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChj
YWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIG1vdmUg
Y2ZyLCB0ZW1wMQogICAgIGFkZHAgdGVtcDIsIHRlbXAxCiAKLSAgICBsb2FkaSBQYXlsb2FkT2Zm
c2V0ICsgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbc3BdLCB0ZW1wMgorICAgIGxvYWRpIFBh
eWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIENhbGxlckZyYW1lQW5k
UENTaXplW3NwXSwgdGVtcDIKICAgICAjIFdlIGFzc3VtZSA8IDJeMjggYXJndW1lbnRzCiAgICAg
bXVsaSBTbG90U2l6ZSwgdGVtcDIKICAgICBhZGRpIFN0YWNrQWxpZ25tZW50IC0gMSArIENhbGxG
cmFtZUhlYWRlclNpemUsIHRlbXAyCiAgICAgYW5kaSB+U3RhY2tBbGlnbm1lbnRNYXNrLCB0ZW1w
MgogCiAgICAgaWYgQVJNdjcgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIENfTE9PUCBvciBDX0xPT1Bf
V0lOIG9yIE1JUFMgb3IgUklTQ1Y2NAotICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXpl
LCBzcAogICAgICAgICBzdWJpIENhbGxlckZyYW1lQW5kUENTaXplLCB0ZW1wMgogICAgICAgICBs
b2FkcCBDYWxsZXJGcmFtZUFuZFBDOjpyZXR1cm5QQ1tjZnJdLCBscgogICAgIGVsc2UKLSAgICAg
ICAgYWRkcCBQdHJTaXplLCBzcAorICAgICAgICBzdWJwIFB0clNpemUsIHNwCiAgICAgICAgIHN1
YmkgUHRyU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgUHRyU2l6ZVtjZnJdLCB0ZW1wMwogICAg
ICAgICBzdG9yZXAgdGVtcDMsIFtzcF0KQEAgLTEyNzAsOSArMTI4MSwxMiBAQCBtYWNybyBwcmVw
YXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0
clRhZykKICAgICBlbmQKIAogICAgIG1vdmUgdGVtcDEsIHNwCitlbmQKKworbWFjcm8gaW52b2tl
Rm9yVGFpbENhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBj
YWxsUHRyVGFnKQogICAgIGlmIEFSTTY0RQotICAgICAgICBtb3ZlIHRlbXA0LCBhMgotICAgICAg
ICBtb3ZlIGNhbGxlZSwgYTAKKyAgICAgICAgbW92ZSBtYXliZU9sZENGUiwgYTIKKyAgICAgICAg
bW92ZSBjYWxsZWUsIGE3CiAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6
b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbCVjYWxs
UHRyVGFnJSkgKiBQdHJTaXplLCBhMQogICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnICMgJWNhbGxQdHJUYWclCiAgICAgZWxzZQpAQCAtMTI4MCw2ICsxMjk0LDIyIEBAIG1h
Y3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0
LCBjYWxsUHRyVGFnKQogICAgIGVuZAogZW5kCiAKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHBy
ZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVj
dCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbFB0
clRhZykKKyAgICBpZiBBUk02NEUKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9u
W3Q1XSwgYTcKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRP
ZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnRhaWxDYWxsV2l0aG91dFVudGFn
JWNhbGxQdHJUYWclKSAqIFB0clNpemUsIGExCisgICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyAlY2FsbFB0clRhZyUKKyAgICBlbHNlCisgICAgICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvblt0NV0sIGExCisgICAgICAgIGptcCBhMSwgY2FsbFB0clRhZworICAg
IGVuZAorZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93VGFpbENhbGwoKQorICAgIHJlc3RvcmVD
YWxsZWVTYXZlc1VzZWRCeUxMSW50KCkKK2VuZAorCiBtYWNybyBzbG93UGF0aEZvckNvbW1vbkNh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHBy
ZXBhcmVDYWxsKQogICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwp
CiBlbmQKQEAgLTEyOTEsNyArMTMyMSw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1CiAgICAg
ICAgIG1hY3JvIChjYWxsZWUsIGNhbGxlZUZyYW1lUHRyKQogICAgICAgICAgICAgYnRweiBjYWxs
ZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAogICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0
ciwgc3AKLSAgICAgICAgICAgIHByZXBhcmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgdDEsIEpT
RW50cnlTbG93UGF0aFB0clRhZykKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQs
IHQxKQogICAgICAgICAuZG9udFVwZGF0ZVNQOgogICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0
aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5h
bWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgSlNFbnRyeVNsb3dQYXRo
UHRyVGFnKQogICAgICAgICBlbmQpCkBAIC0xODIwLDEyICsxODUwLDE2IEBAIGlmIEFSTTY0RQog
ICAgIGdsb2JhbCBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50
cnlUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1w
IGEwLCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAgICAg
Z2xvYmFsIF90YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxK
U0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIK
LSAgICAgICAgam1wIGEwLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcKKyAgICAgICAgam1wIGE3LCBK
U0VudHJ5UHRyVGFnCisKKyAgICBnbG9iYWwgX3RhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRy
YW1wb2xpbmUKKyAgICBfdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZToKKyAg
ICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX2V4Y2VwdGlvbkhhbmRs
ZXJUcmFtcG9saW5lCiAgICAgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lOgpAQCAtMjMyNSwx
NyArMjM1OSwxNyBAQCBlbmQpCiAKIAogIyB3ZSBjYW4ndCB1c2UgY2FsbE9wIGJlY2F1c2Ugd2Ug
Y2FuJ3QgcGFzcyBgY2FsbGAgYXMgdGhlIG9wY29kZSBuYW1lLCBzaW5jZSBpdCdzIGFuIGluc3Ry
dWN0aW9uIG5hbWUKLWNvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxpbnRfc2xvd19wYXRoX2NhbGws
IE9wQ2FsbCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCitj
b21tb25DYWxsT3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9y
cGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwg
bWV0YWRhdGEpCiAgICAgYXJyYXlQcm9maWxlRm9yQ2FsbChPcENhbGwsIGdldHUpCiBlbmQpCiAK
IAotbWFjcm8gY2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGZu
KQotICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9w
Y29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKK21hY3JvIGNhbGxPcChv
cGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJl
UG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCisgICAgY29tbW9uQ2FsbE9wKG9wXyVv
cGNvZGVOYW1lJSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwg
cHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dD
YWxsLCBmbikKIGVuZAogCiAKLWNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVG
b3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY2FsbE9wKHRhaWxfY2FsbCwgT3BU
YWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZv
clBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwsIG1hY3JvIChnZXR1
LCBtZXRhZGF0YSkKICAgICBhcnJheVByb2ZpbGVGb3JDYWxsKE9wVGFpbENhbGwsIGdldHUpCiAg
ICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIHJlbG9hZCBtZXRhZGF0YSBz
aW5jZSBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKSBtaWdodCBoYXZlIHRyYXNoZWQgdDUK
QEAgLTIzNDMsNyArMjM3Nyw3IEBAIGNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBh
cmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogZW5kKQogCiAKLWNhbGxPcChj
b25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1
LCBtZXRhZGF0YSkgZW5kKQorY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVG
b3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhp
Y1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0
YWRhdGEpIGVuZCkKIAogCiBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQp
CkBAIC0yMzU0LDcgKzIzODgsNyBAQCBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25U
YXJnZXQpCiAubm9FeGNlcHRpb246ICAgIAogZW5kCiAKLW1hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bj
b2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgZnJhbWVTbG93UGF0aCwgc2xv
d1BhdGgsIHByZXBhcmVDYWxsKQorbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXpl
LCBnZXQsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVy
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2Fs
bCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwpCiAgICAg
Y2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCiAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50
X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAgIyBjYWxsZWVGcmFtZSBpbiBy
MQpAQCAtMjM2OSwzMiArMjQwMyw3MCBAQCBtYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsbwogICAgICAg
ICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAgICAgICAgIGVuZAogICAg
IGVuZAotICAgIHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbENhbGxTbG93
UGF0aCgKKyAgICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhvc2UgYXJlIHIwIGFuZCByMQor
ICAgICAgICBtYWNybyAocmVzdG9yZWRQQ09yVGhyb3csIGNhbGxlZUZyYW1lUHRyKQorICAgICAg
ICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAorICAgICAgICAgICAgcmVz
dG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBz
cAorICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MSkKKyAgICAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQorICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQor
CisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgICAgICAgICAgYnRweiB0MSwgKGNv
bnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9y
cGhpYworICAgICAgICAgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyBy
ZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5l
IHNlcGFyYXRlbHkuCisgICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQg
Zm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUg
cG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBhcmVQb2x5bW9ycGhpYyhv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAgICBqbXAgLmdv
UG9seW1vcnBoaWMKKworICAgICAgICAubm90UG9seW1vcnBoaWM6CisgICAgICAgICAgICBicW5l
cSB0MCwgdDEsIC5vcENhbGxTbG93CisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0
LCB0MSkKKworICAgICAgICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBpbnZva2VDYWxsKG9wY29kZU5h
bWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lz
dGVyLCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisgICAgICAgIC5vcENhbGxT
bG93OgorICAgICAgICAgICAgIyB0MCBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMgQ2Fs
bExpbmtJbmZvKgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAor
ICAgICAgICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
LCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRp
b25bdDVdLCB0NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgICAg
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAgICAg
IHByZXBhcmVTbG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29k
ZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0Vmly
dHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5kb250
VXBkYXRlU1A6CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3Ry
YW1wb2xpbmUKKyAgICAgICAgZW5kKQogZW5kCiAKIAotbGxpbnRPcChvcF9jYWxsX3ZhcmFyZ3Ms
IE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZh
cmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBzaXplLCBPcENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xs
aW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2Nh
bGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9jYWxsX3ZhcmFyZ3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBz
aXplLCBnZXQsIE9wQ2FsbFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xv
d19wYXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1
bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93
UmVndWxhckNhbGwpCiBlbmQpCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFp
bENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0
YWRhdGEob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdzLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBjaGVja1N3aXRjaFRvSklU
Rm9yRXBpbG9ndWUoKQogICAgICMgV2UgbGllIGFuZCBwZXJmb3JtIHRoZSB0YWlsIGNhbGwgaW5z
dGVhZCBvZiBwcmVwYXJpbmcgaXQgc2luY2Ugd2UgY2FuJ3QKICAgICAjIHByZXBhcmUgdGhlIGZy
YW1lIGZvciBhIGNhbGwgb3Bjb2RlCi0gICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFy
YXJncywgc2l6ZSwgT3BUYWlsQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRo
X3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFy
Z3MsIHByZXBhcmVGb3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92
YXJhcmdzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJn
cywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclRhaWxDYWxs
LCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBh
cmVGb3JTbG93VGFpbENhbGwpCiBlbmQpCiAKIAotbGxpbnRPcChvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3Vl
KCkKICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJl
cGFyaW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBj
YWxsIG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzLCBzaXplLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgZGlzcGF0Y2gsIF9sbGludF9z
bG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3Bh
dGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwpCisgICAg
ZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHNpemUsIGdldCwg
T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJkX2FyZ3VtZW50
cywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHByZXBhcmVG
b3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxD
YWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfY29uc3Ry
dWN0X3ZhcmFyZ3MsIE9wQ29uc3RydWN0VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gpCi0gICAgZG9DYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgc2l6ZSwgT3BDb25z
dHJ1Y3RWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92
YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzLCBwcmVwYXJlRm9yUmVn
dWxhckNhbGwpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENv
bnN0cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIGdldCwg
T3BDb25zdHJ1Y3RWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0
aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1
bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93
UmVndWxhckNhbGwpCiBlbmQpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCA5MDNlNWE0NWIxYjY2
ODJmZDI4NzhiOTc5NDg1MmFlZmQ2NzUxZDVlLi42YzZmNTAzMmMzOTMzM2UyODgzYzZlYWEyMDI3
Mzg2MDg0NzZjZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAtMjE1MSwxMiArMjE1MSwxMiBAQCBt
YWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAgICBiaW5lcSBU
aGlzQXJndW1lbnRPZmZzZXQgKyBUYWdPZmZzZXRbY2ZyLCB0MywgOF0sIENlbGxUYWcsIC5kb25l
CiAgICAgbG9hZGkgVGhpc0FyZ3VtZW50T2Zmc2V0ICsgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4
XSwgdDAKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MAotICAgIHN0b3Jl
aSB0MCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2FycmF5UHJv
ZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0K
IC5kb25lOgogZW5kCiAKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCiBtYWNybyBjYWxsSGVscGVyKG9w
Y29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZp
cnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0
Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykK
LSAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0Q2FsbGVlKHQwKQogCiAgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5D
YWxsZWVXaXRoTGlua0JpdFt0NV0sIHQyCkBAIC0yMTg4LDcgKzIxODgsNyBAQCBtYWNybyBjb21t
b25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGws
IHByb2xvZ3VlKQogICAgICAgICBlbmQsIG1ldGFkYXRhKQogCiAgICAgICAgIG1hY3JvIGdldENh
bGxlZShkc3QpCi0gICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAgIGdldCht
X2NhbGxlZSwgZHN0KQogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBnZXRBcmd1bWVudFN0
YXJ0KGRzdCkKQEAgLTIxOTksNiArMjE5OSw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVO
YW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAg
ICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVu
ZAogICAgICAgICAKKyAgICAgICAgIyB0NSBob2xkcyBtZXRhZGF0YQogICAgICAgICBjYWxsSGVs
cGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3Qs
IHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKQEAgLTI4NjYsNiAr
Mjg2Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jfb3BlbiwgT3BJdGVyYXRv
ck9wZW4sIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgICAgIG1vdmUgMSwgZHN0CiAg
ICAgZW5kCiAKKyAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRv
cl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9w
ZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQog
CiAuZ2V0QnlJZFN0YXJ0OgpAQCAtMjkyNyw2ICsyOTI5LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3
ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCisgICAgbWV0YWRhdGEodDUsIHQwKQog
ICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRv
cl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVl
LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0
YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3Vt
ZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0OgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBh
OTEzMTRmY2U5ZWU0NGNhNmUwYmFjNzgyZDliZTJmNTljMGE4MzcwLi4xZGNiMmRkODhjNTdjOTk3
OTNhNjJmMzI1NzQzMTU4Y2YyYWU1NDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMzA5LDEyICszMDksMTIg
QEAgbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCBwcm90b0NhbGxGcmFtZSwgdGVtcDEs
IHRlbXAyKQogICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCiAgICAgICAgIGNsb29wQ2FsbEpT
RnVuY3Rpb24gZW50cnkKICAgICBlbHNpZiBBUk02NEUKLSAgICAgICAgbW92ZSBlbnRyeSwgdDMK
LSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZp
Z0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnZtRW50cnlUb0phdmFTY3JpcHQpICogUHRyU2l6
ZSwgYTIKLSAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQ
dHJUYWcKKyAgICAgICAgbW92ZSBlbnRyeSwgdDUKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
OnZtRW50cnlUb0phdmFTY3JpcHQpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgam1wIFthN10sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKICAgICAgICAgZ2xvYmFsIF92bUVu
dHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZQogICAgICAgICBfdm1FbnRyeVRvSmF2YVNjcmlwdFRy
YW1wb2xpbmU6Ci0gICAgICAgIGNhbGwgdDMsIEpTRW50cnlQdHJUYWcKKyAgICAgICAgY2FsbCB0
NSwgSlNFbnRyeVB0clRhZwogICAgIGVsc2UKICAgICAgICAgY2FsbCBlbnRyeSwgSlNFbnRyeVB0
clRhZwogICAgIGVuZApAQCAtMjM2MCw0MSArMjM2MCw1OCBAQCBtYWNybyBhcnJheVByb2ZpbGVG
b3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXRb
Y2ZyLCB0MywgOF0sIHQwCiAgICAgYnRxbnogdDAsIG5vdENlbGxNYXNrLCAuZG9uZQogICAgIGxv
YWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQzCi0gICAgc3RvcmVpIHQzLCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLm1fbGFzdFNl
ZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDMsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBlbmQK
IAotbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBzaXplLCBk
aXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGdldENhbGxl
ZSh0MCkKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCittYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUs
IHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFy
ZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1l
bnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgZ2V0Q2FsbGVlKHQx
KQogCi0gICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5t
X2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0sIHQyCi0gICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCi0gICAgYnFuZXEgdDMsIHQyLCAub3BDYWxsU2xv
dworICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogCisgICAgIyBBbGln
bmVkIHRvIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUKICAgICBnZXRBcmd1bWVudFN0YXJ0KHQzKQog
ICAgIGxzaGlmdGkgMywgdDMKICAgICBuZWdwIHQzCiAgICAgYWRkcCBjZnIsIHQzCi0gICAgc3Rv
cmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModDIp
Ci0gICAgc3RvcmVQQygpCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyArIFBheWxvYWRPZmZzZXRbdDNdCisKKyAgICAjIFN0b3JlIGxvY2F0aW9uIGJpdHMgYW5kIHxj
YWxsZWV8LCBhbmQgY29uZmlndXJlIHNwLgorICAgIHN0b3JlUEMoKQorICAgIHN0b3JlcSB0MCwg
Q2FsbGVlW3QzXQogICAgIG1vdmUgdDMsIHNwCi0gICAgaWYgQVJNNjRFCi0gICAgICAgIGxvYWRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRh
cmdldFt0NV0sIHQwCi0gICAgICAgIHByZXBhcmVDYWxsKHQwLCB0MiwgdDMsIHQ0LCB0MSwgSlNF
bnRyeVB0clRhZykKLSAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDAKLSAgICAgICAgY2FsbFRhcmdl
dEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFt
ZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDAsIEpTRW50cnlQdHJUYWcpCi0gICAg
ZWxzZQotICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRy
eVB0clRhZykKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2Rl
VGFyZ2V0W3Q1XSwgSlNFbnRyeVB0clRhZykKLSAgICBlbmQKLS5vcENhbGxTbG93OgotICAgIHNs
b3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2Fs
bCkKLWVuZAorICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCisKKyAgICBsb2FkcCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxv
Y2tbdDVdLCB0MQorICAgIGJ0cHogdDEsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9y
cGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAjIHByZXBhcmVDYWxsIGluIExM
SW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRo
YXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAjIEJ1dCB3ZSBzaG91bGQgbm90
IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUg
ZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICBwcmVwYXJlUG9seW1vcnBo
aWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAgIGptcCAuZ29Qb2x5
bW9ycGhpYwogCi1tYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29k
ZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQorLm5vdFBvbHltb3JwaGljOgorICAgIGJx
bmVxIHQwLCB0MSwgLm9wQ2FsbFNsb3cKKyAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkK
KworLmdvUG9seW1vcnBoaWM6CisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwg
dDUKKyAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5
UHRyVGFnKQorCisub3BDYWxsU2xvdzoKKyAgICAjIHQwIGlzIGNhbGxlZQorICAgICMgdDIgaXMg
Q2FsbExpbmtJbmZvKgorICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICBh
ZGRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1LCB0MiAjIENh
bGxMaW5rSW5mbyogaW4gdDIKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
Y2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCB0MworICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3Rb
dDNdLCB0MworICAgIHByZXBhcmVTbG93Q2FsbCgpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVv
cGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRz
dFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRyVGFnKQorZW5kCisKK21h
Y3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVw
YXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGws
IHByb2xvZ3VlKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAg
ICAgbWV0YWRhdGEodDUsIHQwKQogCkBAIC0yNDAzLDcgKzI0MjAsNyBAQCBtYWNybyBjb21tb25D
YWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHBy
b2xvZ3VlKQogICAgICAgICBlbmQsIG1ldGFkYXRhKQogCiAgICAgICAgIG1hY3JvIGdldENhbGxl
ZShkc3QpCi0gICAgICAgICAgICBnZXQobV9jYWxsZWUsIHQwKQorICAgICAgICAgICAgZ2V0KG1f
Y2FsbGVlLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGdldEFyZ3VtZW50U3Rh
cnQoZHN0KQpAQCAtMjQxNCw3ICsyNDMxLDggQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5h
bWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAg
ICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIGRzdCkKICAgICAgICAgZW5k
CiAKLSAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0
LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCisgICAgICAg
ICMgdDUgaG9sZHMgbWV0YWRhdGEKKyAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93
UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgaW52b2tl
Q2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50
KQogICAgIGVuZCkKIGVuZAogCkBAIC0yNTMzLDYgKzI1NTEsODggQEAgb3AobGxpbnRfdGhyb3df
ZHVyaW5nX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBqbXAgX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUKIGVuZCkKIAorIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMg
Q2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorbWFjcm8gbGlu
a1Nsb3dQYXRoRm9yKGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uUHJvbG9ndWUoKQorICAgIGxvYWRw
IEpTR2xvYmFsT2JqZWN0OjptX3ZtW3QzXSwgdDEKKyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2Fs
bEZyYW1lW3QxXQorICAgIG1vdmUgdDIsIGEyCisgICAgbW92ZSB0MywgYTEKKyAgICBtb3ZlIGNm
ciwgYTAKKyAgICBjQ2FsbDQoZnVuY3Rpb24pCisgICAgZnVuY3Rpb25FcGlsb2d1ZSgpCisgICAg
dW50YWdSZXR1cm5BZGRyZXNzIHNwCisgICAgYnRweiByMSwgLmRvTm90VHJhc2gKKyAgICBwcmVz
ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodDEpCisgICAgcHJlcGFyZUZvclRhaWxDYWxsKHQx
LCB0MiwgdDMsIHQ0KQorICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0NAorLmRvTm90VHJhc2g6Cisg
ICAgIyBGSVhNRTogVXNlIGludm9rZUZvclRhaWxDYWxsPworICAgIGptcCB0MCwgSlNFbnRyeVB0
clRhZworZW5kCisKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMg
aXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3JvIHZpcnR1YWxUaHVua0ZvcihvZmZzZXRP
ZkpJVENvZGVXaXRoQXJpdHlDaGVjaywgaW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmUsIHByZXBh
cmVDYWxsLCBzbG93Q2FzZSkKKyAgICBhZGRpIDEsIENhbGxMaW5rSW5mbzo6bV9zbG93UGF0aENv
dW50W3QyXQorICAgIG1vdmUgTm90Q2VsbE1hc2ssIHQxCisgICAgYnRxbnogdDAsIHQxLCBzbG93
Q2FzZQorICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgSlNGdW5jdGlvblR5cGUsIC5ub3RK
U0Z1bmN0aW9uCisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9leGVjdXRhYmxlT3JSYXJlRGF0YVt0
MF0sIHQxCisgICAgYnRweiB0MSwgKGNvbnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IC5pc0V4ZWN1dGFibGUKKyAgICBsb2FkcCAoRnVuY3Rpb25SYXJlRGF0YTo6bV9leGVjdXRhYmxl
IC0gKGNvbnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpW3QxXSwgdDEKKy5pc0V4ZWN1
dGFibGU6CisgICAgbG9hZHAgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tbdDFdLCB0MQor
ICAgIGJ0cHogdDEsIHNsb3dDYXNlCisuY2FsbENvZGU6CisgICAgcHJlcGFyZUNhbGwodDUsIHQy
LCB0MywgdDQpCisgICAgam1wIHQxLCBKU0VudHJ5UHRyVGFnCisubm90SlNGdW5jdGlvbjoKKyAg
ICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEludGVybmFsRnVuY3Rpb25UeXBlLCBzbG93Q2Fz
ZQorICAgIHByZXBhcmVDYWxsKHQ1LCB0MiwgdDMsIHQ0KQorICAgIGptcCBpbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZQorZW5kCisKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5m
byoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X2xpbmtfY2FsbF90
cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfbGlua19jYWxs
KQorZW5kKQorCisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlz
IGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGlu
ZSwgbWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJh
bXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KSBlbmQsIC5zbG93Q2Fz
ZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkK
K2VuZCkKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBj
YWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBv
bGluZSwgbWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBfbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkg
ZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92
aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5m
byoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1YWxfdGFp
bF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFi
bGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1w
NCkKKyAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHRlbXAxKQorICAgICAg
ICBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCisgICAgICAg
IHVudGFnUmV0dXJuQWRkcmVzcyB0ZW1wNAorICAgIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNl
OgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQogCiBtYWNy
byBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikKICAgICBm
dW5jdGlvblByb2xvZ3VlKCkKQEAgLTMwNDYsOCArMzE0Niw4IEBAIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfaXRlcmF0b3Jfb3BlbiwgT3BJdGVyYXRvck9wZW4sIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoCiAgICAgICAgIG1vdmUgMSwgZHN0CiAgICAgZW5kCiAKLQotICAgIGNhbGxIZWxwZXIo
b3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwsIE9w
SXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZvclJl
Z3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRv
cl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9w
ZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwg
cHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50LCBt
ZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXRCeUlkU3RhcnQ6CiAgICAgbWFjcm8gc3Rv
cmVOZXh0QW5kRGlzcGF0Y2godmFsdWUpCkBAIC0zMTA0LDcgKzMyMDQsOCBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1ZSBzbG90IGFzIGEgdG1w
IHNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4KLSAgICBjYWxsSGVscGVy
KG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBP
cEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJl
Z3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRv
cl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5l
eHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
aW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBw
cmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1l
dGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1
bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldERvbmVTdGFydDoKICAgICBtYWNybyBzdG9y
ZURvbmVBbmRKbXBUb0dldFZhbHVlKGRvbmVWYWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCmluZGV4IDk1ODEwNWQzMjY2ZGRmZjg1YmU1ZDc2
ZDg3Y2RlNWNiMzMxMzE0YzMuLjQ4ZmQ5MmY4YjZhOGVkMjk0NGE3MjQ4YjE1N2QyYWY3Mjc3M2M1
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVC
YXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2Uu
aApAQCAtNTcsNiArNTcsNyBAQCBpbmxpbmUgYm9vbCBpc0NhbGwoQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQogCiBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwgewogICAg
IGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKICAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3Vu
ZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HYXRlLmgKaW5kZXggZjZhMDViMDY1ZTMyZDhhZWNkNTY3YmY2YWI3NGFhZTYz
ODk5Nzc3OC4uZTQ3NzkyYjg3NjRlOTFkNTA2MTBlNGNkZGFlMzIzMWMxNDU5ZTIwNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaApAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB2KGppdENhZ2VQdHIsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50
cnlQdHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFB0clRh
ZywgTm9QdHJUYWcpIFwKKyAgICB2KHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVB0clRhZywg
Tm9QdHJUYWcpIFwKICAgICB2KGxvb3BPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KGVudHJ5
T1NSRW50cnksIE5vUHRyVGFnKSBcCiAgICAgdih3YXNtT1NSRW50cnksIE5vUHRyVGFnKSBcCkBA
IC00NiwyMCArNDcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgSlNDX0pTX0dBVEVf
T1BDT0RFUyh2KSBcCiAgICAgdihvcF9jYWxsLCBKU0VudHJ5UHRyVGFnKSBcCi0gICAgdihvcF90
YWlsX2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NvbnN0cnVjdCwgSlNFbnRyeVB0
clRhZykgXAogICAgIHYob3BfaXRlcmF0b3JfbmV4dCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYo
b3BfaXRlcmF0b3Jfb3BlbiwgSlNFbnRyeVB0clRhZykgXAotICAgIHYob3BfY2FsbF9zbG93LCBK
U0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5
U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NvbnN0cnVjdF9zbG93LCBKU0VudHJ5U2xvd1Bh
dGhQdHJUYWcpIFwKLSAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQ
dHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0
aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3csIEpT
RW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywg
SlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3ZhcmFyZ3MsIEpTRW50cnlQ
dHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzLCBKU0VudHJ5UHRyVGFnKSBcCisg
ICAgdihvcF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2FsbF9z
bG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3Rfc2xvdywgSlNFbnRyeVB0
clRhZykgXAorICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisg
ICAgdihvcF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2Nh
bGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfdmFy
YXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHNfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3ZhcmFy
Z3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY2FsbF9ldmFsX3Nsb3csIEpTRW50
cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5
U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRyeVNs
b3dQYXRoUHRyVGFnKSBcCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5Y2Y1ZmVhMDE5ODQ5ZGI2ZTY2MDkxMGJiOTQ1MWNk
MjdjMjVmYmM1Li5lYzQ4MjJmNWE5MDNkNGZiODVjYjQ4NDFhNGNkNjhmMGMxMGJmYmYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xMzgsNiArMTM4LDcgQEAKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNs
dWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRl
ICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2Rl
QmxvY2suaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpAQCAtOTEwLDYg
KzkxMSw0MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENU
SUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZAogICAgIHJldHVybiBMTEludDo6Z2V0
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3Rf
dHJhbXBvbGluZSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBW
TTo6Z2V0Q1RJTGlua0NhbGwoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6
OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlmCisgICAgcmV0
dXJuIExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X2xpbmtfY2FsbF90cmFt
cG9saW5lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IFZNOjpn
ZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKQoreworI2lmIEVOQUJMRShKSVQp
CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2Vk
PEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6OmNhbGxUb1Rocm93
KCp0aGlzKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworfQorCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IFZNOjpnZXRDVElWaXJ0dWFsQ2Fs
bChDYWxsTW9kZSBjYWxsTW9kZSkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25z
Ojp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvcigqdGhpcywgY2FsbE1v
ZGUpOworI2VuZGlmCisgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAgIGNhc2UgQ2FsbE1vZGU6
OlJlZ3VsYXI6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworICAgIGNhc2UgQ2FsbE1v
ZGU6OlRhaWw6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4obGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZSk7CisgICAgY2FzZSBD
YWxsTW9kZTo6Q29uc3RydWN0OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUpOwor
ICAgIH0KKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsKK30KKwogVk06OkNsaWVudERhdGE6On5D
bGllbnREYXRhKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDZmZTQ2
NzQwNWJiYjQ3NGVjMjIzZDY5YjQ4MWIxOGQ2ZjBhZDNkOTguLjY2NTFhYmU0Y2JkYTYwZTliZDUx
ZmJjMDhmOTVhY2I0ODU2YzgxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAt
MTA1LDYgKzEwNSw4IEBAIGNsYXNzIEJhc2ljQmxvY2tMb2NhdGlvbjsKIGNsYXNzIEJ1aWx0aW5F
eGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxs
RnJhbWU7CitjbGFzcyBDYWxsTGlua0luZm87CitlbnVtIGNsYXNzIENhbGxNb2RlOwogc3RydWN0
IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29k
ZUNhY2hlOwpAQCAtODkzLDYgKzg5NSw5IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBj
YW5Db25zdHJ1Y3QpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElMaW5r
Q2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElU
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlKTsKIAog
ICAgIHN0YXRpYyBwdHJkaWZmX3QgZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZlODljNDUyYTY1
NjkzNzZiYTIzOTE2MGM0NjlmOWJiZGE3MDU4YzguLjI4Y2RkMDM0YjdhZGE1M2ZkNDBiMWRmNjY3
ZDIxNDMyMDVkMTUzODkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGlu
IExMSW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzI3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHN0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanM6
CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpz
OgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudm0uaXNXYXNtU3Vw
cG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qczoKKyAg
ICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnZtLmlzV2FzbVN1cHBvcnRl
ZCk6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIu
anM6CisgICAgICAgIChkb2VzVHJlZUhhdmVTdGFja1RyYWNlKToKKyAgICAgICAgKHJ1blRlc3Qp
OgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanM6CisKIDIwMjEt
MTEtMDkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBp
bmxpbmluZyBOZXdTeW1ib2wgaW4gdGhlIERGRyBkb24ndCB1bml2ZXJzYWxseSBjYWxsIFRvU3Ry
aW5nIG9uIHRoZSBpbnB1dApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUt
aW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzIGIvSlNUZXN0cy9zdHJlc3MvaXMt
Y2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCmluZGV4IDUwY2Fl
ZWQxMTQ4NDI5ZmQxYjVjZTBiMGZlYWU2YmRkZGU2NzEwYjguLjk0ZGFiNDZkMmQ3MTg0ZjM1ZDQz
ZTJkYjRhMmRkNTY0MTk4YmVmZjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxh
YmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcworKysgYi9KU1Rlc3RzL3N0
cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMKQEAg
LTEsNCArMSw0IEBACi0vL0AgcnVuRGVmYXVsdCgiLS12YWxpZGF0ZU9wdGlvbnM9dHJ1ZSAtLXVz
ZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS11c2VDb25jdXJyZW50R0M9ZmFsc2UiLCAiLS10aHJl
c2hvbGRGb3JKSVRTb29uPTEwIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAiLCAi
LS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMCIsICItLXRocmVzaG9sZEZvck9w
dGltaXplQWZ0ZXJMb25nV2FybVVwPTEwMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplU29vbj0x
MDAiLCAiLS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMDAiLCAiLS10aHJl
c2hvbGRGb3JGVExPcHRpbWl6ZVNvb249MTAwMCIsICItLXZhbGlkYXRlQkNFPXRydWUiLCAiLS11
c2VGVExKSVQ9dHJ1ZSIpCisvL0AgcnVuRGVmYXVsdCgiLS12YWxpZGF0ZU9wdGlvbnM9dHJ1ZSIs
ICItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS11c2VDb25jdXJyZW50R0M9ZmFsc2UiLCAi
LS10aHJlc2hvbGRGb3JKSVRTb29uPTEwIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9
MTAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMCIsICItLXRocmVzaG9s
ZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwPTEwMCIsICItLXRocmVzaG9sZEZvck9wdGltaXpl
U29vbj0xMDAiLCAiLS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMDAiLCAi
LS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb249MTAwMCIsICItLXZhbGlkYXRlQkNFPXRydWUi
LCAiLS11c2VGVExKSVQ9dHJ1ZSIpCiAKIGZ1bmN0aW9uIG1haW4oKSB7CiAgICAgbGV0IHYxNjI7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUt
c2VjdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1z
ZWN0aW9uLmpzCmluZGV4IDY4OWEwMDVhYjU1NWExZmM2MDFhNTRlNGViZjk0ZTk5YTY2OGY3N2Uu
LjVjMjIwZmQ3NmNkYzVjNDBlNTljYzY2ZTU3MzQyYzcyZDhjN2YzYWEgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzCisrKyBi
L0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzCkBA
IC02OSw1ICs2OSw1IEBACiAgICAgdmFyIHdhc21FbnRyeSA9IGZ1bmN0aW9uKCkgewogICAgICAg
ICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5fcGFycm90KDEpOwogICAgIH07Ci0gICAgcnVuVGVz
dCh3YXNtRW50cnksIFsiX3NpbGx5IiwgIih1bmtub3duKSIsICI8Pz4ud2FzbS1mdW5jdGlvbltf
ZWdnc10iLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltf
c3BhbV0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF0iLCAid2FzbS1zdHViIiwgIjI0Iiwg
Indhc21FbnRyeSJdKTsKKyAgICBydW5UZXN0KHdhc21FbnRyeSwgWyJfc2lsbHkiLCAiKHVua25v
d24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFj
b25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFy
cm90XSIsICIodW5rbm93bikiLCAid2FzbUVudHJ5Il0pOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyLXdhc20uanMKaW5kZXggY2QyMWYyODhjMTQ4YTRiNzQwNWJmODY4ZGVmOWI1
NDU3MzQwNTA0NS4uMDZkZjAxMjQ5NTk2OWUyODQyMTg3Nzg2OTAxMzViZjA5MDEwZWM2ZCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qcworKysgYi9K
U1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCkBAIC04LDUgKzgsNSBAQAog
ICAgIHZhciB3YXNtRW50cnkgPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNl
LmV4cG9ydHMubG9vcCgxMDAwMDAwMCk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRyeSwg
WyI8Pz4ud2FzbS1mdW5jdGlvblswXSIsICJ3YXNtLXN0dWIiLCAiMCIsICJ3YXNtRW50cnkiXSk7
CisgICAgcnVuVGVzdCh3YXNtRW50cnksIFsiPD8+Lndhc20tZnVuY3Rpb25bMF0iLCAiKHVua25v
d24pIiwgIndhc21FbnRyeSJdKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGlu
Zy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCmluZGV4IDk2NDJkZGM3YzFlNmYwNmUzYjEz
Mjc5YzBlNGEwMjViNTRkY2FiZjEuLjFiOTJlOTQ4NTRhZjYzZjY3ZDA4ZjU0ODg3YzUyMTc5MTRl
ZTJiZjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBs
aW5nUHJvZmlsZXIuanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2Ft
cGxpbmdQcm9maWxlci5qcwpAQCAtNzAsMTEgKzcwLDEzIEBAIGZ1bmN0aW9uIGNoZWNrKG5vZGUp
IHsKICAgICAKICAgICBsZXQgbm9kZSA9IHRyZWU7CiAgICAgZm9yIChsZXQgaSA9IHN0YWNrVHJh
Y2UubGVuZ3RoOyBpLS07ICkgeworICAgICAgICBsZXQgcHJldiA9IG5vZGU7CiAgICAgICAgIG5v
ZGUgPSBub2RlLmNoaWxkcmVuW3N0YWNrVHJhY2VbaV1dOwogICAgICAgICBpZiAoIW5vZGUpIHsK
ICAgICAgICAgICAgIGlmIChWRVJCT1NFKSB7CiAgICAgICAgICAgICAgICAgcHJpbnQoImZhaWxp
bmcgb24gIiArIGkgKyAiIDogIiArIHN0YWNrVHJhY2VbaV0pOwogICAgICAgICAgICAgICAgIHBy
aW50KEpTT04uc3RyaW5naWZ5KHRyZWUpKTsKKyAgICAgICAgICAgICAgICBwcmludChPYmplY3Qu
a2V5cyhwcmV2LmNoaWxkcmVuKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KQEAgLTEwOCw3ICsxMTAsNyBAQCBmdW5jdGlvbiBydW5UZXN0KGZ1
bmMsIHN0YWNrVHJhY2VPclN0cmluZykgewogICAgICAgICB9CiAgICAgfSB3aGlsZSAoRGF0ZS5u
b3coKSAtIHN0YXJ0VGltZSA8IHRpbWVUb0ZhaWwpOwogICAgIHByaW50KEpTT04uc3RyaW5naWZ5
KHJvb3QsIHVuZGVmaW5lZCwgMikpOwotICAgIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwg
c3RhY2tUcmFjZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgZG9lc1RyZWVIYXZlU3RhY2tUcmFjZShyb290
LCBzdGFja1RyYWNlT3JTdHJpbmcsIHRydWUsIHRydWUpOwogICAgIHRocm93IG5ldyBFcnJvcigi
QmFkIHN0YWNrIHRyYWNlIik7CiB9CiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlv
bi10ZXN0cy9uYW1lU2VjdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1l
U2VjdGlvbi5qcwppbmRleCA2ODA1ZTY4OWY1Yzg3OWUyY2E1MDljODhkM2U3YjM3NmRlMDlmYWFh
Li4zM2M4NmJmMWNkZTlhOGRhYjExOGUwZTRjYjBiYWNkNTliNzQ5MWU5IDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy93
YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCkBAIC02OSw0ICs2OSw0IEBACiBhc3Nl
cnQuZXEoc3RhY2t0cmFjZVszXSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl1AW3dhc20gY29k
ZV0iKTsKIGFzc2VydC5lcShzdGFja3RyYWNlWzRdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1d
QFt3YXNtIGNvZGVdIik7CiBhc3NlcnQuZXEoc3RhY2t0cmFjZVs1XSwgIjw/Pi53YXNtLWZ1bmN0
aW9uW19wYXJyb3RdQFt3YXNtIGNvZGVdIik7Ci1hc3NlcnQuZXEoc3RhY2t0cmFjZVs2XSwgIndh
c20tc3R1YkBbd2FzbSBjb2RlXSIpOyAvLyB3YXNtIGVudHJ5Cithc3NlcnQuZXEoc3RhY2t0cmFj
ZVs2XSwgIndhc20tc3R1YkBbbmF0aXZlIGNvZGVdIik7IC8vIHdhc20gZW50cnkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444010</attachid>
            <date>2021-11-11 15:31:09 -0800</date>
            <delta_ts>2021-11-11 15:49:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111153108.patch</filename>
            <type>text/plain</type>
            <size>393170</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTM5ZTE5ZGFiOGI2MjgyMGFkMDljNGMyMGRlYjgyMTk4Y2NmOTViLi42ZmQxYWQ3MjE2OWM3YzY5
OWNmZGZlNzdmZjdjMTkzZTFjODc0YjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTIgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oOgor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
ZHVtcFdpdGhOYW1lIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAg
ICAgICAgKEpTQzo6Y2FsbExpbmtJbmZvRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNsZWFyU3R1Yik6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmNsZWFyQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0
aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6cmV2ZXJ0Q2FsbFRvU3R1Yik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aXNMaW5rZWQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnN0dWIgY29uc3QpOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpmb3JFYWNoRGVwZW5kZW50Q2VsbCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2V0U2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmNsZWFyU2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRJQ1N0YXR1c01hcCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGlua0luY29taW5nQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5s
aW5rSW5jb21pbmdDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6amV0dGlzb24pOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcm9maWxlUHJlZGljdGlvbnMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0lubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2Fs
bExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlu
a0luZm8pOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6
IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNv
ZGUvUmVwYXRjaC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwLgorICAgICAgICAoSlNDOjpsaW5rU2xvd1BhdGhUbyk6CisgICAgICAgIChKU0M6
OmxpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlPd25lcik6CisgICAgICAg
IChKU0M6OmxpbmtNb25vbW9ycGhpY0NhbGwpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToK
KyAgICAgICAgKEpTQzo6dW5saW5rQ2FsbCk6CisgICAgICAgIChKU0M6OmpzVG9XYXNtSUNDb2Rl
UHRyKToKKyAgICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpsaW5r
UG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9SZXBhdGNoLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaC4KKyAgICAgICAgKiBieXRl
Y29kZS9SZXBhdGNoSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENh
bGwpOgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbEZvcldp
dGhGdW5jdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyk6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmFkZFVubGlua2VkQ2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5r
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpyZXR1cm5G
cm9tQmFzZWxpbmVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpvcF9yZXRf
aGFuZGxlckdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAo
SlNDOjpoYW5kbGVIb3N0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxGb3JX
aXRoRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFs
VGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dmlydHVh
bFRodW5rRm9yVGFpbENvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxU
aHVua0ZvckNvbnN0cnVjdENhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfbGlua19jYWxsKToKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OmxsaW50X3ZpcnR1YWxfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVIb3N0
Q2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAoSlNDOjpM
TEludDo6dmFyYXJnc1NldHVwKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFU
SF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNvbW1vbkNhbGxFdmFsKToKKyAgICAgICAg
KEpTQzo6TExJbnQ6OmdlbmVyaWNDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5oOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAg
KEpTQzo6TExJbnQ6OmNyZWF0ZUpTR2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNy
ZWF0ZVRhaWxDYWxsR2F0ZSk6CisgICAgICAgIChKU0M6OkxMSW50OjpyZXR1cm5Mb2NhdGlvblRo
dW5rKToKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5oOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuY3BwOgorICAgICAgICAoSlNDOjpDTG9vcFJlZ2lzdGVyOjpvcGVyYXRvciBDYWxsTGlua0lu
Zm8qKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2ZmbGlu
ZWFzbS9jbG9vcC5yYjoKKyAgICAgICAgKiBvZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYjoKKyAg
ICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGVCYXNlLmg6CisgICAgICAgICogcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0dhdGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSUxpbmtDYWxsKToKKyAgICAg
ICAgKEpTQzo6Vk06OmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCk6CisgICAg
ICAgIChKU0M6OlZNOjpnZXRDVElWaXJ0dWFsQ2FsbCk6CisgICAgICAgICogcnVudGltZS9WTS5o
OgorCiAyMDIxLTExLTEwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBNb3ZlIG1fZG9lc0dDIGZyb20gSGVhcCB0byBWTS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCAxMmM0YTVjODI3N2NhNzcwMWQ4NDllZmY2NDY3YmQ4ODc5NTkwMDA4Li5j
YzQxZmMwM2QwYTA4NmNjNzdjZTRlN2QwMDJkZTE3Yzg2NDMyMDE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC02NTksNyArNjU5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9u
QWxsb2NhdGlvblByb2ZpbGUuaAogICAgIGJ5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmgKLSAgICBieXRlY29kZS9MTEludENhbGxMaW5rSW5m
by5oCiAgICAgYnl0ZWNvZGUvTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmgKICAgICBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCiAgICAgYnl0
ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDNkNDU5ZWJhM2RlMjk2ZjE2YjM0YmVlODg5ZWE0NjViYWViOTY3MjguLjY5YjBhMzAyYjlhMzUx
ZGRiODU3Y2UzMmU0MmU3OGRkYzlhYmJhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xNDcsNyArMTQ3LDYgQEAKIAkJMEYwQ0FFRkMxRUM0REE2QjAwOTcwRDEyIC8qIEpTSGVh
cEZpbmFsaXplclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMENBRUZBMUVDNERBNjIwMDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYwQ0FFRkYxRUM0REE4ODAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0FFRkUxRUM0REE4
NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAv
KiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkw
RjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4
MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0
b20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTBG
MUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLzsgfTsKIAkJMEYxMkRFMTAxOTc5
RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRp
b25GdXp6LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAv
KiBEZWZlckdDLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTE4Niw3ICsxODUsNiBAQAogCQkwRjI0RTU0NDE3RUE5RjU5MDBBQkIyMTcgLyogR1BS
SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
NEU1M0YxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyog
SklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU0RjE3RUUy
NzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJl
Z2lzdGVyU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRBMTdFRTI3NDkwMEFCQjIx
NyAvKiBSZXBhdGNoLmggKi87IH07CiAJCTBGMjRFNTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjI0RTU1NjE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8q
IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMg
LyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKQEAgLTE4
OTEsNiArMTg4OSw3IEBACiAJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFs
UHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTMzRjUwODYxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9t
aXNlQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJCUUzNDAwRUMxMjJBMUNDN0IwMDlERUQ1NCAv
KiBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzQwMEVDMDIyQTFDQzc4MDA5REVENTQgLyogRnVuY3Rpb25F
eGVjdXRhYmxlSW5saW5lcy5oICovOyB9OwogCQlFMzQ5QTc4MTI0OTFGMTYxMDAxQkEzMzYgLyog
REZHQ29kZU9yaWdpblBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNDlBNzgwMjQ5MUYxNUEwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNEQx
QUU1MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8q
IFJlcGF0Y2hJbmxpbmVzLmggKi87IH07CiAJCUUzNEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQ
YXJzZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzNEU2NTczMjA2NjhFOEQwMEZCODFBQyAvKiBQYXJzZUhhc2guaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3
QTUgLyogRnJhbWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzRFREJGNjFEQjVGRkMxMDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM0RjkzMEUy
MzIyRDg4MjAwMkI4REI0IC8qIEpTR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRGOTMwQzIzMjJEODgxMDAyQjhEQjQgLyogSlNHZW5l
cmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTkwNSw2ICsxOTA0LDcgQEAKIAkJRTM1QTBCOUQyMjBBRDg3QTAwQUM0NDc0IC8qIEV4ZWN1
dGFibGVCYXNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM1QTBCOUMyMjBBRDg3QTAwQUM0NDc0IC8qIEV4ZWN1dGFibGVCYXNlSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
NUNBMTU0MURCQzNBNUMwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUyMURCQzNBNTYwMEY4MzUx
NiAvKiBET01KSVRIZWFwUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFMzVDQTE1NjFEQkMzQTVGMDBGODM1MTYgLyogRE9NSklUQWJzdHJh
Y3RIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzVDQTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM1RTM2M0UyNzNEQzhD
NjAwREIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzNUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmggKi87IH07
CiAJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFODlGQjI1QzUwRjg2MDA3
MUVFMUUgLyogQmlnSW50NjRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUUzNUU4OUZFMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRB
cnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1
RTg5RkMyNUM1MEY4NzAwNzFFRTFFIC8qIEJpZ1VpbnQ2NEFycmF5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM2MzdFRTkyMzZFNTZCMDAwOTZC
RDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzNjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0
YW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTIzOTAsNyArMjM5MCw2IEBACiAJCTBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmlu
YWxpemVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZp
bmFsaXplckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMw
MTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5
VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQx
NUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDdXN0b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0
b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZG
RjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXhjZXB0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI0NTMsOCArMjQ1Miw2IEBACiAJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAv
KiBKSVRPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpJVE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0
NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVw
YXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjRFNTUzMTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lQ2FsbEZyYW1lU2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8q
IElubGluZUNhbGxGcmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmxpbmVDYWxsRnJhbWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMDUs
NiArNTIwMiw3IEBACiAJCUUzNDAwRUMwMjJBMUNDNzgwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0OUE3N0YyNDkxRjE1OTAwMUJBMzM2
IC8qIERGR0NvZGVPcmlnaW5Qb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvZGVPcmln
aW5Qb29sLmNwcDsgcGF0aCA9IGRmZy9ERkdDb2RlT3JpZ2luUG9vbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzNDlBNzgwMjQ5MUYxNUEwMDFCQTMzNiAvKiBERkdDb2RlT3Jp
Z2luUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb2RlT3JpZ2luUG9vbC5oOyBwYXRoID0gZGZn
L0RGR0NvZGVPcmlnaW5Qb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNEQx
QUU0MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZXBhdGNoSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzRFNjU3MzIwNjY4RThEMDBGQjgxQUMgLyogUGFyc2VIYXNoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMzRFNjU3NDIwNjY4RThFMDBGQjgxQUMgLyogUGFyc2VIYXNoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlSGFzaC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEVEQkY2MURCNUZGQzEwMERDODdBNSAvKiBGcmFtZVRy
YWNlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVUcmFjZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjI3LDYgKzUyMjUsOCBAQAogCQlFMzVD
QTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVEFic3RyYWN0SGVhcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzVDQTE1MTFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUSGVhcFJh
bmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUpJVEhlYXBS
YW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUNBMTUyMURCQzNBNTYw
MEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRE9NSklUSGVhcFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUz
NUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1
RTM2M0QyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNUU4OUZCMjVDNTBGODYwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZ0ludDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTM1RTg5RkMyNUM1MEY4NzAwNzFFRTFFIC8qIEJpZ1VpbnQ2NEFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZ1VpbnQ2NEFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBM
aW5rVGltZUNvbnN0YW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtU
aW1lQ29uc3RhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0NTYsOCArNjQ1
Niw2IEBACiAJCQkJNjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8s
CiAJCQkJMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmNwcCAqLywKIAkJ
CQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCAqLywKLQkJCQkwRjI0
RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgKi8sCi0JCQkJMEYyNEU1NEExN0VF
Mjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLywKIAkJCQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3
MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRjI0RTU0QjE3RUUy
NzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZFRTk4
NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywKQEAgLTg4MTIs
NyArODgxMCw2IEBACiAJCQkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmggKi8sCiAJCQkJRTM2MzdFRTgyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtU
aW1lQ29uc3RhbnQuY3BwICovLAogCQkJCUUzNjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5r
VGltZUNvbnN0YW50LmggKi8sCi0JCQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50
Q2FsbExpbmtJbmZvLmggKi8sCiAJCQkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJNTNG
QTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTE0Rjc5RjZFMjE2RUFENTAwMDA0NkQzOSAvKiBNZXRh
ZGF0YVRhYmxlLmNwcCAqLywKQEAgLTg4NTksNiArODg1Niw5IEBACiAJCQkJMEY0NEE3QUEyMEJG
Njg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVzZXMuaCAqLywKIAkJCQkwRkY2MEFCRjE2NzQw
RjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgKi8sCiAJCQkJMEZGNjBBQzAxNjc0
MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAqLywKKwkJCQlFMzVFMzYzRDI3M0RD
OEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5jcHAgKi8sCisJCQkJRTM1RTM2M0MyNzNEQzhDNjAwREIy
NENDIC8qIFJlcGF0Y2guaCAqLywKKwkJCQlFMzREMUFFNDI3M0RDOTFGMDAwNUJCOTEgLyogUmVw
YXRjaElubGluZXMuaCAqLywKIAkJCQk4NjVEQTBDOTI1Qjg5NjJBMDA4NzU3NzIgLyogU2V0UHJp
dmF0ZUJyYW5kU3RhdHVzLmNwcCAqLywKIAkJCQk4NjVEQTBDNzI1Qjg5NjBDMDA4NzU3NzIgLyog
U2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi8sCiAJCQkJODY1REEwQzYyNUI4OTU5RTAwODc1Nzcy
IC8qIFNldFByaXZhdGVCcmFuZFZhcmlhbnQuY3BwICovLApAQCAtOTc0NCw2ICs5NzQ0LDcgQEAK
IAkJCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJENERERTE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29w
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVy
R0MuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOUZBN0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZl
ckdDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyREYxN0NEODc3QzAwOENDOTND
IC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1
MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIERlZmVycmVkV29ya1RpbWVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTEwNTIxLDcgKzEwNTIyLDYgQEAKIAkJCQlFMzYzN0VFOTIzNkU1
NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdF
MkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTcwREU5QTA5MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFzc2VtYmx5LmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJ
bnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAv
KiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMTA3MjEsNyArMTA3MjEsOCBAQAogCQkJ
CUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JDb25z
dGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5MkY1NkI3MUU0RTg0QjIwMDM1OTUzQiAvKiBS
ZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI0RTU1
MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1RTM2
M0UyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCUUzNEQx
QUU1MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU5RjNGQjkyNjEzQzc4OTAwNjlFODlGIC8qIFJlc291cmNlRXhoYXVzdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFM0I2NDJGMjVENkZCNEQwMDFBRERCNCAvKiBSb290TWFya1Jl
YXNvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDc3OSw3ICsxMDc4MCw2IEBACiAJCQkJQkMxOEM0
NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTlGQTdDNTI3M0M4QjI2MDA1RDlFNzAg
LyogRGVmZXJHQ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREU4N0ZDMURGRTZFNTEw
MDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1
bmtKSVQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDc5
M2Y0NmY3YmM1OGU1MDhjZGE2Y2I5MDE1YWEwOTJlOGM5ODYwZDkuLmI2OTU1NTdhZmU2MGYxNDc1
MTAwOWIxYjUwNWY1NTEzMzQwNWI5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAg
LTI3Myw2ICsyNzMsNyBAQCBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKIGJ5dGVjb2RlL1B1dEJ5
VmFyaWFudC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRlY29kZS9SZWR1
Y2VXaGl0ZXNwYWNlLmNwcAorYnl0ZWNvZGUvUmVwYXRjaC5jcHAKIGJ5dGVjb2RlL1NldFByaXZh
dGVCcmFuZFN0YXR1cy5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCiBi
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTY3Niw3ICs2NzcsNiBAQCBqaXQvUmVnLmNw
cAogaml0L1JlZ2lzdGVyQXRPZmZzZXQuY3BwCiBqaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3Bw
CiBqaXQvUmVnaXN0ZXJTZXQuY3BwCi1qaXQvUmVwYXRjaC5jcHAKIGppdC9TY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuY3BwCiBqaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCiBqaXQvU2xvd1BhdGhD
YWxsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2Rl
TG9jYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9u
LmgKaW5kZXggYTZjYTVjODFjNTEwOTVmODE5OGQ5YjgyZGIxNGE1ODFhMjVjZTYwOS4uMDc1MDRi
YTA0ZTU5YjZkMWRjYTIzNTg4YmVmYjU0ZGYxOTE4NWEyYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKIAotI2lmIEVOQUJMRShBU1NFTUJMRVIp
Ci0KIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIGNsYXNzIE5lYXJDYWxsTW9kZSA6IHVpbnQ4X3Qg
eyBSZWd1bGFyLCBUYWlsIH07CkBAIC0yNjksNSArMjY3LDMgQEAgaW5saW5lIENvZGVMb2NhdGlv
bkNvbnZlcnRpYmxlTG9hZDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252
ZXJ0aWIKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoQVNTRU1C
TEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAK
aW5kZXggMDYyNDBlODc0MzYzODczYjlkZjJjYzlmMzdmMzgyOTE4ZmU3ZTI5ZS4uOTljODc1Njhj
YmZmZTcyYTFjZWI2NmM0ZGI2ZGFlYjgxOTIwZDExYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCkBAIC00MywyOSArNDMsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIHNpemVfdCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNp
emVzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmlsZXNdOwogc2l6ZV90IExpbmtCdWZmZXI6OnNf
cHJvZmlsZUN1bW11bGF0aXZlTGlua2VkQ291bnRzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmls
ZXNdOwogCi1ib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aykKLXsKLSAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2Rl
QmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKTsK
LX0KLQotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6Q29tcGlsYXRpb25Nb2Rl
IG1vZGUpCi17Ci0gICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgV2FzbTo6
Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlOgotICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEJC
UURpc2Fzc2VtYmx5KCk7Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGU6
Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZToKLSAg
ICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBPTUdEaXNhc3NlbWJseSgpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIExpbmtCdWZm
ZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0
aG91dERpc2Fzc2VtYmx5SW1wbCgpCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgKaW5kZXggOTI1NTkxOGIxYmExNzVhMWY0OWRjMzAyNWVjNmZjYTg4OTM5ZDM2NC4u
MzBlM2FiZTMxYzBlMDIwMzkzMjM0ZGNiNmMyNDFiNWY2NzhjNzRmOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
CkBAIC0zNzcsNyArMzc3LDEwIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA6IHByaXZh
dGUgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZSB7CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShj
b25zdCBjaGFyKiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNz
KCksIGRhdGFMb2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAgICAgICBpZiAobV92YWx1ZSkKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRh
YmxlQWRkcmVzcygpLCBkYXRhTG9jYXRpb24oKSwgbmFtZSwgb3V0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKG51bGxw
dHIsIG51bGxwdHIsIG5hbWUsIG91dCk7CiAgICAgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0IHsgZHVtcFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYmUyZThj
ODExZDZkZGQwYzE4NGJhNWVkNGQ5NTc5MzZmZDIyNThhMi4uMDEzODYwYjY2YzJiMTlhOGNiYjU5
NTNhNWQwZTQ0ZGQyNzdmYmQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0yNiw2ICsyNiw3IEBACiAKICAgICA6QmFzaWNCbG9ja0xv
Y2F0aW9uLAogICAgIDpCb3VuZExhYmVsLAorICAgIDpDYWxsTGlua0luZm8sCiAgICAgOkRlYnVn
SG9va1R5cGUsCiAgICAgOkVDTUFNb2RlLAogICAgIDpFcnJvclR5cGVXaXRoRXh0ZW5zaW9uLApA
QCAtNDQsNyArNDUsNiBAQAogICAgIDpKU1Njb3BlLAogICAgIDpKU1R5cGUsCiAgICAgOkpTVmFs
dWUsCi0gICAgOkxMSW50Q2FsbExpbmtJbmZvLAogICAgIDpSZXN1bHRUeXBlLAogICAgIDpPcGVy
YW5kVHlwZXMsCiAgICAgOlByaXZhdGVGaWVsZFB1dEtpbmQsCkBAIC04NDAsNyArODQwLDggQEAK
ICAgICAgICAgYXJndjogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAg
ICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86
IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg1Miw3ICs4NTMsOCBAQAog
ICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAg
IGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzog
Q2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODY1LDcgKzg2Nyw4IEBACiAg
ICAgICAgIGVjbWFNb2RlOiBFQ01BTW9kZSwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5m
bzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODc5LDYgKzg4Miw3IEBA
CiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAg
ICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAt
OTAwLDYgKzkwNCw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBt
ZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKICAgICB9LApAQCAtOTIxLDYgKzkyNiw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5r
SW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CkBAIC05MzMsNyArOTM5LDggQEAKICAgICAgICAgYXJn
djogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0lu
Zm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5m
bywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6
IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTk0Nyw2ICs5NTQsNyBAQAogICAgICAgICBmaXJz
dFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJ
bmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAog
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTEyNDksNyArMTI1Nyw4
IEBACiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgaXRlcmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlv
bk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCi0g
ICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5r
SW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwK
ICAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgICAgIG1vZGVNZXRh
ZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKQEAgLTEyNzIsNyArMTI4MSw4IEBACiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgaXRl
cmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCi0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlu
a0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgbmV4dFJlc3VsdFByb2ZpbGU6IFZhbHVl
UHJvZmlsZSwKICAgICAgICAgZG9uZU1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwK
ICAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKQEAgLTEzOTMsNiArMTQwMyw5IEBA
CiBvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pzXzQ0CiBvcCA6bGxpbnRfY2xvb3Bf
ZGlkX3JldHVybl9mcm9tX2pzXzQ1CiBvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pz
XzQ2CitvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pzXzQ3CitvcCA6bGxpbnRfY2xv
b3BfZGlkX3JldHVybl9mcm9tX2pzXzQ4CitvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9t
X2pzXzQ5CiAKIGVuZF9zZWN0aW9uIDpDTG9vcEhlbHBlcnMKIApAQCAtMTQxNSw2ICsxNDI4LDEw
IEBACiBvcCA6bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50ZXJuYWxfZnVuY3Rp
b25fY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZQor
b3AgOmxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF9jb25z
dHJ1Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUK
IG9wIDpjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUKIG9w
IDpjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUKIG9wIDpub3JtYWxfb3NyX2V4aXRfdHJh
bXBvbGluZQpAQCAtMTQyMyw2ICsxNDQwLDggQEAKIG9wIDpsbGludF9oYW5kbGVfdW5jYXVnaHRf
ZXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3Rf
cmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY2FsbF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgorb3Ag
Om9wX2NvbnN0cnVjdF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NhbGxfdmFyYXJn
c19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbgpAQCAtMTQzOCwx
NSArMTQ1NywxNSBAQAogb3AgOm9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbgogb3Ag
Om9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9pdGVyYXRvcl9u
ZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCi1vcCA6b3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlv
bgogb3AgOm9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2Fs
bF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF9ldmFsX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiAKIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGwKLW9wIDpqc190cmFtcG9s
aW5lX29wX3RhaWxfY2FsbAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0CitvcCA6anNf
dHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3MKK29wIDpqc190cmFtcG9saW5lX29wX2NvbnN0cnVj
dF92YXJhcmdzCiBvcCA6anNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0CiBvcCA6anNfdHJh
bXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3cK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKaW5kZXggNGY0N2M4YmNjZjhlNTc0OGFhOWIwZjM2
ZTZmMzYzMDVhZGMzMDAxMS4uMjcwY2Q2ZjFkMDJmNDRkNTNkYjNlNmFhNjNhZmZhMTVlMGMwOTI2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKQEAgLTE4MCw3ICsxODAsNyBAQCBwdHJk
aWZmX3Qgc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCB1bnNpZ25lZCBjaGVjawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFk
YXRhPgotTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1ldGFkYXRh
JiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQorQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9p
bnRJbmRleCkKIHsKICAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4KTsKICAgICByZXR1
cm4gbWV0YWRhdGEubV9jYWxsTGlua0luZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDNiODAzYjM4YTc4NjliNDkzODljMDc5MGFi
YzhiZWI4ZDQwYTU1OGEuLmExYWZjZjkzOGE1MWYyYmMxNzJmMGZkMjAyNzEzMmU2NzJlZWQ5N2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3Bw
CkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CiAKLSNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAK
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihPcGNvZGVJ
RCBvcGNvZGVJRCkKQEAgLTgyLDExICs4MSwxMyBAQCBDYWxsTGlua0luZm86On5DYWxsTGlua0lu
Zm8oKQogCiB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJTdHViKCkKIHsKKyNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghc3R1YigpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0dWItPmNsZWFy
Q2FsbE5vZGVzRm9yKHRoaXMpOwogICAgIG1fc3R1YiA9IG51bGxwdHI7CisjZW5kaWYKIH0KIAog
dm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0pCkBAIC0xMTMsMTkgKzExNCwxOSBAQCBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmRvbmVMb2Nh
dGlvbigpCiAgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwogfQogCi1zdGF0aWMgY29uc3RleHBy
IHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwotCiB2b2lkIENhbGxMaW5rSW5m
bzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
Y2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIShi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpICYgcG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7
CiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUpOwogCi0gICAg
aWYgKGlzRGF0YUlDKCkpIAorICAgIGlmIChpc0RhdGFJQygpKQogICAgICAgICB1LmRhdGFJQy5t
X21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKICAgICBlbHNlIHsKKyNpZiBF
TkFCTEUoSklUKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKHUuY29k
ZUlDLm1fY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2Rl
UHRyKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5t
X2NhbGxlZUxvY2F0aW9uLCBjYWxsZWUpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC0xMzUsOCAr
MTM2LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNhbGxlZSgpCiAgICAgbV9jYWxsZWVP
ckNvZGVCbG9jay5jbGVhcigpOwogICAgIGlmIChpc0RhdGFJQygpKQogICAgICAgICB1LmRhdGFJ
Qy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gbnVsbHB0cjsKLSAgICBlbHNlIGlmICgh
Y2xlYXJlZEJ5SmV0dGlzb24oKSkKKyAgICBlbHNlIGlmICghY2xlYXJlZEJ5SmV0dGlzb24oKSkg
eworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uLCBudWxscHRyKTsKKyNlbmRpZgorICAgIH0KIH0K
IAogSlNPYmplY3QqIENhbGxMaW5rSW5mbzo6Y2FsbGVlKCkKQEAgLTIyNCw2ICsyMjgsNyBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKICAgICAKICAgICBpZiAoaXNMaW5r
ZWQoKSkgewogICAgICAgICBpZiAoc3R1YigpKSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
ICAgIGlmICghc3R1YigpLT52aXNpdFdlYWsodm0pKSB7CiAgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygKQEAgLTIzNCw2ICsyMzksNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZN
JiB2bSkKICAgICAgICAgICAgICAgICB1bmxpbmsodm0pOwogICAgICAgICAgICAgICAgIG1fY2xl
YXJlZEJ5R0MgPSB0cnVlOwogICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIH0gZWxzZSBp
ZiAoIXZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSkpIHsKICAgICAg
ICAgICAgIGlmIChpc0RpcmVjdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKQEAgLTI4MCwxMyArMjg2LDE0IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSYgc2h1ZmZsZURhdGEpCiB7CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVu
aXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oc2h1ZmZsZURhdGEpOwogICAgIG1fZnJhbWVTaHVm
ZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywg
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lk
KCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKQEAgLTM0NSw3ICszNTIsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbAog
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6
Ok5vKTsKQEAgLTM1OCw3ICszNjUsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUgogICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKQEAg
LTM2Niw3ICszNzMsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmCiAKIHZvaWQgQ2FsbExpbmtJ
bmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBzZXRTbG93
UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2FsbCgpLmNvZGUoKSk7CiAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZvOjpyZWdUMik7
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KQEAgLTM3
NiwyMSArMzgzLDMxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mCiAgICAgaml0Lm1vdmUoY2Fs
bExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
KCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KKyNlbmRpZgogCi12b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3ZvaWQg
Q2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgQ2FsbFR5cGUgY2FsbFR5cGUs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1l
U2h1ZmZsZURhdGEpCiB7Ci0gICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENh
bGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKLSAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlu
a0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7Ci0gICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtl
ZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247Ci0gICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZv
LmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVTaHVmZmxlRGF0YSk7
CisgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KTsKKyAgICBtX2Nh
bGxUeXBlID0gY2FsbFR5cGU7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IEdQUkluZm86
OnJlZ1QyOworICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOworICAgIGlmIChmcmFtZVNodWZm
bGVEYXRhKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEg
cmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZy
YW1lU2h1ZmZsZURhdGEpOworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVl
PENhbGxGcmFtZVNodWZmbGVEYXRhPigqZnJhbWVTaHVmZmxlRGF0YSk7CiAgICAgfQotICAgIHNl
dFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5m
b0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29k
ZTxKU0VudHJ5UHRyVGFnPigpKTsKKyNlbmRpZgorICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJ
Qzo6WWVzKTsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2Fs
bCgpLmNvZGUoKSk7CisgICAgLy8gSWYgSklUIGlzIGRpc2FibGVkLCB3ZSBzaG91bGQgbm90IHN1
cHBvcnQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNhbGwgSUMuCisgICAgaWYgKCFPcHRpb25zOjp1
c2VKSVQoKSkKKyAgICAgICAgZGlzYWxsb3dTdHVicygpOwogfQogCisjaWYgRU5BQkxFKEpJVCkK
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CkBAIC00MDYsNyArNDIzLDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCkKICAgICB9KTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWls
Q2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogCkBAIC00NjIsNiAr
NDc5LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgdGFyZ2V0KTsKIH0KKyNlbmRp
ZgogCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CkBAIC00ODMsMTEgKzUw
MSwxNCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6cmV2ZXJ0Q2FsbFRvU3R1YigpCiAgICAgICAgIG1f
Y2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoSklU
KQogICAgICAgICBDQ2FsbEhlbHBlcnM6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRy
V2l0aFBhdGNoKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwgY2FsbGVlR1BSKCks
IG51bGxwdHIpOworI2VuZGlmCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKIHZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdT
dHViKQogewogICAgIGNsZWFyU3R1YigpOwpAQCAtNTA0LDcgKzUyNSw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHVi
KQogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1f
c3R1Yi0+Y29kZSgpLmNvZGUoKSkpOwogICAgIH0KIH0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKaW5kZXggZTVmNzdjZjM3YmYyNjZmNGI5YzkzYzUwY2Y5
OTZkMjFjNjY4Y2U0NS4uYjJkM2FmYTZjZjYwZDE1YmU3YTVkNDlkODYyY2M0NWNmOGI1OGE3NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaApAQCAt
MjgsMjUgKzI4LDI5IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKICNpbmNs
dWRlICJDYWxsTW9kZS5oIgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRh
Lmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAotI2lmIEVOQUJMRShKSVQpCi0KIGNsYXNzIENDYWxsSGVscGVyczsKK2NsYXNzIEV4ZWN1
dGFibGVCYXNlOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU0Z1bmN0aW9uOwor
Y2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU7CiBlbnVtIE9wY29kZUlEIDogdW5zaWdu
ZWQ7CiAKK3N0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIHN0cnVjdCBVbmxpbmtlZENhbGxM
aW5rSW5mbzsKIAogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOworCiAgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBO
b25lLAogICAgICAgICBDYWxsLApAQCAtNTksNiArNjMsOCBAQCBjbGFzcyBDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBE
aXJlY3RDb25zdHJ1Y3QsCiAgICAgICAgIERpcmVjdFRhaWxDYWxsCiAgICAgfTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7CiAgICAg
CiAgICAgc3RhdGljIENhbGxUeXBlIGNhbGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKTsKIApA
QCAtMTc0LDM1ICsxODAsNDMgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJh
d1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgcmV0dXJuIGlzVmFyYXJnc0Nh
bGxUeXBlKHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKSk7CiAgICAgfQogCi0gICAg
Ym9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YiB8fCBtX2NhbGxlZU9yQ29kZUJs
b2NrOyB9CisgICAgYm9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuIHN0dWIoKSB8fCBtX2Nh
bGxlZU9yQ29kZUJsb2NrOyB9CiAgICAgdm9pZCB1bmxpbmsoVk0mKTsKIAorI2lmIEVOQUJMRShK
SVQpCiAgICAgdm9pZCBzZXRVcENhbGwoQ2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWVH
UFIpCiAgICAgewogICAgICAgICBtX2NhbGxUeXBlID0gY2FsbFR5cGU7CiAgICAgICAgIG1fY2Fs
bGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhW
TSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUik7Ci0KICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVHUFI7IH0KKyNlbmRpZgorCisgICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgQ2Fs
bFR5cGUsIEJ5dGVjb2RlSW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKik7CiAgICAgCiAgICAg
ZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKICAgICAgICAgWWVzLAogICAgICAgICBO
bwogICAgIH07CiAKKyNpZiBFTkFCTEUoSklUKQogcHJpdmF0ZToKLSAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlz
VGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CiAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwg
R1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJl
cGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7Ci0gICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKTsKKyAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVt
aXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOwogICAgIHN0YXRpYyB2b2lkIGVtaXREYXRh
SUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwor
CisgICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworICAgIHZvaWQgc2V0RGlyZWN0Q2Fs
bFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CisjZW5kaWYKKwogICAg
IHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6
WWVzOyB9CkBAIC0yMTcsNyArMjMxLDYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgbV9kb25lTG9jYXRp
b24gPSBkb25lTG9jYXRpb247CiAgICAgfQogCi0gICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2Fs
bCgpOwogCiAgICAgYm9vbCBhbGxvd1N0dWJzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1N0dWJz
OyB9CiAKQEAgLTIzNyw3ICsyNTAsNiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgc2V0Q29kZUJsb2Nr
KFZNJiwgSlNDZWxsKiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKICAgICB2b2lkIGNsZWFyQ29kZUJs
b2NrKCk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaygpOwotICAgIHZvaWQgc2V0
RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CiAKICAg
ICB2b2lkIHNldExhc3RTZWVuQ2FsbGVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNPYmpl
Y3QqIGNhbGxlZSk7CiAgICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCk7CkBAIC0yNDcsMjIg
KzI1OSwxOCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgc2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0
aW9uKEV4ZWN1dGFibGVCYXNlKik7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKTsK
ICAgICAKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU+JiYpOworI2VuZGlmCiAgICAgdm9pZCBjbGVhclN0dWIoKTsKIAogICAg
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViKCkgY29uc3QKICAgICB7CisjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgcmV0dXJuIG1fc3R1Yi5nZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldFNsb3dTdHViKFJlZjxKSVRTdHViUm91dGluZT4mJiBuZXdTbG93U3R1YikKLSAgICB7Ci0g
ICAgICAgIG1fc2xvd1N0dWIgPSBXVEZNb3ZlKG5ld1Nsb3dTdHViKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGNsZWFyU2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7
CisjZWxzZQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgogICAgIH0KIAogICAgIGJv
b2wgc2Vlbk9uY2UoKQpAQCAtMzMwLDE5ICszMzgsMTcgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDog
cHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOwogICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdWludDMyX3Qq
IGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICB9Ci0jZW5kaWYK
LQogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVuc2lnbmVkKTsK
KyAgICB2b2lkIHVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICAg
ICAgICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1Bh
dGhDb3VudCgpCiAgICAgewpAQCAtMzY0LDEwICszNzAsMTIgQEAgY2xhc3MgQ2FsbExpbmtJbmZv
IDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fc2xvd1BhdGhDYWxsRGVzdGlu
YXRpb24pOwogICAgIH0KIAorI2lmIEVOQUJMRShKSVQpCiAgICAgR1BSUmVnIGNhbGxlZUdQUigp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9jYWxsZWVHUFI7CiAgICAgfQorI2VuZGlmCiAKICAg
ICB1aW50MzJfdCBzbG93UGF0aENvdW50KCkKICAgICB7CkBAIC0zODMsOSArMzkxLDExIEBAIGNs
YXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJ
bmZvPiB7CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzTGlua2VkKCkpIHsKLSAgICAgICAgICAg
IGlmIChzdHViKCkpCisgICAgICAgICAgICBpZiAoc3R1YigpKSB7CisjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgICAgICAgICBzdHViKCktPmZvckVhY2hEZXBlbmRlbnRDZWxsKGZ1bmN0b3IpOwot
ICAgICAgICAgICAgZWxzZSB7CisjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgZnVuY3RvcihtX2NhbGxlZU9yQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNEaXJlY3QoKSkKICAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihtX2xhc3RT
ZWVuQ2FsbGVlT3JFeGVjdXRhYmxlLmdldCgpKTsKQEAgLTM5NywyNiArNDA3LDM1IEBAIGNsYXNz
IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZv
PiB7CiAKICAgICB2b2lkIHZpc2l0V2VhayhWTSYpOwogCisjaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIHNldEZyYW1lU2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEmKTsKIAog
ICAgIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhKiBmcmFtZVNodWZmbGVEYXRhKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2ZyYW1lU2h1ZmZsZURhdGEuZ2V0KCk7CiAgICAgfQorI2VuZGlm
CiAKIHByaXZhdGU6CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBm
YXN0UGF0aFN0YXJ0KCk7CiAKKyAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVy
IG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxv
Y2F0ZWQgZm9yIGFyZ3VtZW50cy4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewog
ICAgICAgICBVbmlvblR5cGUoKSAKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgOiBkYXRh
SUMgeyBudWxscHRyLCBJbnZhbGlkR1BSUmVnIH0KKyNlbHNlCisgICAgICAgICAgICA6IGRhdGFJ
QyB7IG51bGxwdHIgfQorI2VuZGlmCiAgICAgICAgIHsgfQogICAgICAgICBzdHJ1Y3QgRGF0YUlD
IHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21v
bm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uOworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICBH
UFJSZWcgbV9jYWxsTGlua0luZm9HUFI7CisjZW5kaWYKICAgICAgICAgfSBkYXRhSUM7CiAKICAg
ICAgICAgc3RydWN0IHsKQEAgLTQyOSw5ICs0NDgsMTAgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDog
cHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAgIFdyaXRl
QmFycmllcjxKU0NlbGw+IG1fY2FsbGVlT3JDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9sYXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZTsKKyNpZiBFTkFCTEUoSklUKQogICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gbV9zdHViOwotICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gbV9zbG93U3R1YjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+IG1fZnJhbWVTaHVmZmxlRGF0YTsKKyNlbmRpZgogICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAgICAg
Ym9vbCBtX2hhc1NlZW5DbG9zdXJlIDogMTsKQEAgLTQ0MSw5ICs0NjEsMTAgQEAgY2xhc3MgQ2Fs
bExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsK
ICAgICBib29sIG1fY2xlYXJlZEJ5SmV0dGlzb24gOiAxOwogICAgIHVuc2lnbmVkIG1fY2FsbFR5
cGUgOiA0OyAvLyBDYWxsVHlwZQogICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDogMTsgLy8gVXNl
RGF0YUlDCisjaWYgRU5BQkxFKEpJVCkKICAgICBHUFJSZWcgbV9jYWxsZWVHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisjZW5kaWYKICAgICB1aW50MzJfdCBtX3Nsb3dQYXRoQ291bnQgeyAwIH07Ci0g
ICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9y
IHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBk
aXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMu
CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtNDUzLDExICs0NzQsNyBAQCBpbmxpbmUgQ29kZU9y
aWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KQogCiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8gewogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMg
Y2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KLSAgICBDYWxsTGlua0luZm86OkNh
bGxUeXBlIGNhbGxUeXBlOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGRvbmVMb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
IGZyYW1lU2h1ZmZsZURhdGE7CiB9OwogCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcAppbmRleCBmN2FmYjJiMGYyOGZkOWU1ZmZjNWMzNGI2YTNhODU2YWUzNzMw
MmY1Li5mMmRkYTBlZWRhYWI5NjQ0YTAzYmViNmU1M2ZlYTE3MjIzYTBjYWZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0lu
Zm8uaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CiAKQEAgLTYzLDM0ICs2Miw3IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCCiAgICAg
ICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgfQogI2VuZGlmCi0KLSAgICBhdXRvIGlu
c3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSk7Ci0gICAgT3Bjb2RlSUQgb3AgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsK
LQotICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87Ci0gICAgc3dpdGNoIChvcCkg
ewotICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9u
LT5hczxPcENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgICAgICBjYWxsTGlua0lu
Zm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxv
Y2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX3RhaWxfY2Fs
bDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcFRhaWxDYWxsPigp
Lm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0
cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9j
YWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDoK
LSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4o
KS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKLSAgICB9
Ci0gICAgCi0gICAgCi0gICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKGNhbGxMaW5rSW5mby0+bGFz
dFNlZW5DYWxsZWUoKSk7CisgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7CiB9CiAKIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAyNTE1ZDQ0ZDlkNWRkYmFjMzNlYjU1
NjBlNzkwZmVhNTU5NTkyNWE1Li40MTA5MjdmMzVkNzYxNDE0YzZkNWRkMDkyYjI1NjVmYjc2NTUw
N2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApA
QCAtNDQ5LDE0ICs0NDksMTcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHRoaXMpOyBcCiAgICAgbmV3ICgmbWV0YWRhdGEp
IF9fb3A6Ok1ldGFkYXRhIHsgYnl0ZWNvZGUgfTsgXAogCi0jZGVmaW5lIENBU0UoX19vcCkgY2Fz
ZSBfX29wOjpvcGNvZGVJRAotCi0jZGVmaW5lIExJTksoLi4uKSBcCi0gICAgQ0FTRShXVEZfTEFa
WV9GSVJTVChfX1ZBX0FSR1NfXykpOiB7IFwKKyNkZWZpbmUgTElOS19JTVBMKC4uLikgXAogICAg
ICAgICBJTklUSUFMSVpFX01FVEFEQVRBKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSkgXAog
ICAgICAgICBXVEZfTEFaWV9IQVNfUkVTVChfX1ZBX0FSR1NfXykoeyBcCiAgICAgICAgICAgICBX
VEZfTEFaWV9GT1JfRUFDSF9URVJNKExJTktfRklFTEQsICBXVEZfTEFaWV9SRVNUXyhfX1ZBX0FS
R1NfXykpIFwKICAgICAgICAgfSkgXAorCisjZGVmaW5lIENBU0UoX19vcCkgY2FzZSBfX29wOjpv
cGNvZGVJRAorCisjZGVmaW5lIExJTksoLi4uKSBcCisgICAgQ0FTRShXVEZfTEFaWV9GSVJTVChf
X1ZBX0FSR1NfXykpOiB7IFwKKyAgICAgICAgTElOS19JTVBMKF9fVkFfQVJHU19fKSBcCiAgICAg
ICAgIGJyZWFrOyBcCiAgICAgfQogCkBAIC00NjUsMTAgKzQ2OCw2IEBAIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCk7CiAgICAgICAgIG1fYnl0ZWNvZGVDb3N0ICs9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURd
OwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIExJTksoT3BDYWxsVmFyYXJn
cywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxDYWxsVmFyYXJncywgcHJvZmlsZSkKLSAg
ICAgICAgTElOSyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgcHJvZmlsZSkKLSAgICAgICAg
TElOSyhPcENvbnN0cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeVZh
bCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFByaXZhdGVOYW1lLCBwcm9maWxlKQogCkBA
IC00OTgsMTEgKzQ5Nyw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJTkso
T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0
QnlWYWwsIHByb2ZpbGUpCiAKLSAgICAgICAgTElOSyhPcENhbGwsIHByb2ZpbGUpCi0gICAgICAg
IExJTksoT3BUYWlsQ2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENhbGxFdmFsLCBwcm9m
aWxlKQotICAgICAgICBMSU5LKE9wQ29uc3RydWN0LCBwcm9maWxlKQotCiAgICAgICAgIExJTkso
T3BJbkJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlWYWwpCiAgICAgICAgIExJTksoT3BQdXRC
eVZhbERpcmVjdCkKQEAgLTUyNywxMyArNTIxLDkzIEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BDYXRjaCkKICAgICAgICAgTElOSyhPcFByb2ZpbGVDb250cm9sRmxv
dykKIAorICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENh
bGwsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFs
aXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1
Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BU
YWlsQ2FsbCwgcHJvZmlsZSkKKyNpZiBFTkFCTEUoSklUKQorI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVn
VDAgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Cisj
ZW5kaWYKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOworICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBudW1QYXJhbWV0ZXJzKCk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lz
dGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisjZW5kaWYKKyAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bUxvY2FscyA9IGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdz
LnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7CisgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJnc1tpXSA9CisgICAgICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNl
ZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BS
KGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6
aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7CisjZW5k
aWYKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVn
aXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCAmc2h1ZmZsZURhdGEpOwor
I2Vsc2UKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRh
SUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5p
bmRleCgpLCBudWxscHRyKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9w
Q2FsbEV2YWwsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5p
bml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwg
aW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBMSU5LX0lN
UEwoT3BDb25zdHJ1Y3QsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5r
SW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewotICAgICAgICAg
ICAgSU5JVElBTElaRV9NRVRBREFUQShPcEl0ZXJhdG9yT3BlbikKKyAgICAgICAgICAgIExJTktf
SU1QTChPcEl0ZXJhdG9yT3BlbikKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZv
LmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
LCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7Ci0gICAgICAgICAgICBJ
TklUSUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JOZXh0KQorICAgICAgICAgICAgTElOS19JTVBM
KE9wSXRlcmF0b3JOZXh0KQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5p
dGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGlu
c3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgTElOS19J
TVBMKE9wQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxM
aW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIExJTktfSU1QTChPcFRhaWxDYWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5r
SW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cywgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2Fs
bExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogewor
ICAgICAgICAgICAgTElOS19JTVBMKE9wQ29uc3RydWN0VmFyYXJncywgcHJvZmlsZSkKKyAgICAg
ICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxM
aW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxs
cHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTc4MywyMSArODU3LDE4
IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFz
ZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CiAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgp
KTsKICAgICAgICAgaml0RGF0YS5tX3N0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0
dWJJbmZvPihqaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSk7Ci0gICAgICAgIGpp
dERhdGEubV9jYWxsTGlua0luZm9zID0gRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPihqaXRDb2Rl
LT5tX3VubGlua2VkQ2FsbHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZENh
bGxMaW5rSW5mbyA6IGppdENvZGUtPm1fdW5saW5rZWRDYWxscykgeworICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KGxvY2tlciwgdW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29k
ZUxvY2F0aW9ucyh7IH0sIHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbik7CisgICAg
ICAgIH0KKwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3Rh
bnRQb29sLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuYXQoaSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoK
ICAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxP
YmplY3QuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVyKCkpOwot
ICAgICAgICAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5m
byA9IGppdENvZGUtPm1fdW5saW5rZWRDYWxsc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvc1tpbmRleF07
Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5s
aW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAg
ICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9ICZjYWxsTGlua0luZm87
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50
ZXIoKSk7CiAgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5r
ZWRTdHViSW5mbyA9IGppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3NbaW5kZXhdOwpAQCAtMTU2
NywxNSArMTYzOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCkKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0KLSAgICBmb3JFYWNoTExJbnRD
YWxsTGlua0luZm8oWyZdKExMSW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKLSAgICAg
ICAgaWYgKGNhbGxMaW5rSW5mby5pc0xpbmtlZCgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxM
aW5rSW5mby5jYWxsZWUoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgIkNsZWFyaW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcyk7Ci0gICAgICAg
ICAgICBjYWxsTGlua0luZm8udW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhbGxM
aW5rSW5mby5sYXN0U2VlbkNhbGxlZSgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxMaW5rSW5m
by5sYXN0U2VlbkNhbGxlZSgpKSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckxhc3RT
ZWVuQ2FsbGVlKCk7Ci0gICAgfSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTU5Myw4ICsx
NjU1LDYgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVERhdGFTbG93
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJ
bmxpbmVDYWNoZXMoKQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlu
a0luZm9zKQotICAgICAgICAgICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSgpKTsKICAgICAg
ICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CiAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXJCYXNlIGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwog
ICAgICAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHRoaXMpOwpA
QCAtMTYzNyw2ICsxNjk3LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseShWTSYgdm0pCiAgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBl
KCkpKQogICAgICAgICBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAKKyAgICBmb3JFYWNo
TExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bykgeworICAgICAgICBjYWxsTGlua0luZm8udmlzaXRXZWFrKHZtKTsKKyAgICB9KTsKKwogI2lm
IEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQogICAgICAgICBmaW5hbGl6ZUpJVElu
bGluZUNhY2hlcygpOwpAQCAtMTcwMCwxMiArMTc2NCwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCiB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgSUNTdGF0dXNNYXAmIHJlc3VsdCkKIHsKICNpZiBFTkFCTEUo
SklUKQorICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgIHJlc3VsdC5hZGQoY2FsbExpbmtJbmZvLmNv
ZGVPcmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNhbGxMaW5rSW5mbyA9ICZj
YWxsTGlua0luZm87CisgICAgfSk7CiAgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkp
IHsKICAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKICAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKHN0dWJJbmZvLmNvZGVPcmlnaW4sIElDU3RhdHVzKCkpLml0
ZXJhdG9yLT52YWx1ZS5zdHViSW5mbyA9ICZzdHViSW5mbzsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hZGQoY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRl
cmF0b3ItPnZhbHVlLmNhbGxMaW5rSW5mbyA9ICZjYWxsTGlua0luZm87CiAgICAgICAgIH0KICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKSB7CkBAIC0xNzYwLDE1ICsxODI1LDIyIEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBD
b2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLUNhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9G
b3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggaW5kZXgpCitDYWxsTGlua0luZm8qIENvZGVC
bG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeXRlY29kZUluZGV4IGluZGV4KQogewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKLSAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJ
bmZvcykgewotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkgPT0gQ29k
ZU9yaWdpbihpbmRleCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICZjYWxsTGlua0luZm87Ci0g
ICAgICAgIH0KKyAgICBhdXRvJiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGluZGV4
KTsKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CisjZGVmaW5lIENBU0Uo
T3ApIFwKKyAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAorICAgICAgICByZXR1cm4gJmluc3RydWN0
aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxMaW5rSW5mbzsgXAorICAgICAgICBi
cmVhazsKKworICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENB
U0UpCisKKyN1bmRlZiBDQVNFCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQor
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRD
b2RlLT5kZmdDb21tb24oKTsKQEAgLTIxMzUsMTMgKzIyMDcsNiBAQCB2b2lkIENvZGVCbG9jazo6
c2hyaW5rVG9GaXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU2hyaW5rTW9kZSBzaHJpbmtN
b2RlKQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLXZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdD
YWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyogaW5jb21pbmcpCi17Ci0g
ICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faW5jb21pbmdD
YWxscy5wdXNoKGluY29taW5nKTsKLX0KLQogdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1Bv
bHltb3JwaGljQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2Rl
KiBpbmNvbWluZykKIHsKICAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwpAQCAt
MjE1MiwxMCArMjIxNywxNiBAQCB2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nUG9seW1vcnBo
aWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQwogfQogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKK3ZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyogaW5jb21pbmcpCit7CisgICAgbm90aWNlSW5j
b21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWlu
Zyk7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKIHsKLSAgICB3
aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxs
cy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7
CisgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5l
bmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgpKTsKICNp
ZiBFTkFCTEUoSklUKQogICAgIEpJVERhdGEqIGppdERhdGEgPSBudWxscHRyOwogICAgIHsKQEAg
LTIxNjMsMjAgKzIyMzQsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMo
KQogICAgICAgICBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpOwogICAgIH0KICAgICBpZiAoaml0
RGF0YSkgewotICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkg
IT0gaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmVuZCgpKQotICAgICAgICAgICAgaml0RGF0YS0+
bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgpKTsKICAgICAgICAgd2hpbGUgKGpp
dERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gaml0RGF0YS0+bV9p
bmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkpCiAgICAgICAgICAgICBqaXREYXRhLT5tX2lu
Y29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxpbmsodm0oKSk7CiAgICAgfQogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxs
KENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKiBpbmNvbWluZykKLXsK
LSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIG1faW5jb21pbmdMTElu
dENhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6bmV3UmVw
bGFjZW1lbnQoKQogewogICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1l
bnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOwpAQCAtMjMyOSwxMyArMjM5Miwx
MiBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJl
YXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1vZAogICAgIGlmICh2bS5oZWFwLmlzQ3VycmVudFRo
cmVhZEJ1c3koKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKSVQpCiAgICAgewogICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGlmIChKSVREYXRhKiBqaXREYXRhID0g
bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6
IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8u
c2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAgfQorICAgICAgICBmb3JFYWNoTExJbnRP
ckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgewor
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeUpldHRpc29uKCk7CisgICAgICAg
IH0pOworCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGlmIChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdD
b21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjM0NCw3ICsyNDA2LDYgQEAgdm9p
ZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24sIFJl
b3B0aW1pemF0aW9uTW9kZSBtb2QKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQotI2VuZGlmCiAK
ICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMikuCiAgICAgb3duZXJFeGVjdXRhYmxlKCktPmlu
c3RhbGxDb2RlKHZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFsaXphdGlvbktp
bmQoKSk7CkBAIC0yODQ3LDE5ICsyOTA4LDEzIEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpn
ZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRlCiB7
CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgp
OwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKLSNkZWZpbmUgQ0FTRTEo
T3ApIFwKKyNkZWZpbmUgQ0FTRShPcCkgXAogICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCiAgICAg
ICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJyYXlQ
cm9maWxlOwogCi0jZGVmaW5lIENBU0UyKE9wKSBcCi0gICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwK
LSAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9j
YWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGU7Ci0KLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9B
UlJBWV9QUk9GSUxFKENBU0UxKQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExf
TElOS19JTkZPKENBU0UyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUo
Q0FTRSkKIAotI3VuZGVmIENBU0UxCi0jdW5kZWYgQ0FTRTIKKyN1bmRlZiBDQVNFCiAKICAgICBj
YXNlIE9wR2V0QnlJZDo6b3Bjb2RlSUQ6IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CkBAIC0zMDI5LDE3ICszMDg0LDEyIEBAIHZvaWQgQ29k
ZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlCiAgICAgICAgIH0KICAgICB9KTsKIAotI2RlZmluZSBWSVNJVDEoX19v
cCkgXAorI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29w
PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEubV9hcnJheVByb2ZpbGUp
OyB9KTsKIAotI2RlZmluZSBWSVNJVDIoX19vcCkgXAotICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRhLm1fY2FsbExpbmtJ
bmZvLm1fYXJyYXlQcm9maWxlKTsgfSk7Ci0KLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJB
WV9QUk9GSUxFKFZJU0lUMSkKLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJ
TktfSU5GTyhWSVNJVDIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShW
SVNJVCkKIAotI3VuZGVmIFZJU0lUMQotI3VuZGVmIFZJU0lUMgorI3VuZGVmIFZJU0lUCiAKICAg
ICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JOZXh0PihbJl0gKGF1dG8mIG1ldGFkYXRh
KSB7CiAgICAgICAgIHByb2Nlc3MobWV0YWRhdGEubV9pdGVyYWJsZVByb2ZpbGUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDY0ZjlmNWFiY2ZlMmFl
NzA1ZDFkYTY1YWE5ZjgzMTk3Yjk2YzZkMzEuLmI3YWVhMjY3N2Y1ZTk0OTA4YWIzNTVmOTZiMGQy
M2MzNzgyNDIwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgotI2luY2x1ZGUgIkxMSW50Q2Fs
bExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIKICNpbmNs
dWRlICJNZXRhZGF0YVRhYmxlLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
aCIKQEAgLTI2MSw4ICsyNjAsNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgICAgICBG
aXhlZFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEZpeGVk
VmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwotICAgICAgICBTZW50aW5lbExp
bmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZv
Pj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBo
aWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBt
X2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVS
ZWdpc3RlcnMgeyBmYWxzZSB9OwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxl
ZVNhdmVSZWdpc3RlcnM7CkBAIC0yOTEsNyArMjg4LDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHBy
aW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQogICAgIC8vIHRoYXQg
dGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0
aGlzLCB5b3UncmUgcmVhbGx5CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKKyAgICBDYWxs
TGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgY29uc3QgSklUQ29kZU1hcCYg
aml0Q29kZU1hcCgpOwogCkBAIC0zMDksMTQgKzMwNiwxMSBAQCBjbGFzcyBDb2RlQmxvY2sgOiBw
dWJsaWMgSlNDZWxsIHsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgdm9pZCB1bmxpbmtJ
bmNvbWluZ0NhbGxzKCk7Ci0KLSNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgbGlua0luY29taW5n
Q2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8qKTsKKyNpZiBFTkFCTEUo
SklUKQogICAgIHZvaWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2Fs
bGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
Ci0gICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIExMSW50
Q2FsbExpbmtJbmZvKik7Ci0KICAgICBjb25zdCBJbnN0cnVjdGlvbiogb3V0T2ZMaW5lSnVtcFRh
cmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0
KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogICAgIHsKQEAgLTQ1Myw3ICs0NDcs
NyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlv
blByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMTEludENhbGxMaW5rSW5m
byhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBm
b3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4KTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogdW5hcnlBcml0aFByb2ZpbGVG
b3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwpAQCAtOTU5LDcgKzk1Myw3IEBAIGNsYXNz
IENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIFZNKiBtX3ZtOwogCiAgICAgY29uc3Qg
dm9pZCogbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyIHsgbnVsbHB0ciB9OwotICAgIFNlbnRpbmVs
TGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50
Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CisgICAgU2VudGluZWxMaW5rZWRM
aXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1f
aW5jb21pbmdDYWxsczsKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlk
V2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJM
RShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lu
bGluZXMuaAppbmRleCAxZDU5NGFiODM1Mjg5N2VjOGE3NDVlYTI0OTNmOGQyZGEwMThiOTYyLi45
MmRhOTlhMGJhMmFjYzFmY2RiNmE5NzM1ZmNkZGUyM2VmYzkzM2Q4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKQEAgLTg2LDcgKzg2
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25z
dCBGdW5jdG9yJiBmdW5jKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBD
b2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJiBmdW5jKQor
dm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oY29uc3Qg
RnVuY3RvciYgZnVuYykKIHsKICAgICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChf
X29wKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRD
YWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxM
aW5rSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDU4ZmZjZDkxN2RkMmM1
MDE2MmUxMzU1YjNkNThiMThlNmEwNzI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxM
aW5rSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiSlNDUHRyVGFnLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3Qu
aD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBJbnN0cnVjdGlvbjsKLQotY2xhc3MgTExJ
bnRDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExp
bmtJbmZvPiB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHVubGlua2VkQml0ID0gMHgxOwot
Ci0gICAgTExJbnRDYWxsTGlua0luZm8oKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgfkxMSW50Q2Fs
bExpbmtJbmZvKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAg
cmVtb3ZlKCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVy
biAhKG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYgdW5saW5rZWRCaXQpOyB9
Ci0gICAgCi0KLSAgICB2b2lkIGxpbmsoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
Y2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLSAg
ICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAg
ICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oY2FsbGVlKTsKLSAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGNh
bGxlZSk7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwotICAgIH0KLQot
ICAgIHZvaWQgdW5saW5rKCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2UgbGluayBpbnZhbGlkYXRl
ZC4gSXQgd29ya3MgYmVjYXVzZSBMTEludCB0ZXN0cyB0aGUgZ2l2ZW4gY2FsbGVlIHdpdGggdGhp
cyBwb2ludGVyLiBCdXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMgbGFzdFNlZW5DYWxsZWUhCi0gICAg
ICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHw9IHVubGlua2VkQml0Owot
ICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+KCk7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3Zl
KCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoIWlzTGlua2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdp
dGhMaW5rQml0KTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogbGFzdFNlZW5DYWxsZWUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVl
T3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYgfnVubGlua2VkQml0KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKQotICAgIHsKLSAgICAgICAgbV9jYWxsZWVPckxh
c3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1bmxpbmtlZEJpdDsKLSAgICB9Ci0KLSAgICBBcnJh
eVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywg
bV9hcnJheVByb2ZpbGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludHB0cl90IG1fY2FsbGVlT3JM
YXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZVRhcmdldDsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmlu
ZGV4IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFhYzgzOWJkMzYuLjFjYmM2NmY4NDk5
NTQ5OTdlZjdjNTBkNDkzODQzMDJmMzVjNjI5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3Bjb2RlLmgKQEAgLTEyNiwxMSArMTI2LDE5IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhw
cihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNybyhPcEdldFByaXZhdGVOYW1lKSBc
CiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAor
I2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykg
XAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKKyAgICBtYWNy
byhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwKKyAgICBtYWNybyhPcEl0
ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8oT3BD
YWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8o
T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBtYWNybyhPcENvbnN0cnVjdFZhcmFy
Z3MpIFwKKworI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1hY3Jv
KSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9wSW5CeVZhbCkgXAogICAg
IG1hY3JvKE9wUHV0QnlWYWwpIFwKQEAgLTEzOSw2ICsxNDcsNyBAQCBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25z
dGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BF
bnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5
KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8p
IFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJ
TEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBA
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBX
VEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09C
SkVDVF9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld09iamVjdCkg
XAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1h
Y3JvKSBcCi0gICAgbWFjcm8oT3BDYWxsKSBcCi0gICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAg
IG1hY3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBtYWNybyhPcENvbnN0cnVjdCkgXAotICAgIG1hY3Jv
KE9wSXRlcmF0b3JPcGVuKSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmlu
ZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAogICAg
IG1hY3JvKE9wQWRkKSBcCiAgICAgbWFjcm8oT3BNdWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZXBhdGNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzNjMzdkZDcyYTVhYTg2Njk5MGZk
ZjFhOTM5N2FlZTI5ZjAyMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1JlcGF0Y2guY3BwCkBAIC0wLDAgKzEsMjAzOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKKyNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisjaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiRE9N
SklUR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVk
ZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCisjaW5j
bHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0
YXRzLmgiCisjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZkFj
Y2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5j
bHVkZSAiSklULmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIK
KyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50
cy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN0
YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAi
VGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0
YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3sK
KyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2Rl
KCkudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKKyNpZiBFTkFCTEUo
SklUKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIGxpbmtTbG93UGF0
aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxK
SVRTdHViUm91dGluZVB0clRhZz4oKSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbGlua1Ns
b3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdl
dENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICBsaW5rU2xvd1Bh
dGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworfQorCitzdGF0aWMgSlNDZWxs
KiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICAvLyBFYWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMg
ZnJvbSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFw
cHJvcHJpYXRlIG93bmVyLgorICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+
KGNhbGxlZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQorfQorCit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCisgICAgVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENv
ZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAorICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQoreworICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLnN0dWIoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBm
b3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1
cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUo
KS5pc0NlbGwoKSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZy
YW1lLT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0
IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1i
bHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3du
ZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKKyAg
ICBBU1NFUlQob3duZXIpOworCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7
CisgICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVl
LCBjb2RlUHRyKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVy
LCBjYWxsZWUpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCisgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBp
biAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3Jp
Z2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9p
bnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CisjZW5kaWYKKworICAgIGlmIChjYWxsZWVDb2RlQmxv
Y2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFt
ZSwgJmNhbGxMaW5rSW5mbyk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChjYWxsTGlua0lu
Zm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFs
bG93U3R1YnMoKSkgeworICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBs
aW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmCisgICAgCisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Cit9CisK
K3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQor
eworICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgeworI2lmIEVOQUJMRShKSVQpCisg
ICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOworICAgICAgICBpZiAoIWNhbGxM
aW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAgICAgICAgY2FsbExpbmtJbmZvLmlu
aXRpYWxpemVEaXJlY3RDYWxsKCk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
IWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7CisgICAgICAgICAgICBsaW5rU2xv
d1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKworICAgICAgICAgICAgaWYgKGNh
bGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnJldmVydENh
bGxUb1N0dWIoKTsKKyAgICAgICAgfQorICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUo
KTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJvdGggZm9yIGRhdGEgYW5k
IGNvZGUtYmFzZWQgY2FjaGVzLgorICAgIH0KKyAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7
CisgICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOworICAgIGlmIChjYWxsTGlua0luZm8uaXNP
bkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2b2lkIHVubGlu
a0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86
ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOworICAgIAorICAgIHJldmVydENhbGwodm0s
IGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dlZDxKSVRTdHViUm91dGlu
ZVB0clRhZz4oKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBq
c1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNP
YmplY3QqIGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKCFjYWxs
ZWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChraW5kICE9IENvZGVGb3JDYWxs
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0g
anNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNhbGxlZSkpCisgICAgICAg
IHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxlZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2lmIEVOQUJMRShK
SVQpCisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnT3BlcmF0aW9u
V2l0aFZhbGlkYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVyYXRpb24pCit7
CisgICAgSlNDX1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJREFUSU9OKG9wZXJh
dGlvbik7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2Fs
bFRhcmdldFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4g
Y2FsbCkKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURB
VElPTihjYWxsKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVh
ZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICBy
ZXR1cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5mby5tX3Nsb3dPcGVyYXRp
b24pOworICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCA9IHN0dWJJ
bmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb247CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgICAgICBGdW5j
dGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxs
VGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVu
a1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNv
ZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5j
YWxsVGFyZ2V0KCkpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmV0dXJuIHJldGFnQ2FsbFRhcmdldFdp
dGhWYWxpZGF0aW9uKGNhbGwpOworfQorCit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBj
YWxsLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQorewor
I2lmIEVOQUJMRShGVExfSklUKQorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpGVExKSVQpIHsKKyAgICAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgICAg
ICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKKyAgICAgICAgRnVuY3Rpb25Q
dHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdl
dDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CisgICAgICAgIGF1dG8gc2xvd1BhdGhUaHVuayA9IE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEZUTDo6U2xvd1Bh
dGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRo
dW5rKTsKKyAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9u
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9uUHRy
PEpJVFRodW5rUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIGtleSkuY29k
ZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkK
KyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24u
cmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKK30KKworc3RhdGljIHZvaWQgcmVwYXRjaFNs
b3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQorewor
ICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIHN0dWJJbmZvLm1fc2xv
d09wZXJhdGlvbiA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4o
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxsZWVGdW5j
dGlvbik7Cit9CisKK2VudW0gSW5saW5lQ2FjaGVBY3Rpb24geworICAgIEdpdmVVcE9uQ2FjaGUs
CisgICAgUmV0cnlDYWNoZUxhdGVyLAorICAgIEF0dGVtcHRUb0NhY2hlCit9OworCitzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisKKyAgICBU
eXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKKyAgICBpZiAodHlwZUlu
Zm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworCisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewor
ICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgLy8gRmxhdHRlbmluZyBjb3VsZCBo
YXZlIGNoYW5nZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZvciBhbm90aGVyIHRyeS4K
KyAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKKyAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICB9CisgICAgCisgICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisKKyAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Cit9CisKK3N0YXRpYyBi
b29sIGZvcmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKK3sKKyAgICByZXR1cm4gT3B0aW9u
czo6Zm9yY2VJQ0ZhaWx1cmUoKTsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJl
V2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQm
IHJlc3VsdCkKK3sKKyAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBv
aW50cygpKSB7CisgICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHModm0pOworCisgICAgICAg
IHsKKyAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2ssIHZtKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KGxvY2tlciwgY29kZUJs
b2NrKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2lu
ZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKKyAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2lu
ZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJl
Y3Q6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAg
Y2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIHJldHVy
biBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpQ
cml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5
SWRPcHRpbWl6ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1
bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2Ug
R2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKKyAgICBj
YXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzOworICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgICAgICByZXR1
cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7CisgICAgY2FzZSBHZXRCeUtp
bmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljOworICAg
IGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBHZXRCeUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVj
dC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCisgICAgICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGNv
bnN0IGJvb2wgaXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lIHx8IGtp
bmQgPT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7CisKKyAgICAgICAgUmVmUHRyPEFjY2Vz
c0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6
VW5zZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxs
CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsK
KworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpT
QXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtp
bmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChs
b2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
SlNTdHJpbmcoYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hl
VHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgewor
ICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0
ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBq
c0R5bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFuZGxlIHRo
aXMgYXMgYSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKKyAgICAgICAgICAgICAgICAv
LyB0aGlzIHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNhc2UgZm9y
IHRoYXQgbG9hZCBpZiBuZWVkZWQuCisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92
ZXJyb2RlVGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3Ro
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChTY29wZWRBcmd1bWVudHMq
IGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4odm0sIGJhc2VDZWxs
KSkgeworICAgICAgICAgICAgICAgIC8vIERpdHRvLgorICAgICAgICAgICAgICAgIGlmICghYXJn
dW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQorICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3Vt
ZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNlbGwtPmluaGVyaXRz
PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNldCgpKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5tb2R1bGVOYW1lc3Bh
Y2VTbG90KCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5hbWVzcGFjZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpzQ2FzdDxKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNlU2xvdC0+ZW52aXJv
bm1lbnQsIFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3BlT2Zmc2V0KSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2FzZSkgeworICAgICAgICAgICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgICAgICBib29sIGxvYWRUYXJn
ZXRGcm9tUHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09
IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUHJpdmF0
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOwor
ICAgICAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAg
ICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2Vs
bCk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNj
ZXNzLgorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6
VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAg
ICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICAg
ICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJl
LT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAmJiAhbG9h
ZFRhcmdldEZyb21Qcm94eSkgeworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlu
bGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3Rv
dHlwZUFjY2Vzc0NoYWluOworCisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
bG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOworCisg
ICAgICAgICAgICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNl
VmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1c3RvbXMsIHdlIG11
c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKKyAgICAgICAgICAgICAgICAvLyBu
ZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hl
IHRoZQorICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBvaW50ZXIuCisKKyAg
ICAgICAgICAgICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBz
bG90LnNsb3RCYXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2xv
dC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpzQ2FzdDxKU09iamVj
dCo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7IC8vIFdlIG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgJiYgc3RydWN0dXJl
LT50eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNl
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAg
ICAgICAgICAgLy8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERpcmVjdCBvciBHZXRCeUtp
bmQ6OlByaXZhdGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3RpZ2F0ZSBwcm90b3R5cGUg
Y2hhaW5zIGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgLy8gQ2FjaGVhYmlsaXR5IGp1c3QgZGVw
ZW5kcyBvbiB0aGUgaGVhZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0g
R2V0QnlLaW5kOjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0
LCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMgbWF5IGhhdmUgY2hhbmdl
ZCBkdWUgdG8gZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0Fj
Y2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3Rv
dHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3VsZCBiZSBpbnNpZGUgZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlCbGFoLgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlN
aXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IG9m
ZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0
cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0Z1bmN0aW9u
KiBnZXR0ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0
ZXIoKSkKKyAgICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24q
Pih2bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOworCisgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZTsKKyAgICAgICAg
ICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21BdHRyaWJ1dGUoKSkK
KyAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJpYnV0ZSgpOworCisg
ICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsKKyAgICAgICAgICAg
ICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAgaWYgKHNs
b3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNz
Q2FzZTo6TG9hZDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0R2V0dGVyOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90
b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZy
b21Qcm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdElu
dHJpbnNpY0dldHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAg
ICAgIG5ld0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgZ2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKSB7CisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJs
ZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpMb2FkLCBwcm9w
ZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZGl0aW9uU2V0LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5
cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90Lmlz
VW5zZXQoKSA/IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShw
cm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29y
KQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vz
c29yR2V0dGVyOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMgJiYgdHlwZSA9PSBB
Y2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQs
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRl
cigpKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxl
Q3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2Uo
KSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1v
dmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNz
Q2FzZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
KworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZN
b3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkp
IHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJh
c2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9w
ZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAg
ICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoK
KyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgICAgICBj
YXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlk
RGlyZWN0OgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAg
ICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVO
YW1lOgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNj
ZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorCisgICAgZmly
ZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ss
IHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVw
T25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoR2V0QnkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQor
eworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAK
KyAgICBpZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQor
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlR2V0QnlGdW5jdGlvbihraW5kKSk7Cit9CisKKworc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIo
KSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAg
IHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNl
VmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NU
eXBlOworICAgICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFyZ3VtZW50c1R5cGUpCisg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERpcmVjdEFyZ3VtZW50
c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTY29wZWRBcmd1bWVudHNU
eXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTY29wZWRB
cmd1bWVudHNMb2FkOworICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU3RyaW5nVHlw
ZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9h
ZDsKKyAgICAgICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0lu
Zm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUlu
dDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5SW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50MTZMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
SW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5SW50MzJMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBC
aWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAgIGNh
c2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hh
cGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAgICAg
ICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMkxv
YWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBl
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91Ymxl
TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91
c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
Q29udGlndW91c0xvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5h
ZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpz
dHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vz
c1R5cGUsIG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2Rl
KCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAs
IGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJl
V2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25D
YWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgaWYgKHRyeUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZSwgaW5kZXgsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7
Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQg
cHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsK
KyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0
TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAg
ICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0
S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2
YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RH
ZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2Vu
ZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xv
dC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
KyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWM7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBp
bGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9w
cmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3Qs
IFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBzd2l0Y2ggKHB1
dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBzd2l0Y2ggKHB1
dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERl
ZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRC
eUtpbmQ6OkJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0
aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAg
ICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7
CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5
TmFtZS51aWQoKSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIGlm
IChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xv
dC5pc0NhY2hlYWJsZVNldHRlcigpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8gc29tZXRoaW5nIHNtYXJ0
ZXIgaGVyZS4uLgorICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1Y3R1cmUtPmluZGV4
aW5nTW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAv
LyBXZSBjYW4ndCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUgcHJvdG90eXBlIHNpbmNl
IGl0IHNob3VsZG4ndCBvd24gcHJvcGVydGllcy4KKyAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldy
aXRlKHNsb3QuYmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOworCisgICAgICAgIGlmICghb2xkU3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVl
LmFzQ2VsbCgpOworCisgICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNlOworICAgICAgICBpZiAo
YmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgeworICAgICAgICAg
ICAgYmFzZUNlbGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAg
ICAgICAgICBiYXNlVmFsdWUgPSBiYXNlQ2VsbDsKKyAgICAgICAgICAgIGlzUHJveHkgPSB0cnVl
OworCisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFuZCBK
Uy9DdXN0b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAorICAgICAgICAgICAgLy8gY2Fj
aGUgdHJhbnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJlIHRo
ZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50
YXRpb24uCisgICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0NhY2hl
YWJsZVB1dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9w
ZXJ0eSkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKKyAgICAg
ICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7CisgICAgICAgICAgICBpZiAo
IWlzQ2FjaGVhYmxlUHJveHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0S2luZCA9PSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmUpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAg
ICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHNsb3QuYmFz
ZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKKyAgICAgICAgICAg
IGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRjaCBidWdzIGlmIHdlIGFj
Y2lkZW50YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCisgICAgICAgICAgICAgICAgLy8g
d2hlbiB3ZSB0cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkuIFRo
aXMgaXMgY29tbW9uIGFtb25nCisgICAgICAgICAgICAgICAgLy8gcGF0aHMgdGhhdCByZWlmeSBs
YXp5IHByb3BlcnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBhbmQgZm9yZ2V0Cisg
ICAgICAgICAgICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkgY29tZSBkb3duIHRo
aXMgcGF0aC4gVGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAvLyBrbm93
IGhvdyB0byBtb2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKG9yIGFu
eSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGZvciB0aGF0IG1hdHRl
cikuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUodm0pID09IG9sZFN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgICAgICBvbGRTdHJ1
Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBl
KCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nl
c3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
bG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJl
LT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAgICAgJiYg
IWlzUHJveHkpIHsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGJv
b2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVy
dHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNo
LCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwg
cHV0QnlLaW5kLCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5p
bml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6
Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFpc1Byb3h5KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0g
UHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW9s
ZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIHN0cnVjdHVyZSBpcyBk
aWN0aW9uYXJ5LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBiZXR3ZWVuIGFuIG9i
amVjdCBhbmQgYSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBOZXdQ
cm9wZXJ0eSBvcGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9lcyBub3Qgb2ZmZXIg
YW55IGJlbmVmaXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFwcGVucyBhZ2Fpbi4K
KyAgICAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVj
dHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2Vz
QXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBpcyBvdmVycmlkZGVuIGJ5
IFVzZXJPYmplY3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVmZmVjdCBvbiBKU09i
amVjdDo6cHV0LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0UHJvcGVydHlTbG90IGFz
IG5vbi1jYWNoYWVibGUsCisgICAgICAgICAgICAgICAgLy8gdGhlbiBhcmJpdHJhcnkgc3RydWN0
dXJlIHRyYW5zaXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQgb3BlcmF0aW9uLCBhbmQg
dGhpcyBnZW5lcmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBoZXJlIGFzIGlmIG9s
ZFN0cnVjdHVyZSAtPiBuZXdTdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gSW4gcmVhbGl0
eSwgdGhlIHRyYW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0aGluZyB1bmtub3duIHN0
cnVjdHVyZXMgLT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIC8vIFRv
IGd1YXJkIGFnYWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5jb3JyZWN0IFVzZXJP
YmplY3Q6OnB1dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGlzIGNvbmRp
dGlvbiBhbmQgaWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhlIHB1dC4KKyAgICAg
ICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG5l
d1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKHZtKSAhPSBuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFuZXdT
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBS
ZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAg
ICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xv
YmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVBy
b3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVB
Y2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50LmlzUHJpdmF0ZU5hbWUo
KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVy
ZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OmNyZWF0ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBvZmZzZXQs
IG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90
eXBlQWNjZXNzQ2hhaW4pLCBzdHViSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIo
KSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0No
YWluOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgd2Un
cmUgYSBzZWxmIGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMKKyAg
ICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1
c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50CisgICAgICAgICAgICAg
ICAgLy8gZnVuY3Rpb24gcG9pbnRlci4KKyAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVz
ID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJh
c2UoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5i
YXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1
cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNj
ZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwg
YmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJv
dG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQ
cm9wZXJ0eUhpdEN1c3RvbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0g
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFj
Y2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25k
aXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1
c3RvbVNldHRlcigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFnPigpLCBzbG90LmJhc2Uo
KSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsK
KyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7
CisgICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVB
Y2Nlc3NDaGFpbjsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOworCisgICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJh
c2VWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFy
ZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hl
U3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3Qs
IGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBy
b3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3RvdHlwZUFjY2Vzc0NoYWlu
LT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSkpLT5nZXQodm0s
IGlkZW50LmltcGwoKSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0
ZTo6QWNjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9w
ZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLmF0dHJp
YnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIAorICAg
ICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBF
Q01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CisKKyAg
ICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworCisgICAgICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZO
ZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVz
dWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsK
K30KKwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlL
aW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2Vu
ZXJpY1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBK
U1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7Cisg
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGU7CisgICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBl
ZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5m
byh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50
ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlJbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZUludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheUludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2
NFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9w
dGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAg
ICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50
MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZEludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERv
dWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkRG91YmxlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3Qt
PnZtKCkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKKwor
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9P
ck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2
bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3Vs
ZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9p
ZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7
CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0
S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVy
aWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVy
aWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKK30KKworc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQs
IEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkK
KyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIEFTU0VSVChvbGRT
dHJ1Y3R1cmUpOworICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpIHx8ICFvbGRTdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlz
UHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIGlm
ICghc2xvdC5pc0NhY2hlYWJsZURlbGV0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlz
RGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAganNDYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVl
KS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAg
ICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAoc2xvdC5pc0RlbGV0
ZUhpdCgpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBpbnZhbGlk
T2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRs
eShvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0KTsKKyAgICAgICAg
ICAgIGlmICghbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBBU1NFUlQobmV3T2Zmc2V0
ID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQobmV3
U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURl
bGV0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7CisgICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2RlQmxvY2ssIHByb3Bl
cnR5TmFtZSwgbmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CisgICAgICAg
IH0gZWxzZSBpZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICBpZiAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJs
b2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHByb3BlcnR5TmFtZSwgaW52
YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRT
dHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgcHJv
cGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2Rl
KCkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoSnVtcCwg
b2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVy
dHlOYW1lLnVpZCgpKSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQo
dm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNo
b3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwor
dm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh0cnlD
YWNoZURlbGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFsdWUsIG9s
ZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwgZWNtYU1vZGUpID09IEdp
dmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRo
R2VuZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxPYmplY3QtPnZtKCkpLCBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgIGlm
IChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7CisgICAgfQorfQorCitpbmxpbmUg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVu
Y3Rpb24oSW5CeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIElu
QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Cisg
ICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemU7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIHJldHVy
biBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1
cm4gb3BlcmF0aW9uSW5CeUlkR2VuZXJpYzsKKyAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKKyAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOworICAgIGNhc2UgSW5CeUtpbmQ6
OlByaXZhdGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVHZW5l
cmljOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAorICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCisgICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtp
bmQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworCisgICAgeworICAgICAgICBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAgICAg
IGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSh2bSkt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFiYXNlLT5z
dHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5jZSgpKSkK
KyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgaWYg
KHdhc0ZvdW5kKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOworICAgICAg
ICAKKyAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3ND
aGFpbjsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
ICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFj
dGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICAgICAgaWYgKGFjdGlvbiAh
PSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAg
ICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgJiYgc2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkg
eworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsK
KyAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOworICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9j
aywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNl
KSB7CisgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNh
Y2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNh
Y2hlU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAgICAgICAg
ICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAg
cHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGds
b2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90
eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwg
c3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBy
b3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9mZnNldCgpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0
dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVsbHB0cik7
CisgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJv
dG8pIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0Fj
Y2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50Lmlt
cGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKKwor
ICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBB
Y2Nlc3NDYXNlOjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQgPyBzbG90LmNhY2hlZE9m
ZnNldCgpIDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUo
cHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRB
Y2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJp
Y3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVz
dWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQu
Y29kZSgpKTsKKyAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQorICAgICAg
ICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1
bHQuY29kZSgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgSW5saW5lQWNj
ZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVz
dWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5k
Q2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBS
ZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtp
bmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh0cnlDYWNoZUluQnko
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgd2FzRm91
bmQsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7CisgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VPYmplY3QtPmNsYXNzSW5m
byhnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKSk7CisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mbywgYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7CisgICAg
ICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZt
KTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9u
ID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1w
dFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAgICAgIGJvb2wgaXNC
YXNlUHJvcGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNz
Q2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisK
KyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6Oklu
TWlzcywgYnJhbmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7IH0sIHsgfSk7CisKKyAg
ICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2Fz
ZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZO
ZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVz
dWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsK
K30KKwordm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVh
YmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOworCisgICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1YkluZm8pID09IEdpdmVV
cE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAorICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAgICAgIGlmIChm
b3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUo
dm0pOworCisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwo
dm0sIGJhc2UpOworICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAg
ICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1
ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZEFkZEFjY2Vzc0Nh
c2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOworCisg
ICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlQ2hlY2tQ
cml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0dXJlKTsKKworICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7
CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1
bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRD
bGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAg
IHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlD
YWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VP
YmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNl
KTsKKworICAgIGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkK
KyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgeworICAgICAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7
CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBBU1NFUlQob2xkU3RydWN0
dXJlKTsKKworICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rp
b24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24g
IT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworICAgICAgICAK
KyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnNldEJyYW5kVHJh
bnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGJy
YW5kSUQudWlkKCkpOworICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIEFTU0VS
VChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOworICAgICAgICBB
U1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpT
ZXRCcmFuZCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIExPR19J
QygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVmPEFjY2Vz
c0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2YXRlQnJhbmQodm0sIGNv
ZGVCbG9jaywgYnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOworCisgICAgICAg
IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsK
KworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVw
T25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJy
YW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U09iamVjdCogYmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKworICAgIGlmICh0cnlD
YWNoZVNldFByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwg
b2xkU3RydWN0dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCisgICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0
UHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUluc3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFsdWUuaXNDZWxsKCkp
OyAvLyBzaG91bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2VsbHMuCisgICAgCisgICAg
aWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworICAgIAorICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAKKyAgICAgICAgSlNDZWxsKiB2
YWx1ZSA9IHZhbHVlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdmFsdWUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdD
YXNlOworICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVj
dCo+KHZtLCBwcm90b3R5cGVWYWx1ZSk7CisgICAgICAgIGlmIChwcm90b3R5cGUpIHsKKyAgICAg
ICAgICAgIGlmICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3Ms
IHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgcHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5wcm90
b3R5cGVRdWVyaWVzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGVhY2ggdGhpcyB0byBkbyBwb2x5IHByb3RvLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKKyAgICAgICAgICAgICAgICBw
cmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUsIHdhc0ZvdW5kID8gcHJv
dG90eXBlIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKKyAg
ICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUs
IHByb3RvdHlwZSwgd2FzRm91bmQpOworCisgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZB
Y2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LAorICAgICAgICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbnN0YW5j
ZU9mSGl0IDogQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3
Q2FzZSkKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hlYWJsZUlkZW50aWZpZXIo
KSk7CisgICAgICAgIAorICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZBZGRBY2Nl
c3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAg
CisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBXVEZNb3ZlKG5l
d0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUo
KSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVwbGFjZVdpdGhK
dW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZmly
ZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ss
IHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdp
dmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEluc3RhbmNl
T2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQpCit7CisgICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIGlmICh0cnlDYWNoZUluc3Rh
bmNlT2YoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUsIHByb3RvdHlwZVZhbHVl
LCBzdHViSW5mbywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVy
aWMpOworfQorCit2b2lkIGxpbmtEaXJlY3RDYWxsKAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ss
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCit7Cisg
ICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisKKyAgICBWTSYgdm0gPSBj
YWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNM
aW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldENvZGVCbG9jayh2bSwgY2FsbGVyQ29kZUJs
b2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjYWxsZWVDb2RlQmxvY2spKTsKKyAgICBp
ZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCisgICAgICAgIGRh
dGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ss
IGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNv
ZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CisKKyAgICBjYWxs
TGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRy
VGFnPihjb2RlUHRyKSk7CisKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICBjYWxs
ZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAmY2FsbExpbmtJbmZvKTsK
K30KKwordm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNhbGxlckNv
ZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsK
K30KKworc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIGRhdGFMb2dMbklm
KHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spLAorICAgICAgICAiTGlu
a2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBj
YWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxs
KGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0lu
Zm8sIHZpcnR1YWxUaHVuayk7CisgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeVZpcnR1YWwo
KTsKK30KKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRyIHsKKyAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0cjsKK307Cit9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbGlua1Bv
bHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENhbGxWYXJpYW50IG5ld1Zhcmlh
bnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSk7CisK
KyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIC8vIER1cmluZyBleGVjdXRp
b24gb2YgbGlua1BvbHltb3JwaGljQ2FsbCwgd2Ugc3Ryb25nbHkgYXNzdW1lIHRoYXQgd2UgbmV2
ZXIgZG8gR0MuCisgICAgLy8gR0MgamV0dGlzb25zIENvZGVCbG9ja3MsIGNoYW5nZXMgQ2FsbExp
bmtJbmZvIGV0Yy4gYW5kIGJyZWFrcyBhc3N1bXB0aW9uIGRvbmUgYmVmb3JlIGFuZCBhZnRlciB0
aGlzIGNhbGwuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDRm9yQVdoaWxlKHZtKTsKKyAg
ICAKKyAgICBpZiAoIW5ld1ZhcmlhbnQpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNh
bGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGlu
ZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwu
CisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKKyAgICBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBi
b29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1lLT5jYWxs
ZWUoKS5hc0NlbGwoKSk7CisKKyAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBo
YXZlIGEgdmFsaWQgQ29kZUJsb2NrLgorICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5
ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2Fs
bGVyQ29kZUJsb2NrOworICAgIEFTU0VSVChvd25lcik7CisKKyAgICBDYWxsVmFyaWFudExpc3Qg
bGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlu
a0luZm8uc3R1YigpKQorICAgICAgICBsaXN0ID0gc3R1Yi0+dmFyaWFudHMoKTsKKyAgICBlbHNl
IGlmIChKU09iamVjdCogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZSgpKQorICAgICAg
ICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZhcmlhbnQob2xkQ2FsbGVlKSB9OworICAg
IAorICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3QsIG5ld1ZhcmlhbnQpOwor
CisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNhbGxzIHRoZW4gaXQgbWFrZXMgc2Vu
c2UgdG8gdHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBjYWxscy4KKyAgICAvLyBUaGlzIG1h
a2VzIHN3aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQgYWxzbyBwcm9kdWNlcyBwcm9maWxp
bmcgdGhhdCdzIGVhc2llciBvbiB0aGUgREZHOworICAgIC8vIHRoZSBERkcgZG9lc24ndCByZWFs
bHkgd2FudCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBvZiBjbG9zdXJlIGFuZCBub24tY2xv
c3VyZSBjYWxsZWVzLgorICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZhbHNlOworICAgIGZvciAo
Q2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpICB7CisgICAgICAgIGlmICh2YXJpYW50LmlzQ2xv
c3VyZUNhbGwoKSkgeworICAgICAgICAgICAgbGlzdCA9IGRlc3BlY2lmaWVkVmFyaWFudExpc3Qo
bGlzdCk7CisgICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChpc0Nsb3N1cmVDYWxsKQorICAg
ICAgICBjYWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1cmUoKTsKKyAgICAKKyAgICBWZWN0b3I8
UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOworICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNl
VmFsdWVzOworICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIgY2FzZXMgYXJlLgorICAg
IGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkgJiYg
IXZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpOworICAgICAg
ICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUp
LT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICAvLyBJZiB3ZSBjYW5ub3QgaGFuZGxl
IGEgY2FsbGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgQ29kZUJsb2NrIG9yIGJl
Y2F1c2UgYXJpdHkgbWlzbWF0Y2gsCisgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGJl
dHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhIHZpcnR1YWwgY2FsbC4KKyAgICAgICAg
ICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8
IGNhbGxMaW5rSW5mby5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgIGxpbmtWaXJ0dWFs
Rm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBuZXdDYXNlVmFs
dWUgPSAwOworICAgICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAgICAgICAgICAgbmV3Q2Fz
ZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmV4ZWN1dGFibGUoKSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBwYXRoIGZvciBJbnRlcm5h
bEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTMxMQorICAgICAgICAgICAgaWYgKCFuZXdD
YXNlVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb24gPSB2YXJpYW50LmZ1bmN0aW9uKCkpCisgICAg
ICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90PihmdW5jdGlv
bik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0
d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgICAgIGlmIChjYXNl
VmFsdWVzLmNvbnRhaW5zKG5ld0Nhc2VWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJFUlJPUjogQXR0ZW1wdCB0byBhZGQgZHVwbGljYXRlIGNhc2UgdmFsdWUuXG4iKTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJFeGlzdGluZyBjYXNlIHZhbHVlczogIik7CisgICAgICAgICAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdmFs
dWUgOiBjYXNlVmFsdWVzKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCJBdHRlbXB0aW5nIHRvIGFkZDogIiwgbmV3Q2FzZVZhbHVlLCAiXG4iKTsKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJWYXJpYW50IGxpc3Q6ICIsIGxpc3REdW1wKGNhbGxDYXNlcyksICJc
biIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjYWxsQ2FzZXMuYXBwZW5kKFBvbHltb3Jw
aGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7CisgICAgICAgIGNhc2VWYWx1ZXMuYXBw
ZW5kKG5ld0Nhc2VWYWx1ZSk7CisgICAgfQorICAgIEFTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09
IGNhc2VWYWx1ZXMuc2l6ZSgpKTsKKworICAgIC8vIElmIHdlIGFyZSBvdmVyIHRoZSBsaW1pdCwg
anVzdCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgorICAgIHVuc2lnbmVkIG1heFBvbHltb3Jw
aGljQ2FsbFZhcmlhbnRMaXN0U2l6ZTsKKyAgICBpZiAoaXNXZWJBc3NlbWJseSkKKyAgICAgICAg
bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0gT3B0aW9uczo6bWF4UG9seW1vcnBo
aWNDYWxsVmFyaWFudExpc3RTaXplRm9yV2ViQXNzZW1ibHlUb0pTKCk7CisgICAgZWxzZSBpZiAo
Y2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAg
ICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVyKCk7CisgICAgZWxzZQorICAgICAg
ICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9y
cGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsKKworICAgIC8vIFdlIHVzZSBsaXN0LnNpemUoKSBp
bnN0ZWFkIG9mIGNhbGxDYXNlcy5zaXplKCkgYmVjYXVzZSB3ZSByZXNwZWN0IENhbGxWYXJpYW50
IHNpemUgZm9yIG5vdy4KKyAgICBpZiAobGlzdC5zaXplKCkgPiBtYXhQb2x5bW9ycGhpY0NhbGxW
YXJpYW50TGlzdFNpemUpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwg
Y2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxDYWxs
VG9Db2RlUHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBVbmlxdWVBcnJheTx1aW50
MzJfdD4gZmFzdENvdW50czsKKworICAgIGlmICghaXNXZWJBc3NlbWJseSAmJiBjYWxsZXJDb2Rl
QmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpIHsKKyAgICAgICAgZmFz
dENvdW50cyA9IG1ha2VVbmlxdWVBcnJheTx1aW50MzJfdD4oY2FsbENhc2VzLnNpemUoKSk7Cisg
ICAgICAgIG1lbXNldChmYXN0Q291bnRzLmdldCgpLCAwLCBjYWxsQ2FzZXMuc2l6ZSgpICogc2l6
ZW9mKHVpbnQzMl90KSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxs
TGlua0luZm8uY2FsbGVlR1BSKCk7CisKKyAgICBib29sIGlzRGF0YUlDID0gY2FsbExpbmtJbmZv
LmlzRGF0YUlDKCk7CisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoY2FsbGVyQ29kZUJsb2NrKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4gZnJhbWVTaHVmZmxlcjsK
KyAgICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkgeworICAgICAgICBBU1NF
UlQoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7CisgICAgICAgIGZyYW1lU2h1ZmZsZXIgPSBt
YWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2FsbExpbmtJbmZvLmZyYW1l
U2h1ZmZsZURhdGEoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgLy8gV2Ugd291
bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbCwgYW5kIHdl
IGNhbgorICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXIgdGhpcyBidXlzIHVz
LgorICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0NlbGwoKTsKKyNlbmRpZgor
ICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7CisgICAgfQorCisgICAg
R1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKKyAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAg
ICAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9
IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29tcGFyaXNvblZhbHVlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNh
bGxlZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IGNhbGxl
ZUdQUjsKKworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVm
ZmxlcikKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJl
R1BSKCk7CisgICAgZWxzZSB7CisgICAgICAgIGZhc3RDb3VudHNCYXNlR1BSID0KKyAgICAgICAg
ICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNvbXBhcmlz
b25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIH0KKyAgICBzdHViSml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3VudHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFz
ZUdQUik7CisKKyAgICBpZiAoIWZyYW1lU2h1ZmZsZXIgJiYgY2FsbExpbmtJbmZvLmlzVGFpbENh
bGwoKSkgeworICAgICAgICAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhhdCBjYWxsZWVHUFIgaXMg
bm90IGEgY2FsbGVlIHNhdmUgcmVnaXN0ZXIgaW4gdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgQVNT
RVJUKCFjYWxsZXJDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+ZmluZChjYWxsZWVH
UFIpKTsKKyAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgfQor
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBpZiAoaXNDbG9zdXJl
Q2FsbCkgeworICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVuY3Rpb24gYW5kIHN0
YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2hHUFIuCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpCisgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0
dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUikpOworI2Vsc2UKKyAgICAgICAgLy8gV2Ug
d291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyNl
bmRpZgorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBwYXRoIGZvciBJbnRl
cm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICBzbG93UGF0aC5hcHBlbmQo
c3R1YkppdC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOworCisgICAgICAgIHN0dWJK
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBjb21wYXJpc29uVmFsdWVHUFIpOworICAg
ICAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBzdHViSml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBjb21wYXJpc29uVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoY29tcGFyaXNvblZhbHVlR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgY29tcGFyaXNv
blZhbHVlR1BSKTsKKyAgICAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZzdHViSml0KTsKKyAgICB9
CisKKyAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1ZUdQUiwgY2Fz
ZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoc3R1YkppdCkpIHsKKyAg
ICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKTsKKyAgICAg
ICAgCisgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNbY2FzZUluZGV4XS52
YXJpYW50KCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY29kZVB0cjsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxs
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQ
dHIodm0sIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSwgdmFyaWFudC5mdW5jdGlv
bigpKTsKKyAgICAgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAgICAgICBjb2RlUHRy
ID0gdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJl
c3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkpOworICAgICAgICAgICAg
Y29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVGb3JD
YWxsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZhc3RDb3VudHMpIHsKKyAg
ICAgICAgICAgIHN0dWJKaXQuYWRkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGZh
c3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG5lZWRzRG9uZUp1bXAgPSBmYWxzZTsKKyAgICAgICAgaWYgKGZy
YW1lU2h1ZmZsZXIpIHsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKHN0dWJKaXQsIGZy
YW1lU2h1ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAg
ICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBz
dHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgIGNhbGxzW2Nhc2VJ
bmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoaXNEYXRhSUMpCisgICAgICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4
XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsK
KyAgICAgICAgICAgICAgICBuZWVkc0RvbmVKdW1wID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIgPSBjb2RlUHRyOworICAg
ICAgICBpZiAobmVlZHNEb25lSnVtcCkgeworICAgICAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7
CisgICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CisgICAgYmluYXJ5U3dpdGNo
LmZhbGxUaHJvdWdoKCkubGluaygmc3R1YkppdCk7CisKKyAgICBpZiAoZnJhbWVTaHVmZmxlcikg
eworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7CisgICAgICAg
IGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKKyAgICAgICAg
ZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3Mo
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKSk7CisjZWxzZQorICAg
ICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJ
bmZvOjpyZWdUMCkpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnByZXBhcmVGb3JT
bG93UGF0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIs
IEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUklu
Zm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0KKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBzdHVi
Sml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJ
bmZvOjpyZWdUMik7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0YUlDLCBsaW5rUmVnaXN0
ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAgLy8gMi4gSWYgaXQgaXMg
dGFpbC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24g
Zm9yIHNsb3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0byBwdXQgaXQgZm9yIHRo
ZSBzbG93LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAgICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlv
bigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAg
ICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdU
NCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlDKTsKKyAgICAgICAgaWYg
KGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6OnJldHVybkZyb21C
YXNlbGluZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQ
UkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9CisgICAgfQorCisgICAgQXNz
ZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKHBhdGNoQnVm
ZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNh
bGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7CisgICAg
Zm9yIChDYWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgeworI2lmIENQVShBUk1f
VEhVTUIyKQorICAgICAgICAvLyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcgZW5zdXJlcyBwcm9w
ZXIgbGlua2luZyBvbiBBUk0gVGh1bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBqdW1wcyB0byBhbiBh
ZGRyZXNzCisgICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEg
bm9ybWFsIGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQu
CisgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQo
Q0NhbGxIZWxwZXJzOjpDYWxsOjpUYWlsKTsKKyAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWls
Q2FsbCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQ
dHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
dGFyZ2V0KSkpOworI2Vsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRy
LmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikp
OworI2VuZGlmCisgICAgfQorCisgICAgaWYgKCFkb25lLmVtcHR5KCkpIHsKKyAgICAgICAgQVNT
RVJUKCFpc0RhdGFJQyk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJ
bmZvLmRvbmVMb2NhdGlvbigpKTsKKyAgICB9CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1v
cnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIAorICAgIGF1dG8gc3R1YlJv
dXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAorICAgICAg
ICBGSU5BTElaRV9DT0RFX0ZPUigKKyAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hC
dWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAorICAgICAgICAgICAgIlBvbHltb3JwaGljIGNh
bGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCisgICAgICAgICAg
ICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNv
ZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSku
ZGF0YSgpKSwKKyAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCksIGNh
bGxMaW5rSW5mbywgY2FsbENhc2VzLAorICAgICAgICBXVEZNb3ZlKGZhc3RDb3VudHMpKSk7CisK
KyAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMs
IGJ1dCBzdGlsbAorICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwg
Y2FsbGVlIHdpbGwgYWx3YXlzCisgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCisgICAgbGlu
a1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisKKyAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBh
IHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUg
R0MgcnVucyBhbmQgc2VlcworICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCisg
ICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOworICAgIAorICAg
IC8vIFRoZSBjYWxsIGxpbmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2FsbCBjYWNoZSBhcGFydCBm
cm9tIHRoZSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsCisgICAgLy8gc3R1Yi4KKyAgICBp
ZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCisgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUo
KTsKK30KKwordm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5j
dGlvbihraW5kKSk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
SWQ6CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKKyAgICBjYXNlIEdldEJ5S2lu
ZDo6VHJ5QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKKyAgICBjYXNlIEdl
dEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1l
OgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQoreworICAgIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVj
bHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1
bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlv
blR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7Cisg
ICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24g
PSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2Rl
QmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJp
YyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmljIHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlW
YWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWMgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZh
bFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFT
U0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCByZXNldERlbEJ5KENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQor
eworICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUp
OworICAgIGVsc2UKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCit7CisgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVu
Y3Rpb24oa2luZCkpOworICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQorICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8p
OworICAgIGVsc2UKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCit2b2lkIHJl
c2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNjZXNz
OjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8pOworfQorCit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKKyAg
ICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFu
ZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorewor
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQor
Cit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5s
aW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8pOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45M2EwMzY1
MzI2YWJmYmVkZWUwNTc1ODljNDU0MDliMmViMzY1ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApAQCAtMCwwICsxLDg5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiQ2Fs
bFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKworZW51bSBjbGFzcyBHZXRCeUtpbmQgeworICAgIEJ5
SWQsCisgICAgQnlWYWwsCisgICAgVHJ5QnlJZCwKKyAgICBCeUlkV2l0aFRoaXMsCisgICAgQnlJ
ZERpcmVjdCwKKyAgICBQcml2YXRlTmFtZSwKKyAgICBQcml2YXRlTmFtZUJ5SWQsCit9OworCitl
bnVtIGNsYXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKK2VudW0g
Y2xhc3MgRGVsQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsCit9OworCitlbnVtIGNsYXNz
IEluQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorICAgIFByaXZhdGVOYW1lCit9Owor
Cit2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBy
ZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdl
dEJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQsIFB1dEtp
bmQpOwordm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBE
ZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlm
aWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBh
dGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJl
U3R1YkluZm8mLCBJbkJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJv
b2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXBhdGNoQ2hlY2tQcml2
YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJs
ZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hTZXRQcml2YXRl
QnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIFN0cnVjdHVyZSos
IENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hJ
bnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSB2YWx1ZSwgSlNW
YWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNGb3VuZCk7Cit2b2lk
IGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2Rl
QmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBD
b2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBs
aW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgdW5saW5rQ2FsbChW
TSYsIENhbGxMaW5rSW5mbyYpOwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwordm9pZCByZXNl
dEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKK3ZvaWQg
cmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7Cit2
b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQp
Owordm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2lu
ZCk7Cit2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7Cit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwordm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJik7Cit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Cit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqLCBD
b2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpT
T2JqZWN0KiBjYWxsZWUpOworCisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZWZlN2Ix
YjMzNzY0YmRmNDJiMmU0ZjAyZDRkZjBjZDllODFjNDllCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmgKQEAgLTAsMCArMSwy
MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlJlcGF0Y2guaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjYWxs
ZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOworCisgICAgaWYgKGNhbGxMaW5rSW5mby0+
c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgYXV0byBjYWxs
RGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOworICAgICAgICBBU1NFUlQoY2FsbERhdGEu
dHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgICAgIGlmIChjYWxsRGF0YS50eXBl
ID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIGNhbGxlZUZyYW1l
LT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAgICAgICB2bS5lbmNvZGVkSG9z
dENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxs
ZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAgICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAg
ICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUo
KSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBl
OjpOb25lKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3Jl
YXRlTm90QUZ1bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKKyAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgfQorCisgICAgQVNT
RVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVj
dCk7CisKKyAgICBhdXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1Y3REYXRhKHZtLCBjYWxs
ZWUpOworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6OkpT
KTsKKworICAgIGlmIChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2
ZSkgeworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsZWVGcmFt
ZSk7CisgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Cisg
ICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJh
bWUpOworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
CisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVw
VGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlID09IENh
bGxEYXRhOjpUeXBlOjpOb25lKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNj
b3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwor
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKK30KKworQUxXQVlTX0lOTElO
RSBTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKK3sK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFj
YWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOworCisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0g
Y2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7CisgICAgSlNDZWxsKiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYg
KCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkgeworICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5j
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVl
KSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNv
ZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CisKKyAgICAgICAgICAgIGlmICgh
Y2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0U2VlbigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpbmtNb25vbW9y
cGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5h
bEZ1bmN0aW9uLCBjb2RlUHRyKTsKKworICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0ID0g
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
aGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwg
Y2FsbExpbmtJbmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgSlNTY29wZSogc2NvcGUg
PSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0
cjsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgICAgICBjb2Rl
UHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7CisgICAgICAgIGlmICgh
Y29kZVB0cikKKyAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9y
KGtpbmQsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpOworCisgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24g
PSBbJl0gKCkgeworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9OworCisgICAgICAgIGlmICgh
aXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09
IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgeworICAgICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRo
cm93RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxv
Y2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBmdW5j
dGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2
bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOworCisgICAg
ICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OworICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
KTsKKworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKKyAgICAgICAgaWYgKGNhbGxlZUZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLT5pc1ZhcmFyZ3MoKSkK
KyAgICAgICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRyID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKKyAgICB9CisK
KyAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBj
YWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwor
CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9k
ZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKworQUxXQVlTX0lO
TElORSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCit7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxs
TGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBj
YWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZ
KCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50
ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5h
bEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQ
dHIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUo
KSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAg
ICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9z
dENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJ
bmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0
aW9uLT5zY29wZVVuY2hlY2tlZCgpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
ZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhh
c0pJVENvZGVGb3Ioa2luZCkpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7CisgICAg
ICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2Vl
cFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYg
ZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVj
dCwgZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlvbigp
OworICAgICAgICB9CisKKyAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGNhbGxl
ZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKKyAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGZ1bmN0aW9uLCBz
Y29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOworICAgIH0KKyAgICAvLyBGSVhN
RTogU3VwcG9ydCB3YXNtIElDLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjAzMzkKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3IoCisgICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRk
cmVzcygpLAorICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNh
bGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1l
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggMGQxOWUyNzkwNTZlNWYz
N2U3NzFjNWM0OWEyZGIwZTZjMmQ4NDhkNy4uYWM1NzEyN2JjZjg5MDcyYmUwMzg0MTZkYTEzOWI0
MWYxNjRhZTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC00MDMsNyArNDAzLDYgQEAgdm9pZCBVbmxpbmtlZENv
ZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyh1bnNpZ25lZCBudW1CaW5hcnlBcml0aFBy
b2ZpbGVzLAogCiAjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBt
X21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCi0gICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xM
SU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAgICAgICAgIG51bWJlck9m
QXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0b3JOZXh0Pigp
OwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmll
czxPcEdldEJ5SWQ+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDQwMzk0YTk0Mzk5Mjk5M2Y1NDVhMmFjNjJjZjZlZGMw
OWRmNTU1ZmEuLjFjNTkwNDJlMGQwYzM4MTFiM2M5YmUyMTU4Y2RjNTRjMDFkYmI4MWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CkBAIC03NSw3ICs3NSw2IEBAIGNsYXNzIENhY2hlZENvZGVCbG9jazsKIAogdHlwZWRlZiB1bnNp
Z25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVu
bGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci10eXBlZGVmIHVuc2lnbmVkIFVubGlua2Vk
TExJbnRDYWxsTGlua0luZm87CiAKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSB7CiAg
ICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA1YzcyMDU4ZGNmMjE5NjBkY2Y4NTNlMGE5MmMyN2U4
OWEyZDU2YmVlLi41ZTMyZDJkMjRmMWIzZWQ4NzBjMzMwZjJlZjIzZDg1ZTRlY2U0ODM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0zMTUs
NiArMzE1LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bj
b2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBsbGludF9uYXRp
dmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jYWxsX3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25z
dHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lOgor
ICAgIGNhc2UgbGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92
aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVhbF90YWls
X2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2dldF9ob3N0X2NhbGxfcmV0dXJuX3Zh
bHVlOgogICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbjoKICAgICBjYXNl
IGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKQEAgLTMy
NSw2ICszMjksOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfaXRlcmF0
b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlv
bjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFy
Z3NfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9j
YXRpb246CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgpAQCAtMzM1LDcg
KzM0MSw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2Rl
SUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
c2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2Nh
dGlvbjoKLSAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBv
cF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF90YWls
X2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKQEAgLTM0Myw4ICszNDgsOSBAQCBD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToK
ICAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgogICAgIGNhc2UganNfdHJh
bXBvbGluZV9vcF9jYWxsOgotICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CiAg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rf
dmFyYXJnczoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dDoKICAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKICAgICBjYXNlIGpzX3RyYW1wb2xp
bmVfb3BfY2FsbF9zbG93OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGI0NTFjZGI2MWY3YTExYjMzMDJjMTg1
YzY2YmZmMTdhOWZkYmUwOWYuLmU3MjJmOWViZGFjYzg5MzY5MDY1NmQ1YjYzZTlmNjI0NDQ2MTVm
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKQEAgLTE2NiwxMCArMTY2LDEwIEBAIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNl
bGluZUNvCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9w
X2NvbnN0cnVjdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxs
RnJhbWU6OkNhbGxWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVS
Tl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6Ci0g
ICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVj
dF92YXJhcmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9M
T0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsKICAgICAgICAgICAgIGlmIChj
YWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlfaWQpCkBAIC0yMDEsMTAgKzIw
MSwxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxl
clJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogICAgICAgICBjYXNlIElubGluZUNhbGxG
cmFtZTo6Q29uc3RydWN0OgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFy
Z3M6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOiB7Ci0g
ICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9Ci0gICAgICAgICAgICAgICAg
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5k
ZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBudWxscHRyOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBjYWxsQnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm8pOwotCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5kb25lTG9jYXRp
b24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCmluZGV4IDg3OWIyMWJmMTRkZDRhOTVhMWE5MjIwZGEyOTFiMDZjMjYyOTYw
YWYuLmJmNjA3YTM3ZDA0YWMxYTc1NGMwMThjYTg0NDljNGExMjc1OTRkMDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApA
QCAtODQ3LDEwICs4NDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJ
bmRleChjYWxsU2l0ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGluZm8tPmVtaXREaXJl
Y3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAgICAgaW5mby0+ZW1pdERp
cmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAg
ICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBh
cmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CiAKICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7CiAg
ICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKQEAgLTg5
Miw3ICs4OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQog
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
Y2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIHNjb3BlZExhbWJkYTx2b2lk
KCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAg
ICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAg
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKQEAgLTkwMCw3ICs5MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5
bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
aW5kZXggOTY2NDM4MjBkYWE5MGMzNWFiMDc4ODBiN2Y3ZGQyMzRiNzBiYzZiZS4uODgyNzI5ZmZj
ZGJhODBjZDJmNGRhZjZlNWYxY2Q2ZmM2ZDc5YTVlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC05MzcsMTAgKzkzNywxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAg
IG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogCi0gICAgICAgICAgICBj
YWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
c2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6
OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBAIC05ODAsNyArOTgw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZUdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgp
PihbJl17CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTk4OCw3ICs5ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKG1f
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpO
byk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA2MjFlZDE1ZDU2
NWUzNzNkMmZiNDgyN2YyZWUxYmViMmZhMDEzMDQ4Li4yN2FmOTE3MzU5MzdhMjkxZDc5NDY0MGI2
Y2M4NmFhOGQwYjJjMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCkBAIC0xMDM5OSwxMCArMTAzOTksMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKLSAg
ICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0
aChqaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVj
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZs
ZURhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2Fs
bCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA1NTUsMTAgKzEwNTU1LDEwIEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkQ2FsbExpbmtJbmZvKGNvZGVPcmln
aW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRh
PHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KSk7CiAKICAgICAgICAgICAgICAgICBzbG93
UGF0aC5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGpp
dC5sYWJlbCgpOwpAQCAtMTA4OTgsMTAgKzEwODk4LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5H
U19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAg
IGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0lu
Zm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0
Lmp1bXAoKTsKQEAgLTExMTc5LDEwICsxMTE3OSwxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBp
ZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5q
dW1wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
aW5kZXggYzhjYmJlZTA2YmY3ZDY2NjJjMTlhNGE0YThhMThjMjFjZWZkM2Y3Mi4uZTY0NTg1MzFl
YmM5MDRkZTVkZDA0Y2UzYWJhNTNjNWJkM2M3MGIwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNzQ1LDE4ICs3NDUsMTggQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlckltcGwoR1AKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8p
CiB7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1Qz
KTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZv
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBl
bWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBHUFJJbmZvOjpyZWdU
MiwgaW5mby0+Y2FsbE1vZGUoKSk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0Vmly
dHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBp
bmZvKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdH
bG9iYWxPYmplY3QoVk0mIHZtLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZSBjYWxs
TW9kZSkKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICBtb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2Fs
bCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CiAgICAgICAgIGxpbmtC
dWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soWz0sICZ2bV0gKCkgewotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFs
VGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKLSAgICAgICAgICAgIGluZm8tPnNl
dFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1bmsp
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbE1vZGUpOwogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFsVGh1bmsuY29kZSgpKSk7
CiAgICAgICAgIH0pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggNjVkZDhlZGVmNzQ3OTk2ZDVmNmQ4ZjE5MjQ2ZTZhZDkzMzZkNDcz
OC4uYTQ0YWE1Y2Y5NTRmMmMxNjU0NzllYzJkY2Q5MjNkNWZmNGYzZDFmOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xNzUyLDcgKzE3NTIsNyBA
QCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXIgewogICAgIH0K
ICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bExpbmtJbmZvKik7Ci0gICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRo
b3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgQ2FsbE1v
ZGUpOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9p
ZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUQ29kZS5oCmluZGV4IDE1ODk2MDNmMTQ5YzI3NmMzNTllN2JiMjZkNjRm
NGQ4NTcyN2YxNTAuLjMwMDNiMDczNTAxODhlNWY3M2ZjYzk2NzIwZDZhOWU3NDFmOGJjYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaApAQCAtNjIsNyAr
NjIsNiBAQCBjbGFzcyBKSVRDb25zdGFudFBvb2wgewogCiAgICAgZW51bSBjbGFzcyBUeXBlIDog
dWludDhfdCB7CiAgICAgICAgIEdsb2JhbE9iamVjdCwKLSAgICAgICAgQ2FsbExpbmtJbmZvLAog
ICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKICAgICAgICAgRnVuY3Rpb25EZWNsLAogICAgICAg
ICBGdW5jdGlvbkV4cHIsCkBAIC05Myw3ICs5Miw2IEBAIGNsYXNzIEJhc2VsaW5lSklUQ29kZSA6
IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICB+QmFzZWxp
bmVKSVRDb2RlKCkgb3ZlcnJpZGU7CiAgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3Jp
Z2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQog
Ci0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKICAgICBGaXhlZFZl
Y3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwogICAgIEZpeGVkVmVj
dG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CiAgICAg
Rml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKaW5kZXggOTI5NDI0NjA3MzQwMDkxMWI2YzM1N2M3OGE0YTBjNmE3
NGU5YWFkNC4uMjhhZTZmNzcwZGRhY2Q3MWM2ZjE4MmM5ZDE3OWZkMWNjZWI4ZGZiYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMTAxLDEyICsxMDEsOSBAQCBzdGQ6OnR1cGxlPFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBKSVQ6
OmFkZFVubGluawogICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgc3R1YkluZm8sIHN0dWJJbmZvSW5k
ZXggfTsKIH0KIAotc3RkOjp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8oKQorVW5saW5rZWRD
YWxsTGlua0luZm8qIEpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8oKQogewotICAgIHZvaWQq
IHVubGlua2VkQ2FsbExpbmtJbmZvSW5kZXggPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4obV91bmxpbmtlZENhbGxzLnNpemUoKSkpOwotICAgIFVubGlua2VkQ2Fs
bExpbmtJbmZvKiBpbmZvID0gJm1fdW5saW5rZWRDYWxscy5hbGxvYygpOwotICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvSW5kZXggPSBhZGRUb0NvbnN0YW50UG9vbChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgdW5saW5rZWRDYWxsTGlua0luZm9J
bmRleCk7Ci0gICAgcmV0dXJuIHN0ZDo6dHVwbGUgeyBpbmZvLCBjYWxsTGlua0luZm9JbmRleCB9
OworICAgIHJldHVybiAmbV91bmxpbmtlZENhbGxzLmFsbG9jKCk7CiB9CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKQEAgLTEwMTAsNyArMTAwNyw2IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBtX2pp
dENvZGUtPm1fdW5saW5rZWRDYWxscyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZv
PihtX3VubGlua2VkQ2FsbHMuc2l6ZSgpKTsKICAgICBpZiAobV9qaXRDb2RlLT5tX3VubGlua2Vk
Q2FsbHMuc2l6ZSgpKQogICAgICAgICBzdGQ6Om1vdmUobV91bmxpbmtlZENhbGxzLmJlZ2luKCks
IG1fdW5saW5rZWRDYWxscy5lbmQoKSwgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMuYmVnaW4o
KSk7Ci0gICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxD
YWxsTGlua0luZm9zKTsKICAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBGaXhl
ZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPihtX3VubGlua2VkU3R1YkluZm9zLnNp
emUoKSk7CiAgICAgaWYgKG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpCiAg
ICAgICAgIHN0ZDo6bW92ZShtX3VubGlua2VkU3R1YkluZm9zLmJlZ2luKCksIG1fdW5saW5rZWRT
dHViSW5mb3MuZW5kKCksIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcy5iZWdpbigpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGRlMmM1Y2U3NzBiYmQ1OTNiN2FlNWZkMWE2NTI2
NzM4OTQzZGQ5YTEuLjY3YjQzZDhmYTMwYjcyY2JkNDk0NDYyMjhjNjQyOTY0ZjNkMzM1MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMTUzLDcgKzE1Myw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVu
bGlua2VkQ2FsbExpbmtJbmZvOwotICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNh
bGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKTsKQEAgLTI5NCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9
IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
ICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAg
ICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0NvbnN0YW50KTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOworICAgICAgICBi
b29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTcwNiw2ICs3MDUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwg
dHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJ
VFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiByZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKTsKKworICAgIHByaXZhdGU6CiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIC8vIFRodW5rIGdlbmVyYXRvcnMu
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CkBAIC03MjEsNyArNzI0
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYp
OwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBv
cF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9w
X3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkKQEAgLTk1OCw3ICs5NjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlw
ZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpOwogICAgICAgICBzdGQ6OnR1cGxlPFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBhZGRVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKCk7Ci0gICAgICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRDYWxsTGlu
a0luZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBhZGRVbmxpbmtlZENhbGxMaW5rSW5m
bygpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogYWRkVW5saW5rZWRDYWxsTGlua0lu
Zm8oKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtMTAyOSw3
ICsxMDMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgVmVjdG9yPEpJVENvbnN0YW50
UG9vbDo6VmFsdWU+IG1fY29uc3RhbnRQb29sOwogICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgfTsKLSAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJ
bmZvczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3Vu
bGlua2VkQ2FsbHM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOwogICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVK
dW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCmluZGV4IDA5MTk5MTU4NDY4YzBmZTEwMmI1ZGZiZmEyYmU0ZmUxNzMxOTdlMmIuLjgx
NTFmZmRlNmE5ZjJlYjBjMzI0NzVkNWJmZGRhYWVkYTEwMDAzODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTksMTcgKzU5LDIxIEBAIHZvaWQgSklUOjplbWl0X29w
X3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIFJldHVy
biB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1cm5WYWx1ZUdQUjIvcmV0dXJuVmFs
dWVHUFIgb24gMzItYml0KS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJldHVyblZhbHVlSlNSKTsKLQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKLSAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIHJldCgpOwotI2Vsc2UKLSAg
ICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIob3BfcmV0X2hhbmRsZXJHZW5lcmF0
b3IpLmNvZGUoKSk7Ci0jZW5kaWYKKyAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0
dWIocmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJh
dG9yKFZNJikKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LmNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
KyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfcmV0X2hhbmRsZXIiKTsKK30KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3Qg
T3AmIGJ5dGVjb2RlKQpAQCAtODQsNyArODgsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9w
OjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0
cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9p
ZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKQEAgLTk3LDcgKzEwMSw3IEBAIEpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50KQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlz
KDApKSwgdG1wSlNSKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHRtcEpT
Uik7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHRtcEpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHRtcEdQUik7Ci0gICAgICAgIHN0b3JlMzJUb01ldGFkYXRh
KHRtcEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZv
KCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJv
ZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9N
ZXRhZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7
CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTExMCw3ICsxMTQsNyBAQCBz
dGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwg
T3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0
YW50KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAgLTE2MCw3
ICsxNjQsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZgogCiAgICAgLy8gUHJvZmlsZSB0aGUg
YXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDUsIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZENvbnN0YW50KGNhbGxM
aW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1Qw
KTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CiAgICAgSnVtcCBub3RCaWdnZXN0
ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CiAgICAgc3RvcmUzMihyZWdUMiwgQWRk
cmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkpKTsKQEAgLTIwMyw2NCArMjA3LDU5IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2
YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGlu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKLQogICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBs
b2FkVmFsdWUoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAq
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxl
ZUpTUik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ2FsbEV2YWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5r
SW5mbygpLCBjYWxsTGlua0luZm9HUFIpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3QoKm1fdm0sIGNhbGxMaW5rSW5mb0dQUiwgQ2FsbE1vZGU6OlJlZ3VsYXIp
OwogICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENh
bGxMaW5rSW5mbyosIHVuc2lnbmVkKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxh
dGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29k
ZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQorYm9vbCBK
SVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRD
YWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKLSAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9
IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiA9IHJlZ1QyOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3BUYWlsQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCks
IGNhbGxMaW5rSW5mb0dQUik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIo
KSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CisgICAgICAgIENh
bGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhIHsgfTsKKyAgICAgICAgc2h1ZmZsZURhdGEu
bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICAgICAgc2h1ZmZsZURhdGEubnVt
UGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgICAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdp
c3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwogI2VuZGlmCi0gICAgc2h1ZmZsZURh
dGEtPm51bUxvY2FscyA9Ci0gICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVz
aXplKGJ5dGVjb2RlLm1fYXJnYyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVj
b2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KLSAgICAg
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5t
X2FyZ3YsCi0gICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKLSAgICB9CisgICAgICAgIHNo
dWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
SlNTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAorICAgICAgICAgICAgICAgICAgICBE
YXRhRm9ybWF0SlMpOworICAgICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzaHVmZmxl
RGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBheWxvYWRHUFIo
KSwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNv
dmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgRGF0YUZvcm1hdEpTKTsKICNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zl
cnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOwor
ICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVl
SlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpKTsKICNlbmRpZgotICAgIHNodWZm
bGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLQotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5m
b0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOwotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5w
YXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIgc2h1ZmZsZXIgeyAqdGhpcywgKnNodWZmbGVEYXRhIH07CisgICAgICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
ciBzaHVmZmxlciB7ICp0aGlzLCBzaHVmZmxlRGF0YSB9OwogICAgICAgICBzaHVmZmxlci5sb2Nr
R1BSKGNhbGxMaW5rSW5mb0dQUik7CiAgICAgICAgIHNodWZmbGVyLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwotICAgIH0pOworICAgIH0pKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCi0g
ICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7Ci0gICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0
YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOwotCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJl
bCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxv
Y2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjg4LDE3ICsyODcsMTQgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmQKICAgICAqLwogCiAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGlu
Zm8gPSBudWxscHRyOwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50
ID0gVUlOVF9NQVg7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgewotICAgICAg
ICBzdGQ6OnRpZShpbmZvLCBpbmZvQ29uc3RhbnQpID0gYWRkVW5saW5rZWRDYWxsTGlua0luZm8o
KTsKKyAgICAgICAgaW5mbyA9IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CiAgICAgICAgIGlu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIGluZm8tPmNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CiAgICAgICAgIEFTU0VS
VChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkp
OwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlu
a2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKICAg
ICB9Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CisgICAg
Y29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZy
YW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlh
bGl6ZWQuCiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLmJpdHMoKTsKQEAgLTMxNiwxNiArMzEyLDE2IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUpTUikpOwogI2Vu
ZGlmCiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0lu
Zm9JbmRleCwgaW5mb0NvbnN0YW50KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2Rl
LCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENvbnN0YW50KGlu
Zm9Db25zdGFudCwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAg
ICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0
UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0g
eworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQ
Uiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhjYWxsTGlua0lu
Zm9HUFIpOwotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aHMpOwogICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0g
ZG9uZUxvY2F0aW9uOwpAQCAtMzQ0LDE1ICszNDAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmQKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQpCiB7CiAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CisgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFs
KTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QzKTsKLSAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxM
aW5rSW5mbygpLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwpAQCAtMzY2LDcgKzM2Myw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAKICAgICByZXNl
dFNQKCk7CiAKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4MDM5ODM2Y2VlNmM3YjM0
ZmQyYzMwNC4uMmZlMjNjNDlmZDBmOTQwOTFmNjg2MDViNzU3YWUyY2UzMjIwMTRhMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0zNzAsMjEgKzM3MCw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKLXsKLSAgICBDQ2FsbEhlbHBl
cnMgaml0OwotCi0gICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNl
bGluZTogb3BfcmV0X2hhbmRsZXIiKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGYxNWQyZTE3M2JlNWZiNzlhOGE1YWQ1NjgyOTFhOWFk
OWMyMTk5NzUuLjQzMjcxNWZiODdhZjQ4YTM2OTdlMzMzZGFhZGM0NTBkZTQ4MDkxMGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNjAsNyArNjAs
NyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVwYXRjaC5oIgor
I2luY2x1ZGUgIlJlcGF0Y2hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgi
CkBAIC0xNDQ2LDE4NiArMTQ0Niw5IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5U
eXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9j
ayhudWxscHRyKTsKLQotICAgIGlmIChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgp
ID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0YSh2
bSwgY2FsbGVlKTsKLSAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5
cGU6OkpTKTsKLQotICAgICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6
TmF0aXZlKSB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0
KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBj
YWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZt
KSwgY2FsbGVlRnJhbWUpOwotICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgIHZtLmdldENUSVN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICBMTElu
dDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlu
a0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2Vl
cFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5
cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwotICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNh
bGxlZSkpOwotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0
KTsKLQotICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNhbGxl
ZSk7Ci0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMp
OwotCi0gICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZl
KSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1l
KTsKLSAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKLSAg
ICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2
ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFt
ZSk7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgK
LSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhl
RnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6
OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgIH0KLQot
ICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwot
ICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1
Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgcmV0dXJuIGVuY29kZVJlc3Vs
dCgKLSAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotfQot
CiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRoUmV0
dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKSkKIHsKLSAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+
c3BlY2lhbGl6YXRpb25LaW5kKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghY2FsbExpbmtJbmZvLT5p
c0RpcmVjdCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFt
ZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rp
b25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKLSAgICBpZiAoIWNhbGxlZUFz
RnVuY3Rpb25DZWxsKSB7Ci0gICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNE
eW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKLQotICAgICAgICAgICAgaWYgKCFjYWxsTGlua0lu
Zm8tPnNlZW5PbmNlKCkpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2
bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24s
IGNvZGVQdHIpOwotCi0gICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtl
ZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwotICAg
ICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0
Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0lu
Zm8pKTsKLSAgICB9Ci0KLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+
c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxl
ZS0+ZXhlY3V0YWJsZSgpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHI7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwotICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvZGVQdHIgPSBqc1Rv
V2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKLSAgICAgICAgaWYgKCFjb2RlUHRyKQot
ICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVz
dENoZWNrQXJpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7Ci0KLSAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7
Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRh
Zz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRh
YmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3Ry
dWN0KSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09m
Q29kZUJsb2NrKCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1
dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJs
b2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxl
VGhyb3dFeGNlcHRpb24oKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Nsb3Q7
Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFy
aXR5OwotICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBj
YWxsTGlua0luZm8tPmlzVmFyYXJncygpKQotICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tB
cml0eTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVx
dWlyZWQ7Ci0gICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3Ioa2luZCwgYXJpdHkpOwotICAgIH0KLQotICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25j
ZSgpKQotICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICBlbHNlCi0gICAgICAg
IGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2Rl
QmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0KLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJ
bmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBU
aGVGcmFtZSkpOwotfQotCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRo
RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rp
b25DZWxsKQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxl
ckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotCi0gICAgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7
Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUp
OwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKSB7Ci0gICAgICAgIGlm
IChqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
ID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
TGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDog
S2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxl
ZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLSAgICAKLSAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAg
IEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7Ci0gICAgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwotICAgIGlmIChV
TkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKLSAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhj
ZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihL
ZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAm
JiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBmdW5jdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9u
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2Fs
bGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwotICAgICAgICBmdW5jdGlvbkV4ZWN1dGFi
bGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVuY3Rpb24s
IHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBTdXBwb3J0IHdhc20gSUMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMDMzOQotICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcigKLSAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwgZ2xvYmFsT2JqZWN0LCBjYWxs
TGlua0luZm8pOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua1Bv
bHltb3JwaGljQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU0OGQ1MWNkYTRlMmEyMWE5MjE3OWI1MTVmOTg0YWYyYzY4ZDZkZmMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXBhdGNoLmgiCi0KLSNpZiBFTkFCTEUoSklU
KQotCi0jaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCi0jaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
Ci0jaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJDYWxs
RnJhbWVTaHVmZmxlci5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJE
RkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgotI2lu
Y2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5l
cy5oIgotI2luY2x1ZGUgIkZUTFRodW5rcy5oIgotI2luY2x1ZGUgIkZ1bGxDb2RlT3JpZ2luLmgi
Ci0jaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNTdGF0cy5oIgotI2luY2x1ZGUgIklubGlu
ZUFjY2Vzcy5oIgotI2luY2x1ZGUgIkluc3RhbmNlT2ZBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAi
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUg
IkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCi0jaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNs
dWRlICJNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBoaWNB
Y2Nlc3MuaCIKLSNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2lu
Y2x1ZGUgIlN1cGVyU2FtcGxlci5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgotI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50
U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4gb3BlcmF0aW9uKQotewotICAgIEpTQ19SRVRVUk5fUkVUQUdHRURfT1BFUkFU
SU9OX1dJVEhfVkFMSURBVElPTihvcGVyYXRpb24pOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiByZXRhZ0NhbGxUYXJnZXRXaXRoVmFsaWRhdGlvbihDb2RlTG9jYXRp
b25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwpCi17Ci0gICAgSlNDX1JFVFVSTl9SRVRBR0dF
RF9DQUxMX1RBUkdFVF9XSVRIX1ZBTElEQVRJT04oY2FsbCk7Ci19Ci0KLXN0YXRpYyBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IHJlYWRQdXRJQ0NhbGxUYXJnZXQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoY29kZUJsb2Nr
LT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmV0dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRp
b24oc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uKTsKLSAgICBDb2RlTG9jYXRpb25DYWxsPEpTSW50
ZXJuYWxQdHJUYWc+IGNhbGwgPSBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uOwotI2lm
IEVOQUJMRShGVExfSklUKQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpGVExKSVQpIHsKLSAgICAgICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9
IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gdGh1bmsgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICByZXR1cm4gcmV0YWdP
cGVyYXRpb25XaXRoVmFsaWRhdGlvbihjb2RlQmxvY2stPnZtKCkuZnRsVGh1bmtzLT5rZXlGb3JT
bG93UGF0aENhbGxUaHVuayh0aHVuaykuY2FsbFRhcmdldCgpKTsKLSAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotICAg
IHJldHVybiByZXRhZ0NhbGxUYXJnZXRXaXRoVmFsaWRhdGlvbihjYWxsKTsKLX0KLQotdm9pZCBm
dGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlv
bkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7Ci0gICAgICAgIFZNJiB2bSA9
IGNvZGVCbG9jay0+dm0oKTsKLSAgICAgICAgRlRMOjpUaHVua3MmIHRodW5rcyA9ICp2bS5mdGxU
aHVua3M7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBNYWNy
b0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOwotICAgICAg
ICBhdXRvIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJU
YWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwotICAgICAgICBGVEw6OlNsb3dQYXRoQ2FsbEtleSBrZXkgPSB0aHVua3Mua2V5Rm9yU2xv
d1BhdGhDYWxsVGh1bmsoc2xvd1BhdGhUaHVuayk7Ci0gICAgICAgIGtleSA9IGtleS53aXRoQ2Fs
bFRhcmdldChuZXdDYWxsZWVGdW5jdGlvbik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoQ2FsbChjYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odGh1bmtzLmdldFNsb3dQ
YXRoQ2FsbFRodW5rKHZtLCBrZXkpLmNvZGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
I2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7Ci0j
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHJlcGF0Y2hTbG93UGF0aENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkg
ewotICAgICAgICBzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24gPSBuZXdDYWxsZWVGdW5jdGlvbi5y
ZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8ubV9zbG93UGF0aENh
bGxMb2NhdGlvbiwgbmV3Q2FsbGVlRnVuY3Rpb24pOwotfQotCi1lbnVtIElubGluZUNhY2hlQWN0
aW9uIHsKLSAgICBHaXZlVXBPbkNhY2hlLAotICAgIFJldHJ5Q2FjaGVMYXRlciwKLSAgICBBdHRl
bXB0VG9DYWNoZQotfTsKLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwo
Vk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCk7Ci0gICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKQot
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZs
YXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgIC8vIEZsYXR0ZW5pbmcgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQsIHNvIHJldHVy
biBlYXJseSBmb3IgYW5vdGhlciB0cnkuCi0gICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0dGVu
RGljdGlvbmFyeU9iamVjdCh2bSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0g
ICAgfQotICAgIAotICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgcmV0dXJuIEF0dGVt
cHRUb0NhY2hlOwotfQotCi1zdGF0aWMgYm9vbCBmb3JjZUlDRmFpbHVyZShKU0dsb2JhbE9iamVj
dCopCi17Ci0gICAgcmV0dXJuIE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJlKCk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgc3RhdGljIHZvaWQgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQo
Vk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiByZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdC5zaG91
bGRSZXNldFN0dWJBbmRGaXJlV2F0Y2hwb2ludHMoKSkgewotICAgICAgICByZXN1bHQuZmlyZVdh
dGNocG9pbnRzKHZtKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgICAgICBzdHVi
SW5mby5yZXNldChsb2NrZXIsIGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlu
bGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0dl
dEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAg
Y2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpU
cnlCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAg
IGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICByZXR1cm4g
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVCeUlkT3B0aW1pemU7Ci0gICAgfQotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkKLXsKLSAgICBz
d2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkdldEJ5SWQ7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpczsKLSAgICBjYXNlIEdldEJ5S2lu
ZDo6VHJ5QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWQ7Ci0gICAgY2Fz
ZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlk
RGlyZWN0OwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkdldEJ5VmFsR2VuZXJpYzsKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZTsKLSAgICBjYXNlIEdldEJ5S2lu
ZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVCeUlkOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1z
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChmb3JjZUlD
RmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBp
bW1lZGlhdGVzLgotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwotICAgICAgICBjb25zdCBib29sIGlzUHJpdmF0ZSA9IGtpbmQgPT0gR2V0
QnlLaW5kOjpQcml2YXRlTmFtZSB8fCBraW5kID09IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlk
OwotCi0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwotCi0gICAgICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7Ci0gICAgICAgICAgICBp
ZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIHNs
b3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVB
Y2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0
PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVC
bG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVP
cHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5pbml0QXJyYXlMZW5ndGgobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewotICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgo
Y29kZUJsb2NrLCBzdHViSW5mbykpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxp
bmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3RoKGxvY2tl
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpT
dHJpbmdMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKERpcmVj
dEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxEaXJlY3RBcmd1bWVudHMqPih2
bSwgYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBvdmVycmlk
ZXMsIHRoZW4gd2UgY2FuIGhhbmRsZSB0aGlzIGFzIGEgbm9ybWFsIHByb3BlcnR5IGxvYWQhIEd1
YXJkaW5nCi0gICAgICAgICAgICAgICAgLy8gdGhpcyB3aXRoIHN1Y2ggYSBjaGVjayBlbmFibGVz
IHVzIHRvIGFkZCBhbiBJQyBjYXNlIGZvciB0aGF0IGxvYWQgaWYgbmVlZGVkLgotICAgICAgICAg
ICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQotICAgICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nh
c2U6OkRpcmVjdEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoU2NvcGVkQXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PFNjb3Bl
ZEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEaXR0by4K
LSAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBBY2Nlc3NDYXNlOjpTY29wZWRBcmd1bWVudHNMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJv
bCgpICYmIGJhc2VDZWxsLT5pbmhlcml0czxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4odm0pICYm
ICFzbG90LmlzVW5zZXQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gbW9kdWxlTmFtZXNwYWNl
U2xvdCA9IHNsb3QubW9kdWxlTmFtZXNwYWNlU2xvdCgpKQotICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgcHJv
cGVydHlOYW1lLCBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqPihiYXNlQ2VsbCksIG1v
ZHVsZU5hbWVzcGFjZVNsb3QtPmVudmlyb25tZW50LCBTY29wZU9mZnNldChtb2R1bGVOYW1lc3Bh
Y2VTbG90LT5zY29wZU9mZnNldCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5ld0Nhc2UpIHsKLSAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90
LmlzVW5zZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAg
ICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKLQot
ICAgICAgICAgICAgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gZmFsc2U7Ci0gICAgICAgICAg
ICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAg
ICAgICAgICAgICAgIGlmIChpc1ByaXZhdGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGpzQ2FzdDxKU1Byb3h5
Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3Ry
dWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0g
YWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNlbGwpOwotICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBB
dHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAg
ICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlCi0gICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAg
ICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
Ci0gICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZlByb3BlcnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1l
LnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5j
dGlvbihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2Vs
Zihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9w
ZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUmVmUHRyPFBv
bHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLQotICAgICAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDog
c2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICAgICAgaWYgKHNsb3QuaXNDdXN0b20oKSAm
JiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8g
Y2FjaGUgc2VsZiBjdXN0b21zLCB3ZSBtdXN0IGRpc2FsbG93IGRpY3Rpb25hcmllcyBiZWNhdXNl
IHdlCi0gICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9t
IGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNoZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb25zdGFu
dCBmdW5jdGlvbiBwb2ludGVyLgotCi0gICAgICAgICAgICAgICAgaWYgKCFwcmVwYXJlQ2hhaW5G
b3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgc2xvdC5zbG90QmFzZSgpLCBzbG90LnNsb3RCYXNlKCkp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAh
PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygp
LnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5GbGF0
dGVuZWRCZWZvcmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3Ry
dWN0dXJlKHZtLCBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlQ2VsbCkpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOyAvLyBXZSBtYXkgaGF2ZSBjaGFuZ2VkIHByb3Bl
cnR5IG9mZnNldHMuCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNs
b3QuaXNVbnNldCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJ
c0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIGEga2luZCBpcyBHZXRCeUtp
bmQ6OkJ5SWREaXJlY3Qgb3IgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSwgd2UgZG8gbm90IG5lZWQg
dG8gaW52ZXN0aWdhdGUgcHJvdG90eXBlIGNoYWlucyBmdXJ0aGVyLgotICAgICAgICAgICAgICAg
IC8vIENhY2hlYWJpbGl0eSBqdXN0IGRlcGVuZHMgb24gdGhlIGhlYWQgc3RydWN0dXJlLgotICAg
ICAgICAgICAgICAgIGlmIChraW5kICE9IEdldEJ5S2luZDo6QnlJZERpcmVjdCAmJiAhaXNQcml2
YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hh
aW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT5m
bGF0dGVuZWREaWN0aW9uYXJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0
eSBvZmZzZXRzIG1heSBoYXZlIGNoYW5nZWQgZHVlIHRvIGZsYXR0ZW5pbmcuIFdlJ2xsIGNhY2hl
IGxhdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0
YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBl
QWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVj
dCwgYmFzZUNlbGwsIHNsb3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5
cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1
cmUodm0sIHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSA9PSBvZmZzZXQp
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGluc3RlYWQgZm9yIGZhc3RlciBh
Y2Nlc3Nlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0g
bnVsbHB0cjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMg
YGlmYCBzaG91bGQgYmUgaW5zaWRlIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5QmxhaC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODUyMTUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LmlzVW5z
ZXQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZS51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCBjb25kaXRpb25TZXQuc2xvdEJhc2VD
b25kaXRpb24oKS5vZmZzZXQoKSA9PSBvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lLnVpZCgpLCBzbG90LmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgSlNGdW5jdGlvbiogZ2V0dGVyID0gbnVsbHB0cjsKLSAgICAgICAgICAg
IGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgZ2V0dGVyID0g
anNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIHNsb3QuZ2V0dGVyU2V0dGVyKCktPmdldHRl
cigpKTsKLQotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9u
PiBkb21BdHRyaWJ1dGU7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
ICYmIHNsb3QuZG9tQXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgZG9tQXR0cmlidXRlID0g
c2xvdC5kb21BdHRyaWJ1dGUoKTsKLQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5k
OjpUcnlCeUlkKSB7Ci0gICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBl
OwotICAgICAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkxvYWQ7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3ND
YXNlOjpNaXNzOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0
ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldEdldHRlcjsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHR5cGUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRj
aHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWxvYWRUYXJnZXRGcm9tUHJveHkgJiYgZ2V0dGVyICYmIEludHJpbnNpY0dl
dHRlckFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoc3R1YkluZm8sIGdldHRlciwg
c3RydWN0dXJlKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW50cmluc2ljR2V0dGVyQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGdldHRlciwgV1RGTW92ZShwcm90b3R5
cGVBY2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2xvdC5p
c1Vuc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBpc1Byb3h5ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAg
ICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6TG9hZCwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCwgaXNQcm94eSwgc2xvdC53YXRjaHBv
aW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpIHx8IHNsb3QuaXNVbnNldCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgc2xvdC5pc1Vuc2V0KCkgPyBBY2Nlc3NDYXNlOjpNaXNzIDogQWNj
ZXNzQ2FzZTo6TG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53
YXRjaHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NU
eXBlIHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVyOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5
QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbVZh
bHVlR2V0dGVyOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09IEdldEJ5S2luZDo6
QnlJZFdpdGhUaGlzICYmIHR5cGUgPT0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXIg
JiYgZG9tQXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vz
c0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHR5
cGUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRh
cmdldEZyb21Qcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNl
dCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3Nv
clB0clRhZz4oc2xvdC5jdXN0b21HZXR0ZXIoKSkgOiBudWxscHRyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSAhPSBi
YXNlVmFsdWUgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgZG9tQXR0cmlidXRlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpHZXRCeUFkZEFjY2Vzc0Nhc2UsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwo
dm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3Ry
aWN0KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJl
c3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICAg
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJ
ZFdpdGhUaGlzOgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgICAg
ICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlL
aW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgICAg
IGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgICAgICAgICBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1
bHQuY29kZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVk
KHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0K
LXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNh
bXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCi0gICAgaWYgKHRyeUNhY2hlR2V0QnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywg
a2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oa2luZCkpOwotfQotCi0K
LXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5R2V0QnlWYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZh
bHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAg
aWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7Ci0KLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAg
ICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotCi0gICAgICAgIEFjY2Vz
c0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGJhc2UtPnR5cGUoKSA9
PSBEaXJlY3RBcmd1bWVudHNUeXBlKQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWREaXJlY3RBcmd1bWVudHNMb2FkOwotICAgICAgICBlbHNlIGlmIChiYXNlLT50
eXBlKCkgPT0gU2NvcGVkQXJndW1lbnRzVHlwZSkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkU2NvcGVkQXJndW1lbnRzTG9hZDsKLSAgICAgICAgZWxzZSBpZiAo
YmFzZS0+dHlwZSgpID09IFN0cmluZ1R5cGUpCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ7Ci0gICAgICAgIGVsc2UgaWYgKGlzVHlwZWRWaWV3
KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhMb2FkOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgotICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFR5cGVJbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyTG9hZDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKLSAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQzMjoKLSAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDMyTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlw
ZUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGlu
IElDCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIxMTgzCi0gICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKLSAgICAgICAgICAgIGNh
c2UgVHlwZUJpZ1VpbnQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRl
eGluZ1NoYXBlTWFzazsKLSAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAg
ICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkSW50MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZUxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNMb2FkOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKLSAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZUxvYWQ7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7Ci0KLSAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwg
SWRlbnRpZmllcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQo
dm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5zaG91
bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZv
aWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICh0cnlDYWNoZUFycmF5R2V0QnlWYWwoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbykgPT0gR2l2ZVVwT25D
YWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQotewot
ICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKLSAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdDsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKLSAgICAgICAg
c3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKLSAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7Ci0gICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkR2VuZXJpYzsKLSAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRl
RmllbGRHZW5lcmljOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0g
ICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oY29u
c3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1
dEtpbmQpCi17Ci0gICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5S2luZDo6
QnlJZDoKLSAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgICAg
ICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgc3dpdGNoIChw
dXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0g
ICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgICAgIEFTU0VS
VChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVs
ZE9wdGltaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBNYWtl
IHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5k
IHB1dEtpbmQpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgIHsKLSAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKLQotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkK
LSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmICFzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dHJ5IHRvIGRvIHNvbWV0aGluZyBzbWFydGVyIGhlcmUuLi4KLSAgICAgICAgaWYgKGlzQ29weU9u
V3JpdGUob2xkU3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgLy8gV2UgY2FuJ3QgZW5kIHVwIHN0b3JpbmcgdG8gYSBD
b1cgb24gdGhlIHByb3RvdHlwZSBzaW5jZSBpdCBzaG91bGRuJ3Qgb3duIHByb3BlcnRpZXMuCi0g
ICAgICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShzbG90LmJhc2UoKS0+aW5kZXhpbmdNb2RlKCkp
KTsKLQotICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgSlND
ZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLQotICAgICAgICBib29sIGlzUHJv
eHkgPSBmYWxzZTsKLSAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRp
bmdQcm94eVR5cGUpIHsKLSAgICAgICAgICAgIGJhc2VDZWxsID0ganNDYXN0PEpTUHJveHkqPihi
YXNlQ2VsbCktPnRhcmdldCgpOwotICAgICAgICAgICAgYmFzZVZhbHVlID0gYmFzZUNlbGw7Ci0g
ICAgICAgICAgICBpc1Byb3h5ID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5
IG9ubHkgY2FjaGUgUmVwbGFjZSBhbmQgSlMvQ3VzdG9tIFNldHRlcnMgb24gSlNQcm94eS4gV2Ug
ZG9uJ3QKLSAgICAgICAgICAgIC8vIGNhY2hlIHRyYW5zaXRpb25zIGJlY2F1c2UgZ2xvYmFsIG9i
amVjdHMgd2lsbCBuZXZlciBzaGFyZSB0aGUgc2FtZSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgIC8v
IGluIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uLgotICAgICAgICAgICAgYm9vbCBpc0NhY2hl
YWJsZVByb3h5ID0gKHNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiBzbG90LnR5cGUoKSA9PSBQdXRQ
cm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgfHwgc2xvdC5p
c0NhY2hlYWJsZVNldHRlcigpCi0gICAgICAgICAgICAgICAgfHwgc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpOwotICAgICAgICAgICAgaWYgKCFpc0NhY2hlYWJsZVByb3h5KQotICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzUHJv
eHkgJiYgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0IHx8IHB1dEtp
bmQgPT0gUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNl
OwotCi0gICAgICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hl
YWJsZVB1dCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlT
bG90OjpFeGlzdGluZ1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBhc3NlcnQg
aGVscHMgY2F0Y2ggYnVncyBpZiB3ZSBhY2NpZGVudGFsbHkgZm9yZ2V0IHRvIGRpc2FibGUgY2Fj
aGluZwotICAgICAgICAgICAgICAgIC8vIHdoZW4gd2UgdHJhbnNpdGlvbiB0aGVuIHN0b3JlIHRv
IGFuIGV4aXN0aW5nIHByb3BlcnR5LiBUaGlzIGlzIGNvbW1vbiBhbW9uZwotICAgICAgICAgICAg
ICAgIC8vIHBhdGhzIHRoYXQgcmVpZnkgbGF6eSBwcm9wZXJ0aWVzLiBJZiB3ZSByZWlmeSBhIGxh
enkgcHJvcGVydHkgYW5kIGZvcmdldAotICAgICAgICAgICAgICAgIC8vIHRvIGRpc2FibGUgY2Fj
aGluZywgd2UgbWF5IGNvbWUgZG93biB0aGlzIHBhdGguIFRoZSBSZXBsYWNlIElDIGRvZXMgbm90
Ci0gICAgICAgICAgICAgICAgLy8ga25vdyBob3cgdG8gbW9kZWwgdGhlc2UgdHlwZXMgb2Ygc3Ry
dWN0dXJlIHRyYW5zaXRpb25zIChvciBhbnkgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgLy8g
dHJhbnNpdGlvbiBmb3IgdGhhdCBtYXR0ZXIpLgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSA9PSBvbGRTdHJ1Y3R1cmUpOwot
Ci0gICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1l
bnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAg
ICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
Ci0gICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
bGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRl
bnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29kZUJs
b2NrLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpSZXBsYWNlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9sZFN0cnVjdHVy
ZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwgaXNQcm94eSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCghaXNQcm94eSk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgLy8g
SWYgdGhlIG9sZCBzdHJ1Y3R1cmUgaXMgZGljdGlvbmFyeSwgaXQgbWVhbnMgdGhhdCB0aGlzIGlz
IG9uZS1vbi1vbmUgYmV0d2VlbiBhbiBvYmplY3QgYW5kIGEgc3RydWN0dXJlLgotICAgICAgICAg
ICAgICAgIC8vIElmIHRoaXMgaXMgTmV3UHJvcGVydHkgb3BlcmF0aW9uLCBnZW5lcmF0aW5nIElD
IGZvciB0aGlzIGRvZXMgbm90IG9mZmVyIGFueSBiZW5lZml0IGJlY2F1c2UgdGhpcyB0cmFuc2l0
aW9uIG5ldmVyIGhhcHBlbnMgYWdhaW4uCi0gICAgICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBp
ZGVudC5pbXBsKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9u
ZSksIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUgfHwgIW5ld1N0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIEpTT2Jq
ZWN0OjpwdXQgaXMgb3ZlcnJpZGRlbiBieSBVc2VyT2JqZWN0LCBVc2VyT2JqZWN0OjpwdXQgcGVy
Zm9ybXMgc2lkZS1lZmZlY3Qgb24gSlNPYmplY3Q6OnB1dCwgYW5kIGl0IG5lZ2xlY3RzIHRvIG1h
cmsgdGhlIFB1dFByb3BlcnR5U2xvdCBhcyBub24tY2FjaGFlYmxlLAotICAgICAgICAgICAgICAg
IC8vIHRoZW4gYXJiaXRyYXJ5IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyBjYW4gaGFwcGVuIGR1cmlu
ZyB0aGUgcHV0IG9wZXJhdGlvbiwgYW5kIHRoaXMgZ2VuZXJhdGVzIHdyb25nIHRyYW5zaXRpb24g
aW5mb3JtYXRpb24gaGVyZSBhcyBpZiBvbGRTdHJ1Y3R1cmUgLT4gbmV3U3RydWN0dXJlLgotICAg
ICAgICAgICAgICAgIC8vIEluIHJlYWxpdHksIHRoZSB0cmFuc2l0aW9uIGlzIG9sZFN0cnVjdHVy
ZSAtPiBzb21ldGhpbmcgdW5rbm93biBzdHJ1Y3R1cmVzIC0+IGJhc2VWYWx1ZSdzIHN0cnVjdHVy
ZS4KLSAgICAgICAgICAgICAgICAvLyBUbyBndWFyZCBhZ2FpbnN0IHRoZSBlbWJlZGRlcidzIHBv
dGVudGlhbGx5IGluY29ycmVjdCBVc2VyT2JqZWN0OjpwdXQgaW1wbGVtZW50YXRpb24sIHdlIHNo
b3VsZCBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24gYW5kIGlmIGZvdW5kLCBhbmQgZ2l2ZSB1cCBv
biBjYWNoaW5nIHRoZSBwdXQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKHZtKSA9PSBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGlm
IChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgIT0gbmV3U3RydWN0dXJlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVCghbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90
b3R5cGVBY2Nlc3NDaGFpbjsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKHB1dEtpbmQgPT0gUHV0S2lu
ZDo6Tm90RGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBw
cmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNh
Y2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90
b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFs
T2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlTZXR0ZXJNaXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHB1dEtpbmQgPT0gUHV0
S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpZGVudC5pc1ByaXZhdGVOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Modm0sIGNvZGVCbG9jaywg
Z2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVUcmFuc2l0aW9uKHZtLCBjb2RlQmxv
Y2ssIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgc3R1YkluZm8pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8
fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vz
c0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLQotICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gZG8gdGhpcyBldmVuIGlmIHdlJ3JlIGEgc2VsZiBjdXN0b20sIHNpbmNlIHdlIG11c3Qg
ZGlzYWxsb3cgZGljdGlvbmFyaWVzCi0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBuZWVk
IHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hlIHRo
ZSBjb25zdGFudAotICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uIHBvaW50ZXIuCi0gICAgICAg
ICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFs
T2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAgICAgICAgICAgIGlmICghY2Fj
aGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46
OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4g
PSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBvbGRTdHJ1Y3R1cmUs
IHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6Tm9uZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgK
LSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc2xvdC5pc0N1c3RvbUFjY2Vzc29y
KCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFjY2Vzc0Nhc2U6OkN1c3Rv
bVZhbHVlU2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vz
c0NoYWluKSwgaXNQcm94eSwgc2xvdC5jdXN0b21TZXR0ZXIoKS5yZXRhZ2dlZDxDdXN0b21BY2Nl
c3NvclB0clRhZz4oKSwgc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5iYXNlKCkgOiBu
dWxscHRyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNs
b3QuaXNDYWNoZWFibGVTZXR0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJv
dG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICAgICAg
ICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBi
YXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3Rh
dHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWlu
Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQgPSBwcm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUodm0sIGJhc2VDZWxs
LT5zdHJ1Y3R1cmUodm0pKS0+Z2V0KHZtLCBpZGVudC5pbXBsKCksIGF0dHJpYnV0ZXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkgfHwgIShhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBu
dWxscHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIHNsb3QuYmFz
ZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNj
ZXNzb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJh
c2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nh
c2U6OlNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgY29uZGl0aW9u
U2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgaXNQcm94eSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5QWRkQWNjZXNz
Q2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJh
c2VWYWx1ZSkpOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNz
Q2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3RyaWN0TW9kZSgp
ID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9wZXJ0eU5hbWUs
IFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVt
cCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQu
Y29kZSgpKTsKLQotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVX
YXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCBy
ZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9u
Q2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBpZiAo
dHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkg
PT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2lu
ZCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJh
eVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQdXRLaW5kKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghaW5kZXguaXNJbnQzMigpKQot
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotCi0gICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotCi0gICAgewot
ICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0KLSAgICAgICAgQWNj
ZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoaXNUeXBlZFZpZXco
YmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgewotICAgICAgICAg
ICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsK
LSAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKLSAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgVHlwZUludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKLSAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgotICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0
b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQz
MjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlGbG9hdDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0
QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgotICAgICAg
ICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUo
KSAmIEluZGV4aW5nU2hhcGVNYXNrOwotICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgot
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9y
YWdlU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgcmVzdWx0ID0gc3R1Yklu
Zm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9k
ZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBh
Y2Nlc3NUeXBlLCBudWxscHRyKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21l
Q29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhK
dW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7Ci0KLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9p
bnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7
Ci0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBS
ZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwg
SlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtp
bmQsIEVDTUFNb2RlIGVjbWFNb2RlKQotewotICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkg
PT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RH
ZW5lcmljKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0ZUJ5
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxl
dGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKLXsKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1
bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAgICAgICAgaWYgKGZvcmNl
SUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLQotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKCFiYXNlVmFs
dWUuaXNPYmplY3QoKSB8fCAhb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkgfHwgb2xkU3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLQotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVEZWxldGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmIChiYXNlVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgaWYg
KGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIGpz
Q2FzdDxKU09iamVjdCo+KGJhc2VWYWx1ZSktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsK
LSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0K
LSAgICAgICAgaWYgKHNsb3QuaXNEZWxldGVIaXQoKSkgewotICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgbmV3T2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKLSAgICAgICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9tRXhp
c3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlk
KCksIG5ld09mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgaWYgKCFuZXdTdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBuZXdTdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAgICAgQVNTRVJUKG5ld09mZnNldCA9PSBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUp
OwotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+dHJhbnNpdGlvbktpbmQoKSA9PSBU
cmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbik7Ci0gICAgICAgICAgICBBU1NFUlQobmV3
U3RydWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0
KG5ld09mZnNldCkpOwotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZURl
bGV0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIG5ld09mZnNldCwgb2xkU3RydWN0dXJl
LCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICB9IGVsc2UgaWYgKHNsb3QuaXNOb25jb25maWd1cmFi
bGUoKSkgewotICAgICAgICAgICAgaWYgKGVjbWFNb2RlLmlzU3RyaWN0KCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTm9uQ29uZmln
dXJhYmxlLCBwcm9wZXJ0eU5hbWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwgeyB9LCBu
dWxscHRyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0ZU1pc3MsIHByb3BlcnR5
TmFtZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgZWNtYU1vZGUsIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0K
LSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6RGVsQnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKLSAgICAgICAgICAgIElu
bGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBv
aW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQp
OwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUg
OiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNs
b3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgRGVsQnlLaW5kIGtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQotewotICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVEZWxldGVCeShnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgc2xvdCwgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc3R1Yklu
Zm8sIGtpbmQsIGVjbWFNb2RlKSA9PSBHaXZlVXBPbkNhY2hlKSB7Ci0gICAgICAgIExPR19JQygo
SUNFdmVudDo6RGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51
bGwoZ2xvYmFsT2JqZWN0LT52bSgpKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlO
YW1lLnVpZCgpKSkpOwotICAgICAgICBpZiAoa2luZCA9PSBEZWxCeUtpbmQ6OkJ5SWQpCi0gICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlv
bkRlbGV0ZUJ5SWRHZW5lcmljKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbEdlbmVy
aWMpOwotICAgIH0KLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBw
cm9wcmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCi17Ci0gICAgc3dp
dGNoIChraW5kKSB7Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGNhc2UgSW5CeUtpbmQ6OkJ5VmFsOgotICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGNhc2UgSW5CeUtpbmQ6OlBy
aXZhdGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotaW5saW5l
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0
aW9uKEluQnlLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBJbkJ5
S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlJZEdlbmVyaWM7Ci0gICAg
Y2FzZSBJbkJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFsR2Vu
ZXJpYzsKLSAgICBjYXNlIEluQnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lR2VuZXJpYzsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5C
eSgKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLAotICAg
IGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlm
aWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsK
LQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0
KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkg
fHwgKCF3YXNGb3VuZCAmJiAhYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZUZvckFic2VuY2UoKSkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICh3YXNGb3VuZCkgewotICAgICAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nl
c3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKHdhc0ZvdW5kKSB7Ci0gICAgICAg
ICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsK
LSAgICAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGFjdGlvbjsKLQotICAgICAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3Mu
Ci0gICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNl
dAotICAgICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAg
ICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKLSAgICAgICAgICAgICAgICAmJiAhc2xv
dC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09
IGJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkluQnlJZE9wdGltaXplKTsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdElu
QnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChzbG90LnNsb3RCYXNlKCkgIT0gYmFzZSkgewotICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVT
dGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT5m
bGF0dGVuZWREaWN0aW9uYXJ5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNo
ZUxhdGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3Rv
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3Rv
QWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3NDaGFp
bi0+c2xvdEJhc2VTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlOYW1l
LnVpZCgpKSA9PSBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBjb25kaXRp
b25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKSA9PSBzbG90LmNhY2hlZE9mZnNldCgp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9i
YWxPYmplY3QsIGJhc2UsIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgaWYg
KGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgcHJvdG90eXBl
QWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVj
dCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFp
bikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0
cjsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Qu
c2xvdEJhc2UoKSA9PSBiYXNlKSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2Ug
PSBBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB3YXNGb3Vu
ZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBwcm9wZXJ0eU5hbWUs
IHdhc0ZvdW5kID8gc2xvdC5jYWNoZWRPZmZzZXQoKSA6IGludmFsaWRPZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0KLSAgICAg
ICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdD
YXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKLQotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBpZiAoa2luZCA9
PSBJbkJ5S2luZDo6QnlJZCkKLSAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywg
Y29kZUJsb2NrLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVw
Tm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0
Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1
cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
Ci0KLSAgICBpZiAodHJ5Q2FjaGVJbkJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2
ZVVwT25DYWNoZSkgewotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhHZW5l
cmljLCBiYXNlT2JqZWN0LT5jbGFzc0luZm8oZ2xvYmFsT2JqZWN0LT52bSgpKSwgSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwotICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5j
dGlvbihraW5kKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQs
IGJvb2wgd2FzRm91bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1
bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5k
SUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShn
bG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAg
IElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAg
ICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgcmV0dXJuIGFj
dGlvbjsKLQotICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2Fz
ZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIGJyYW5kSUQsIGludmFsaWRPZmZzZXQsIHN0
cnVjdHVyZSwgeyB9LCB7IH0pOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vz
c0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgp
LCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNl
V2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkp
OwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAg
ICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVX
YXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCBy
ZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9u
Q2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFu
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNP
YmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNG
b3VuZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNoZUhhc1ByaXZh
dGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgYnJhbmRJRCwgd2Fz
Rm91bmQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZEdlbmVy
aWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVDaGVja1ByaXZhdGVC
cmFuZCgKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwKLSAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElELnVpZCgpKTsKLQotICAg
IHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKLQotICAgICAgICBJbmxpbmVDYWNoZUFjdGlv
biBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKLSAgICAgICAgaWYgKGFjdGlvbiAh
PSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAgICAg
Ym9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6Q2hl
Y2tQcml2YXRlQnJhbmRBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZUNoZWNrUHJpdmF0ZUJyYW5kKHZtLCBjb2RlQmxvY2ssIGJyYW5k
SUQsIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJy
YW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVk
U29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVC
cmFuZFJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFz
ZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkp
OwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RV
c2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBj
b2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygp
ID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQ2hl
Y2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5k
SUQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVDaGVja1ByaXZh
dGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgYnJhbmRJRCwgc3R1
YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRHZW5lcmljKTsKLX0K
LQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKAotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09i
amVjdCogYmFzZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIg
YnJhbmRJRCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElE
LnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xv
YmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAK
LSAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7Ci0KLSAgICAgICAgaWYgKG9sZFN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwot
Ci0gICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJh
c2UpOwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAg
cmV0dXJuIGFjdGlvbjsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpzZXRCcmFuZFRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVDb25j
dXJyZW50bHkob2xkU3RydWN0dXJlLCBicmFuZElELnVpZCgpKTsKLSAgICAgICAgaWYgKCFuZXdT
dHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICBp
ZiAobmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0g
b2xkU3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+dHJhbnNpdGlvbktp
bmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6U2V0QnJhbmQpOwotICAgICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNCYXNlUHJvcGVy
dHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlNldFByaXZhdGVCcmFuZEFkZEFj
Y2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0
eSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3Jl
YXRlU2V0UHJpdmF0ZUJyYW5kKHZtLCBjb2RlQmxvY2ssIGJyYW5kSUQsIG9sZFN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJh
bmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRT
b21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlNldFByaXZhdGVCcmFu
ZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFz
ZVByb3BlcnR5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0K
LXZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgIGJyYW5kSUQsIHN0dWJJbmZv
KSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1zdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbnN0YW5jZU9mKAotICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIHZhbHVlVmFs
dWUsIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywK
LSAgICBib29sIHdhc0ZvdW5kKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FT
U0VSVCh2YWx1ZVZhbHVlLmlzQ2VsbCgpKTsgLy8gc2hvdWxkQ29uc2lkZXJDYWNoaW5nIHJlamVj
dHMgbm9uLWNlbGxzLgotICAgIAotICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3Qp
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICB7Ci0gICAgICAgIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAg
ICAgICAgCi0gICAgICAgIEpTQ2VsbCogdmFsdWUgPSB2YWx1ZVZhbHVlLmFzQ2VsbCgpOwotICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLT5zdHJ1Y3R1cmUodm0pOwotICAgICAg
ICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLSAgICAgICAgSlNPYmplY3QqIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJvdG90eXBlVmFsdWUpOwotICAgICAg
ICBpZiAocHJvdG90eXBlKSB7Ci0gICAgICAgICAgICBpZiAoIWpzRHluYW1pY0Nhc3Q8SlNPYmpl
Y3QqPih2bSwgdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZB
Y2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIEFj
Y2Vzc0Nhc2U6Okluc3RhbmNlT2ZNaXNzLCBzdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZSk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlUXVlcmllc0FyZUNhY2hlYWJsZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgdG8gZG8gcG9seSBwcm90by4KLSAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTg1NjYzCi0gICAgICAgICAgICAgICAgcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmpl
Y3QsIHZhbHVlLCB3YXNGb3VuZCA/IHByb3RvdHlwZSA6IG51bGxwdHIpOwotICAgICAgICAgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0Zvckluc3RhbmNlT2YoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm90b3R5cGUsIHdhc0ZvdW5kKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG5ld0Nhc2UgPSBJbnN0YW5jZU9mQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhc0Zv
dW5kID8gQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkhpdCA6IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZN
aXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHBy
b3RvdHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoIW5ld0Nhc2UpCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZHZW5l
cmljLCBDYWNoZWFibGVJZGVudGlmaWVyKCkpOwotICAgICAgICAKLSAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpJbnN0YW5jZU9mQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
SWRlbnRpZmllcigpKSk7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRB
Y2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJp
Y3QoKSwgbnVsbHB0ciwgV1RGTW92ZShuZXdDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
cmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6SW5zdGFuY2VPZlJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRl
bnRpZmllcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVk
KHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwot
fQotCi12b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIHZhbHVlVmFsdWUsIEpTVmFsdWUg
cHJvdG90eXBlVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBib29sIHdh
c0ZvdW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNl
KTsKLSAgICBpZiAodHJ5Q2FjaGVJbnN0YW5jZU9mKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCB2
YWx1ZVZhbHVlLCBwcm90b3R5cGVWYWx1ZSwgc3R1YkluZm8sIHdhc0ZvdW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dQ
YXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewotICAgIGNhbGxMaW5rSW5mby5z
ZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dl
ZDxKU0VudHJ5UHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQotewotICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIo
Z2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFs
VGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgbGlua1Nsb3dQ
YXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0luZm8u
c2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxUaHVu
aykpOwotfQotCi1zdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVl
KQotewotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAvLyBFYWNoIFdlYkFzc2VtYmx5Lklu
c3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdo
aWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVyLgotICAgIHJldHVybiBqc0Nh
c3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShjYWxsZWUpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotfQotCi12b2lkIGxpbmtN
b25vbW9ycGhpY0NhbGwoCi0gICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIEpT
T2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7Ci0KLSAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIC8vIE91ciBj
YWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwotICAgIC8v
IHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCi0gICAgQVNT
RVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7Ci0KLSAgICBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIC8vIFdlYkFz
c2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCi0gICAgSlND
ZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFz
Q2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgp
KSA6IGNhbGxlckNvZGVCbG9jazsKLSAgICBBU1NFUlQob3duZXIpOwotCi0gICAgQVNTRVJUKCFj
YWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGlj
Q2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICBjYWxsTGlua0luZm8uc2V0
TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOwotCi0gICAgaWYgKHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQotICAgICAgICBkYXRhTG9nKCJMaW5raW5n
IGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8u
Y29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBl
bnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwotCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9j
aykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1l
LCAmY2FsbExpbmtJbmZvKTsKLQotICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25L
aW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSkgewotICAg
ICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxs
VGh1bmtHZW5lcmF0b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGxpbmtT
bG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCi12b2lkIGxpbmtEaXJlY3RDYWxsKAotICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJs
b2NrKiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKLSAg
ICAKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7Ci0KLSAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgQVNT
RVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZvLnNldENvZGVC
bG9jayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjYWxs
ZWVDb2RlQmxvY2spKTsKLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNv
ZGVCbG9jaykpCi0gICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9y
aWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIs
IHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0
ciwgIlxuIik7Ci0KLSAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9j
YXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7Ci0KLSAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZy
YW1lLCAmY2FsbExpbmtJbmZvKTsKLX0KLQotdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0gICAgQ29kZUJsb2NrKiBj
YWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwot
ICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBsaW5rU2xvd0Zv
cih2bSwgY2FsbExpbmtJbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0s
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCi17Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVj
dCgpKSB7Ci0gICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOwotICAgICAgICBp
ZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQotICAgICAgICAgICAgY2FsbExp
bmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgbGlua1Ns
b3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7Ci0KLSAgICAgICAgICAgIGlmIChj
YWxsTGlua0luZm8uc3R1YigpKQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZlcnRD
YWxsVG9TdHViKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVl
KCk7IC8vIFRoaXMgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBjYWNoZSBib3RoIGZvciBkYXRhIGFu
ZCBjb2RlLWJhc2VkIGNhY2hlcy4KLSAgICB9Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU2Vlbigp
OwotICAgIGNhbGxMaW5rSW5mby5jbGVhclN0dWIoKTsKLSAgICBjYWxsTGlua0luZm8uY2xlYXJT
bG93U3R1YigpOwotICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKLSAgICAgICAgY2Fs
bExpbmtJbmZvLnJlbW92ZSgpOwotfQotCi12b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxM
aW5rSW5mbykpOwotICAgIAotICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0
clRhZz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIENhbGxG
cmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgQ29kZUJs
b2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICBk
YXRhTG9nTG5JZihzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSwKLSAg
ICAgICAgIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNv
ZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwotCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1
bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZv
LCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklU
U3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci0gICAgY2FsbExpbmtJbmZv
LnNldENsZWFyZWRCeVZpcnR1YWwoKTsKLX0KLQotbmFtZXNwYWNlIHsKLXN0cnVjdCBDYWxsVG9D
b2RlUHRyIHsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLX07Ci19IC8vIGFubm9ueW1vdXMgbmFt
ZXNwYWNlCi0KLXZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IENhbGxWYXJpYW50IG5ld1ZhcmlhbnQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvLmFsbG93U3R1YnMoKSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQot
ICAgIC8vIER1cmluZyBleGVjdXRpb24gb2YgbGlua1BvbHltb3JwaGljQ2FsbCwgd2Ugc3Ryb25n
bHkgYXNzdW1lIHRoYXQgd2UgbmV2ZXIgZG8gR0MuCi0gICAgLy8gR0MgamV0dGlzb25zIENvZGVC
bG9ja3MsIGNoYW5nZXMgQ2FsbExpbmtJbmZvIGV0Yy4gYW5kIGJyZWFrcyBhc3N1bXB0aW9uIGRv
bmUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGNhbGwuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDRm9yQVdoaWxlKHZtKTsKLSAgICAKLSAgICBpZiAoIW5ld1ZhcmlhbnQpIHsKLSAgICAgICAg
bGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3Ig
YSBjYWxsZWUuIFdoZW4gY2FsbGluZwotICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUg
dGhlIGNhbGxlZSBpcyBhIGNlbGwuCi0gICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5p
c0NlbGwoKSk7Ci0KLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1l
LT5jb2RlQmxvY2soKTsKLSAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5TW9k
dWxlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSk7Ci0KLSAgICAvLyBXZWJBc3NlbWJs
eSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgotICAgIEpTQ2VsbCog
b3duZXIgPSBpc1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2Fs
bGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFTU0VSVChvd25lcik7Ci0K
LSAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsKLSAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1YigpKQotICAgICAgICBsaXN0ID0gc3R1Yi0+
dmFyaWFudHMoKTsKLSAgICBlbHNlIGlmIChKU09iamVjdCogb2xkQ2FsbGVlID0gY2FsbExpbmtJ
bmZvLmNhbGxlZSgpKQotICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZhcmlh
bnQob2xkQ2FsbGVlKSB9OwotICAgIAotICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50
KGxpc3QsIG5ld1ZhcmlhbnQpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNh
bGxzIHRoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBj
YWxscy4KLSAgICAvLyBUaGlzIG1ha2VzIHN3aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQg
YWxzbyBwcm9kdWNlcyBwcm9maWxpbmcgdGhhdCdzIGVhc2llciBvbiB0aGUgREZHOwotICAgIC8v
IHRoZSBERkcgZG9lc24ndCByZWFsbHkgd2FudCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBv
ZiBjbG9zdXJlIGFuZCBub24tY2xvc3VyZSBjYWxsZWVzLgotICAgIGJvb2wgaXNDbG9zdXJlQ2Fs
bCA9IGZhbHNlOwotICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpICB7Ci0gICAg
ICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgewotICAgICAgICAgICAgbGlzdCA9IGRl
c3BlY2lmaWVkVmFyaWFudExpc3QobGlzdCk7Ci0gICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0g
dHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlm
IChpc0Nsb3N1cmVDYWxsKQotICAgICAgICBjYWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1cmUo
KTsKLSAgICAKLSAgICBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOwotICAg
IFZlY3RvcjxpbnQ2NF90PiBjYXNlVmFsdWVzOwotICAgIAotICAgIC8vIEZpZ3VyZSBvdXQgd2hh
dCBvdXIgY2FzZXMgYXJlLgotICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpIHsK
LSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwotICAgICAgICBpZiAodmFy
aWFudC5leGVjdXRhYmxlKCkgJiYgIXZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlv
bigpKSB7Ci0gICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHZhcmlhbnQu
ZXhlY3V0YWJsZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7Ci0gICAgICAgICAgICAv
LyBJZiB3ZSBjYW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBo
YXZlIGEgQ29kZUJsb2NrIG9yIGJlY2F1c2UgYXJpdHkgbWlzbWF0Y2gsCi0gICAgICAgICAgICAv
LyBhc3N1bWUgdGhhdCBpdCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhIHZp
cnR1YWwgY2FsbC4KLSAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5pc1ZhcmFyZ3MoKSkgewotICAgICAg
ICAgICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaW50NjRfdCBuZXdDYXNlVmFsdWUgPSAwOwotICAgICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkg
ewotICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJp
YW50LmV4ZWN1dGFibGUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEg
ZmFzdCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgotICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTMxMQot
ICAgICAgICAgICAgaWYgKCFuZXdDYXNlVmFsdWUpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb24gPSB2YXJp
YW50LmZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9j
YXN0PGludHB0cl90PihmdW5jdGlvbik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmludGVybmFs
RnVuY3Rpb24oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsK
LSAgICAgICAgICAgIGlmIChjYXNlVmFsdWVzLmNvbnRhaW5zKG5ld0Nhc2VWYWx1ZSkpIHsKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJFUlJPUjogQXR0ZW1wdCB0byBhZGQgZHVwbGljYXRlIGNh
c2UgdmFsdWUuXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeGlzdGluZyBjYXNlIHZh
bHVlczogIik7Ci0gICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAgICAg
ICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiBjYXNlVmFsdWVzKQotICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKGNvbW1hLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsK
LSAgICAgICAgICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFkZDogIiwgbmV3Q2FzZVZh
bHVlLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJWYXJpYW50IGxpc3Q6ICIsIGxp
c3REdW1wKGNhbGxDYXNlcyksICJcbiIpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjYWxs
Q2FzZXMuYXBwZW5kKFBvbHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7Ci0g
ICAgICAgIGNhc2VWYWx1ZXMuYXBwZW5kKG5ld0Nhc2VWYWx1ZSk7Ci0gICAgfQotICAgIEFTU0VS
VChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhc2VWYWx1ZXMuc2l6ZSgpKTsKLQotICAgIC8vIElmIHdl
IGFyZSBvdmVyIHRoZSBsaW1pdCwganVzdCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgotICAg
IHVuc2lnbmVkIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZTsKLSAgICBpZiAoaXNX
ZWJBc3NlbWJseSkKLSAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0g
T3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9yV2ViQXNzZW1ibHlU
b0pTKCk7Ci0gICAgZWxzZSBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29k
ZTo6dG9wVGllckpJVCgpKQotICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNp
emUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVy
KCk7Ci0gICAgZWxzZQotICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUg
PSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsKLQotICAgIC8v
IFdlIHVzZSBsaXN0LnNpemUoKSBpbnN0ZWFkIG9mIGNhbGxDYXNlcy5zaXplKCkgYmVjYXVzZSB3
ZSByZXNwZWN0IENhbGxWYXJpYW50IHNpemUgZm9yIG5vdy4KLSAgICBpZiAobGlzdC5zaXplKCkg
PiBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpIHsKLSAgICAgICAgbGlua1ZpcnR1
YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFZlY3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgpKTsK
LSAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4gZmFzdENvdW50czsKLQotICAgIGlmICghaXNXZWJB
c3NlbWJseSAmJiBjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVy
SklUKCkpIHsKLSAgICAgICAgZmFzdENvdW50cyA9IG1ha2VVbmlxdWVBcnJheTx1aW50MzJfdD4o
Y2FsbENhc2VzLnNpemUoKSk7Ci0gICAgICAgIG1lbXNldChmYXN0Q291bnRzLmdldCgpLCAwLCBj
YWxsQ2FzZXMuc2l6ZSgpICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0gICAgfQotICAgIAotICAgIEdQ
UlJlZyBjYWxsZWVHUFIgPSBjYWxsTGlua0luZm8uY2FsbGVlR1BSKCk7Ci0KLSAgICBib29sIGlz
RGF0YUlDID0gY2FsbExpbmtJbmZvLmlzRGF0YUlDKCk7Ci0gICAgQ0NhbGxIZWxwZXJzIHN0dWJK
aXQoY2FsbGVyQ29kZUJsb2NrKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVm
Zmxlcj4gZnJhbWVTaHVmZmxlcjsKLSAgICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURh
dGEoKSkgewotICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7Ci0gICAg
ICAgIGZyYW1lU2h1ZmZsZXIgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0
LCAqY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2Fs
bGVlIGlzIGEgY2VsbCwgYW5kIHdlIGNhbgotICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwg
cmVnaXN0ZXIgdGhpcyBidXlzIHVzLgotICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxs
ZWVJc0NlbGwoKTsKLSNlbmRpZgotICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxl
ZUdQUik7Ci0gICAgfQotCi0gICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKLSAgICBpZiAo
aXNDbG9zdXJlQ2FsbCkgewotICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKLSAgICAgICAgICAg
IGNvbXBhcmlzb25WYWx1ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gQXNzZW1ibHlIZWxwZXJz
OjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXBh
cmlzb25WYWx1ZUdQUiA9IGNhbGxlZUdQUjsKLQotICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQ
UjsKLSAgICBpZiAoZnJhbWVTaHVmZmxlcikKLSAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPSBm
cmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZhc3RDb3Vu
dHNCYXNlR1BSID0KLSAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOwotICAgIH0K
LSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3VudHMu
Z2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7Ci0KLSAgICBpZiAoIWZyYW1lU2h1ZmZsZXIgJiYg
Y2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAgICAvLyBXZSBzdHJvbmdseSBhc3N1
bWUgdGhhdCBjYWxsZWVHUFIgaXMgbm90IGEgY2FsbGVlIHNhdmUgcmVnaXN0ZXIgaW4gdGhlIHNs
b3cgcGF0aC4KLSAgICAgICAgQVNTRVJUKCFjYWxsZXJDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdp
c3RlcnMoKS0+ZmluZChjYWxsZWVHUFIpKTsKLSAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7Ci0gICAgfQotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKLSAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBo
YXZlIGEgZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2hHUFIuCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkp
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2Fs
bGVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUikpOwot
I2Vsc2UKLSAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUg
Y2FsbGVlIGlzIGEgY2VsbC4KLSNlbmRpZgotICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRk
IGEgZmFzdCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgotICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQ
UikpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2Fs
bGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBjb21w
YXJpc29uVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBzdHViSml0LmJy
YW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBjb21wYXJpc29uVmFsdWVHUFIsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7Ci0gICAgICAg
IHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29tcGFyaXNvblZhbHVlR1BS
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJh
cmVEYXRhVGFnKSwgY29tcGFyaXNvblZhbHVlR1BSKTsKLSAgICAgICAgaGFzRXhlY3V0YWJsZS5s
aW5rKCZzdHViSml0KTsKLSAgICB9Ci0KLSAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNv
bXBhcmlzb25WYWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOwotICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFk
dmFuY2Uoc3R1YkppdCkpIHsKLSAgICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRj
aC5jYXNlSW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBj
YWxsQ2FzZXNbY2FzZUluZGV4XS52YXJpYW50KCk7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICAgICAgaWYgKHZhcmlh
bnQuZXhlY3V0YWJsZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxl
KCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb2Rl
UHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktp
bmQoKSwgdmFyaWFudC5mdW5jdGlvbigpKTsKLSAgICAgICAgICAgIGlmICghY29kZVB0cikKLSAg
ICAgICAgICAgICAgICBjb2RlUHRyID0gdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJ
VENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1bmN0
aW9uKCkpOwotICAgICAgICAgICAgY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25U
cmFtcG9saW5lRm9yKENvZGVGb3JDYWxsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGZhc3RDb3VudHMpIHsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkMzIoCi0gICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCi0gICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2Yo
dWludDMyX3QpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG5lZWRzRG9uZUp1bXAgPSBm
YWxzZTsKLSAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKLSAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKHN0dWJKaXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwotICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5u
ZWFyVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2Fs
bCgpKSB7Ci0gICAgICAgICAgICBzdHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAg
ICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNEYXRhSUMpCi0gICAgICAgICAg
ICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9
IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICAgICAgICAgICAgICBuZWVkc0RvbmVKdW1wID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNv
ZGVQdHIgPSBjb2RlUHRyOwotICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkKLSAgICAgICAgICAg
IGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICB9Ci0gICAgCi0gICAgc2xvd1BhdGgu
bGluaygmc3R1YkppdCk7Ci0gICAgYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkubGluaygmc3R1
YkppdCk7Ci0KLSAgICBpZiAoZnJhbWVTaHVmZmxlcikgewotICAgICAgICBmcmFtZVNodWZmbGVy
LT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VH
UFIoY29tcGFyaXNvblZhbHVlR1BSKTsKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQ
UihmYXN0Q291bnRzQmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgZnJh
bWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVn
VDEsIEdQUkluZm86OnJlZ1QwKSk7Ci0jZWxzZQotICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRD
YWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwotI2VuZGlmCi0g
ICAgICAgIGZyYW1lU2h1ZmZsZXItPnByZXBhcmVGb3JTbG93UGF0aCgpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSNpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSNlbmRpZgotICAg
IH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgaWYgKGlz
RGF0YUlDICYmICFjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgIC8vIFdlIHdl
cmUgY2FsbGVkIGZyb20gdGhlIGZhc3QgcGF0aCwgZ2V0IHJpZCBvZiBhbnkgcmVtbmFudHMgb2Yg
dGhhdAotICAgICAgICAvLyB3aGljaCBtYXkgZXhpc3QuIFRoaXMgcmVhbGx5IG9ubHkgbWF0dGVy
cyBmb3IgeDg2LCB3aGljaCBhZGp1c3RzCi0gICAgICAgIC8vIFNQIGZvciBjYWxscy4KLSAgICAg
ICAgc3R1YkppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVnVDQp
OwotICAgIH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBH
UFJJbmZvOjpyZWdUNCk7Ci0gICAgCi0gICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNs
b3cgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpIHsKLSAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZv
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChjYWxs
Q2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7Ci0gICAgZm9yIChDYWxsVG9Db2RlUHRyIGNh
bGxUb0NvZGVQdHIgOiBjYWxscykgewotI2lmIENQVShBUk1fVEhVTUIyKQotICAgICAgICAvLyBU
YWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcgZW5zdXJlcyBwcm9wZXIgbGlua2luZyBvbiBBUk0gVGh1
bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBqdW1wcyB0byBhbiBhZGRyZXNzCi0gICAgICAgIC8vIHdp
dGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9ybWFsIGNhbGwgY2FsbHMgYW4g
YWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCi0gICAgICAgIGJvb2wgaXNUYWls
Q2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0NhbGxIZWxwZXJzOjpDYWxsOjpU
YWlsKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWlsQ2FsbCA/IGNhbGxUb0NvZGVQdHIu
Y29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwg
RnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOwotI2Vsc2UKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpT
RW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgaWYgKCFkb25lLmVtcHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2Fs
bExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgCi0gICAgYXV0byBzdHViUm91
dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCi0gICAgICAg
IEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1
ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiUG9seW1vcnBoaWMgY2Fs
bCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKLSAgICAgICAgICAg
ICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29k
ZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRk
cmVzcygpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5k
YXRhKCkpLAotICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2Fs
bExpbmtJbmZvLCBjYWxsQ2FzZXMsCi0gICAgICAgIFdURk1vdmUoZmFzdENvdW50cykpKTsKLQot
ICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywg
YnV0IHN0aWxsCi0gICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBj
YWxsZWUgd2lsbCBhbHdheXMKLSAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKLSAgICBsaW5r
U2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLQotICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIGEg
cHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBH
QyBydW5zIGFuZCBzZWVzCi0gICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4KLSAg
ICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5lKSk7Ci0gICAgCi0gICAg
Ly8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMgYSBjYWxsIGNhY2hlIGFwYXJ0IGZy
b20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwKLSAgICAvLyBzdHViLgotICAgIGlm
IChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgp
OwotfQotCi12b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0
aW9uKGtpbmQpKTsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJ
ZDoKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAgIGNhc2UgR2V0QnlLaW5k
OjpUcnlCeUlkOgotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgIGNhc2UgR2V0
QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHVi
QXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6
Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCi17Ci0gICAgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBj
YXNlIFB1dEJ5S2luZDo6QnlJZDogewotICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNs
dHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKLSAgICAgICAgRnVu
Y3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9u
VHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKLSAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
ZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNl
dFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKLSAg
ICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVC
bG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQotICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXpl
OwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmlj
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9w
dGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZh
bERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0
aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
U2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIHN3aXRjaCAoa2luZCkgewot
ICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQpCi17
Ci0gICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7
Ci0gICAgZWxzZQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVz
ZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJ
bmZvKTsKLX0KLQotdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKLXsKLSAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5j
dGlvbihraW5kKSk7Ci0gICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCi0gICAgICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
Ci0gICAgZWxzZQotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVz
ZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOwotICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5k
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0g
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVj
a1ByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0K
LXZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgSlNPYmplY3QqIGNhbGxlZSkKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYg
KCFjYWxsZWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChraW5kICE9IENvZGVG
b3JDYWxsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoYXV0byogd2FzbUZ1bmN0
aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNhbGxlZSkpCi0g
ICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGNhbGxlZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0OGNm
NjhkNzljN2RlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgL2Rldi9udWxsCkBAIC0x
LDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKLSNpbmNsdWRlICJQ
dXRLaW5kLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1lbnVtIGNsYXNzIEdldEJ5S2luZCB7Ci0g
ICAgQnlJZCwKLSAgICBCeVZhbCwKLSAgICBUcnlCeUlkLAotICAgIEJ5SWRXaXRoVGhpcywKLSAg
ICBCeUlkRGlyZWN0LAotICAgIFByaXZhdGVOYW1lLAotICAgIFByaXZhdGVOYW1lQnlJZCwKLX07
Ci0KLWVudW0gY2xhc3MgUHV0QnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotfTsKLQot
ZW51bSBjbGFzcyBEZWxCeUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlWYWwKLX07Ci0KLWVudW0g
Y2xhc3MgSW5CeUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlWYWwsCi0gICAgUHJpdmF0ZU5hbWUK
LX07Ci0KLXZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12
b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENh
Y2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwotdm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmpl
Y3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVy
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwg
UHV0S2luZCk7Ci12b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlk
ZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7Ci12b2lk
IHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKLXZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlcGF0Y2hDaGVj
a1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaFNldFBy
aXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3RydWN0
dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVw
YXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIHZhbHVl
LCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsK
LXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYs
IENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPik7Ci12b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Ci12
b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwotdm9pZCB1bmxpbmtD
YWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7Ci12b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7Ci12b2lk
IHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwot
dm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5k
KTsKLXZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5
S2luZCk7Ci12b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIElu
QnlLaW5kKTsKLXZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKLXZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJik7Ci12b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9j
ayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCwgSlNPYmplY3QqIGNhbGxlZSk7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCmluZGV4IDI5NzE0N2UxYzRjMDhkY2NkNWY3Yjc4NjQxMWQ4NTViMmExZGU0N2MuLmRi
ZDVhYmQzNzg4ZDcxYjgwMzA1YmI4NTFmYmNjMjcxM2U4N2IwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTM0NCw0OCArMzQ0LDI1IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVu
a0ZvclJlZ3VsYXJDYWxsKFZNJiB2bSkKICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBD
YWxsTW9kZTo6UmVndWxhciwgQ29kZUZvckNhbGwpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0
KFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6UmVn
dWxhciwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDYWxsKFZNJiB2bSkKIHsKICAg
ICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNhbGwp
OwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0
dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbFRo
dW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLXN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvckNv
bnN0cnVjdENhbGwoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENh
bGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDYWxsKTsKLX0KLQogc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29uc3Ry
dWN0KFZNJiB2bSkKIHsKICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6
Q29uc3RydWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiB2bSwgQ2FsbE1vZGUgY2FsbE1vZGUpCiB7Ci0gICAg
YXV0byBtb2RlID0gY2FsbExpbmtJbmZvLmNhbGxNb2RlKCk7Ci0gICAgYXV0byBraW5kID0gY2Fs
bExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpOwogICAgIGF1dG8gZ2VuZXJhdG9yID0gWyZd
ICgpIC0+IFRodW5rR2VuZXJhdG9yIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAg
IHN3aXRjaCAoY2FsbE1vZGUpIHsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoKLSAg
ICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKLSAgICAgICAgICAgIHJldHVybiB2aXJ0dWFs
VGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0OworICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVu
a0ZvclJlZ3VsYXJDYWxsOwogICAgICAgICBjYXNlIENhbGxNb2RlOjpUYWlsOgotICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1
YWxUaHVua0ZvclRhaWxDYWxsOwotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclRh
aWxDb25zdHJ1Y3Q7CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENhbGw7
CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OkNvbnN0cnVjdDoKLSAgICAgICAgICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JD
b25zdHJ1Y3RDYWxsOwogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0cnVj
dENvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKaW5kZXgg
MGY5ZjZlMmQzNmY2ZGQyM2UxODcyNmFjZTYzMTRhMzBhMjAxZGJjZS4uYWI3Y2Y2NmM0MjE1MWVl
MDE5NThjMWFiMjJmMjlmY2Q4ZGQ3MDE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCkBAIC00OSw3ICs0OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KFZNCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlu
a1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbExpbmtJ
bmZvJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVua0ZvcihWTSYsIENhbGxNb2RlKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCBlOGRhZmY3ZDg4YjMwYzZi
Zjg0NzIzMTRiZTJmMWM3OTYwZjI0N2Y1Li5kMGIzNzM4OTIxYTRmMDAxNTEyZTdkZWUzYTg0NDNj
NTE5M2JkMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcApA
QCAtNTgsNiArNTgsNyBAQCBleHRlcm4gIkMiIHZvaWQgd2FzbV9lbnRyeSh2b2lkKiwgdm9pZCos
IHZvaWQqKTsKIGV4dGVybiAiQyIgdm9pZCB2bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZSh2
b2lkKTsKIGV4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKHZvaWQpOwog
ZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJhbXBvbGluZSh2b2lkKTsK
K2V4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKHZv
aWQpOwogZXh0ZXJuICJDIiB2b2lkIGV4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lKHZvaWQpOwog
ZXh0ZXJuICJDIiB2b2lkIHJldHVybkZyb21MTEludFRyYW1wb2xpbmUodm9pZCk7CiAjZW5kaWYK
QEAgLTE1Myw3ICsxNTQsNyBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAg
ICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJU
YWcpKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShK
U0VudHJ5UHRyVGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGVSZWYu
Y29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+Ojpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9p
ZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxKU0Vu
dHJ5VHJhbXBvbGluZSkpKSk7CiAgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsSlNFbnRyeVB0clRhZyldPSBjb2RlUmVm
LmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAtMTYxLDExICsxNjIsMTkgQEAg
dm9pZCBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7
CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGNvZGVSZWYuY29u
c3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5U2xvd1BhdGhQdHJUYWcpKTsKKyAgICAg
ICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFn
LCB0cnVlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlv
blB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhU
cmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9IGNv
ZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQorICAgIHsKKyAg
ICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJ
VCgpKQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpT
RW50cnlQdHJUYWcsIGZhbHNlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGVSZWYu
Y29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+Ojpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9p
ZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxXaXRo
b3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZSkpKSk7CisgICAgICAgIGdfanNjQ29uZmlnLmxsaW50
LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsV2l0aG91dFVudGFn
SlNFbnRyeVB0clRhZyldPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAg
IGlmIChPcHRpb25zOjp1c2VKSVQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDBjNDg1MzRhODI5OWYzNjA2MmVkNGI0MTE4NjI3YzU3
ODQ2MzdhNzguLjY2YjhkZThmNWI5MmY2MzUzZDVlYzViMGQwY2RmOTE0YzAyYzJlMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtNjIs
NiArNjIsNyBAQAogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAjaW5j
bHVkZSAiUHJvdG9DYWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIKICNpbmNsdWRlICJTaGFkb3dDaGlja2VuLmgi
CiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCkBAIC01
ODIsNiArNTgzLDE3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHN0YWNrX2NoZWNrKQogICAgIExM
SU5UX1JFVFVSTl9UV08ocGMsIGNhbGxGcmFtZSk7CiB9CiAKK2V4dGVybiAiQyIgU2xvd1BhdGhS
ZXR1cm5UeXBlIGxsaW50X2xpbmtfY2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0NlbGwq
IGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbCopCit7Cisg
ICAgcmV0dXJuIGxpbmtGb3IoY2FsbGVlRnJhbWUsIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCksIGNhbGxMaW5rSW5mbyk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIGxsaW50X3ZpcnR1YWxfY2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0NlbGwq
IGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbCopCit7Cisg
ICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7CisgICAgcmV0dXJuIHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwg
Y2FsbGVlRnJhbWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsK
K30KKwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19vYmplY3QpCiB7CiAgICAg
TExJTlRfQkVHSU4oKTsKQEAgLTE4MTksNyArMTgzMSw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxs
ZWUsCiAgICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkp
OwogICAgICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5u
YXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVl
RnJhbWUpOwogICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICAgICAg
TExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgTExJbnQ6OmdldEhv
c3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
IEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFt
ZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgICAgIExMSU5U
X0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5
UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2xvd1BhdGhMb2coIkNhbGwg
Y2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIpOwpAQCAtMTgzOCw3ICsx
ODUxLDggQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJh
bWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgY2FsbGVlRnJhbWUtPnNl
dENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0
dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUp
LT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgIERpc2FsbG93R0MgZGlz
YWxsb3dHQzsKLSAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVG
cmFtZSwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICBhdXRvKiBjYWxsZXJT
UCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAg
ICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6Z2V0
SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgSlNFbnRyeVB0clRhZyk7CiAgICAgfQogICAgIAogICAgIHNsb3dQYXRoTG9nKCJDb25zdHJ1
Y3RvciBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwgIlxuIik7CkBAIC0xODQ3
LDcgKzE4NjEsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENh
bGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgIExMSU5UX0NBTExfVEhS
T1coZ2xvYmFsT2JqZWN0LCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3Qs
IGNhbGxlZSkpOwogfQogCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxs
RnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFsdWUg
Y2FsbGVlQXNWYWx1ZSwgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxwdHIp
CitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZy
YW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSkK
IHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgp
OwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKQEAgLTE4NjIsMTQgKzE4NzYsOSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVw
Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaQogICAgICAg
ICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5j
dGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9u
VHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotCi0g
ICAgICAgICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8p
IHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNh
bGxlckNvZGVCbG9jaywgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7Ci0gICAgICAgICAgICB9
Ci0KICAgICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xv
YmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0Vu
dHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBD
YWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgICAgICBMTElOVF9DQUxM
X1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwg
a2luZCkpOwogICAgIH0KQEAgLTE5MDQsNzQgKzE5MTMsOSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRp
b25LaQogICAgIH0KIAogICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgIAotICAgIGlmICghTExJ
TlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgY2Fs
bExpbmtJbmZvLT5saW5rKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0g
ICAgICAgIGlmIChjb2RlQmxvY2spCi0gICAgICAgICAgICBjb2RlQmxvY2stPmxpbmtJbmNvbWlu
Z0NhbGwoY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgIH0KLQogICAgIGFzc2VydElzVGFn
Z2VkV2l0aDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAg
IExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIE9wJiYgYnl0ZWNvZGUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4ID0gMCkKLXsKLSAgICAv
LyBUaGlzIG5lZWRzIHRvOgotICAgIC8vIC0gU2V0IHVwIGEgY2FsbCBmcmFtZS4KLSAgICAvLyAt
IEZpZ3VyZSBvdXQgd2hhdCB0byBjYWxsIGFuZCBjb21waWxlIGl0IGlmIG5lY2Vzc2FyeS4KLSAg
ICAvLyAtIElmIHBvc3NpYmxlLCBsaW5rIHRoZSBjYWxsJ3MgaW5saW5lIGNhY2hlLgotICAgIC8v
IC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3MgdG8gY2FsbCBhbmQgdGhl
IG5ldyBjYWxsIGZyYW1lLgotICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9w
ZXJhbmQoY2FsbEZyYW1lLCBjYWxsZWVGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCkpOwot
ICAgIAotICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsRnJhbWUgLSBzdGFja09mZnNl
dEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludEluZGV4KTsKLSAgICAKLSAg
ICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCkpOwotICAgIGNhbGxl
ZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSA9IGNhbGxlZUFzVmFsdWU7Ci0gICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxG
cmFtZSk7Ci0gICAgCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spOwotICAgIHJldHVybiBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFz
VmFsdWUsICZjYWxsTGlua0luZm9Gb3IobWV0YWRhdGEsIGNoZWNrcG9pbnRJbmRleCkpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJ
Tl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJh
bWUsIHBjLT5hczxPcENhbGw+KCksIENvZGVGb3JDYWxsKSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BD
KCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8
T3BUYWlsQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NvbnN0cnVjdCkKLXsKLSAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAg
ICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcENvbnN0
cnVjdD4oKSwgQ29kZUZvckNvbnN0cnVjdCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcEl0ZXJh
dG9yT3Blbj4oKSwgQ29kZUZvckNhbGwsIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsKSk7Ci19
Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwpCi17
Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ss
IGNhbGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JOZXh0PigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVy
YXRvck5leHQ6OmNvbXB1dGVOZXh0KSk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFt
ZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JF
VFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IEpTRW50cnlQdHJUYWcpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2l6
ZV9mcmFtZV9mb3JfdmFyYXJncykKQEAgLTIwNDMsOCArMTk4Nyw4IEBAIGVudW0gY2xhc3MgU2V0
QXJndW1lbnRzV2l0aCB7CiAgICAgQ3VycmVudEFyZ3VtZW50cwogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFNldEFyZ3VtZW50c1dpdGggc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgT3AsIFNl
dEFyZ3VtZW50c1dpdGggc2V0PgoraW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0
dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCkKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKIApAQCAtMjA1
MywxMSArMTk5NywxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgLy8gLSBSZXR1cm4g
YSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwg
ZnJhbWUuCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wPigpOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICBKU1ZhbHVlIGNhbGxl
ZUFzVmFsdWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpOwogCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IHZtLm5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwot
Ci0gICAgaWYgKHNldCA9PSBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpIHsKKyAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZtLnZhcmFyZ3NMZW5ndGggKyAxOworICAg
IGlmIGNvbnN0ZXhwciAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCkgewogICAgICAg
ICBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNh
bGxlZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBn
ZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9hcmd1bWVudHMpLCBieXRlY29kZS5tX2Zp
cnN0VmFyQXJnLCB2bS52YXJhcmdzTGVuZ3RoKTsKICAgICAgICAgTExJTlRfQ0FMTF9DSEVDS19F
WENFUFRJT04oZ2xvYmFsT2JqZWN0KTsKICAgICB9IGVsc2UKQEAgLTIwNjcsMjcgKzIwMTIsMzAg
QEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAg
ICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUp
KTsKKyAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby51cGRhdGVNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisKKyAgICBhdXRvKiBjYWxs
ZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwor
ICAgIExMSU5UX1JFVFVSTl9UV08ocGMsIGNhbGxlclNQKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVw
PE9wQ2FsbFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNX
aXRoOjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncywgU2V0
QXJndW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncykKIHsKLSAg
ICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBD
b2RlRm9yQ2FsbCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJn
c1NldHVwPE9wVGFpbENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxG
cmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1Nl
dHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2Fs
bCwgU2V0QXJndW1lbnRzV2l0aDo6Q3VycmVudEFyZ3VtZW50cyk7CisgICAgcmV0dXJuIHZhcmFy
Z3NTZXR1cDxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgU2V0QXJndW1lbnRzV2l0aDo6Q3Vy
cmVudEFyZ3VtZW50cz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MpCiB7Ci0gICAgcmV0dXJu
IHZhcmFyZ3NTZXR1cDxPcENvbnN0cnVjdFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JD
b25zdHJ1Y3QsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NT
ZXR1cDxPcENvbnN0cnVjdFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZy
YW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9u
KiBwYywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJldHVyblBvaW50KQpA
QCAtMjExMCw3ICsyMDU4LDggQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxs
RXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24KICAgICAKICAgICB2
bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmVuY29kZShldmFsKGdsb2Jh
bE9iamVjdCwgY2FsbGVlRnJhbWUsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxs
ZWVGcmFtZSwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgIGF1dG8qIGNhbGxlclNQ
ID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAg
TExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RD
YWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpT
RW50cnlQdHJUYWcpOwogfQogICAgIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Nh
bGxfZXZhbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgK
aW5kZXggZTIwYTBkZmM2Yjg3YWNkNjIyNjhlODhhYTZhYTk2NGZiNmUwOWI2Ni4uZDQzOGZjYjMz
OWRhZmUzN2EzYzE0MWRiZTI0YTZhZDIxMTI5YmI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKQEAgLTM4LDYgKzM4LDggQEAgbmFtZXNwYWNlIExM
SW50IHsKIAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhY2Vfb3BlcmFu
ZChDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIGludCBvcGVy
YW5kKSBSRUZFUkVOQ0VEX0ZST01fQVNNOwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
bGxpbnRfdHJhY2VfdmFsdWUoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJv
bVdoZXJlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgUkVGRVJFTkNFRF9GUk9NX0FTTTsKK2V4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X2xpbmtfY2FsbChDYWxsRnJhbWUqLCBK
U0NlbGwqLCBDYWxsTGlua0luZm8qLCBKU0NlbGwqKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIGxsaW50X3ZpcnR1YWxfY2FsbChDYWxsRnJhbWUqLCBKU0NlbGwqLCBDYWxsTGlua0lu
Zm8qLCBKU0NlbGwqKTsKIGV4dGVybiAiQyIgdm9pZCBsbGludF93cml0ZV9iYXJyaWVyX3Nsb3co
Q2FsbEZyYW1lKiwgSlNDZWxsKikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiAK
ICNkZWZpbmUgTExJTlRfU0xPV19QQVRIX0RFQ0wobmFtZSkgXApAQCAtMTE5LDkgKzEyMSw2IEBA
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdW5jX2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19h
c3luY19mdW5jKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2Fz
eW5jX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2V0
X2Z1bmN0aW9uX25hbWUpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9j
YWxsKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdGFpbF9jYWxsKTsK
LUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0KTsKIExMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncyk7
CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX2Zv
cndhcmRfYXJndW1lbnRzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Y2FsbF92YXJhcmdzKTsKQEAgLTEzMSw4ICsxMzAsNiBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUxNik7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2NhbGxfZXZhbF93aWRlMzIpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF90ZWFyX29mZl9hcmd1bWVudHMpOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFRodW5rcy5jcHAKaW5kZXggNDYyY2JmYmU0ZTM0NTY4NDVlMDVhYThiYzBjNDgxMTUz
Y2JiOGQwYS4uMTYwM2MyYzc4NTRjOTk5YmU5ZTZjNTcwNTMzNmNmZjc0MjcyOTBiMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCkBAIC0zNDYsOSArMzQ2
LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRl
SlNHYXRlVGh1bmsodm9pZCogcG9pbnRlciwgUHQKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0Owog
Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDMsIHRhZyk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgaml0
LmZhckp1bXAoR1BSSW5mbzo6cmVnVDMsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwo
R1BSSW5mbzo6cmVnVDUsIHRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpyZWdUNSk7CisgICAgaml0LmZhckp1bXAoR1BSSW5m
bzo6cmVnVDUsIE9wZXJhdGlvblB0clRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpMTEludFRodW5rKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnLCAiTExJbnQgJXMgY2FsbCBnYXRlIHRodW5rIiwgbmFtZSk7CkBAIC0zNjYsMTMgKzM2Niwx
NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVX
YXNtR2F0ZVRodW5rKHZvaWQqIHBvaW50ZXIsCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50ICVzIHdhc20gY2FsbCBnYXRl
IHRodW5rIiwgbmFtZSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcgdGFnKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyB0
YWcsIGJvb2wgdW50YWcpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGppdC51bnRh
Z1B0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0gICAgaml0
LnZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOwotICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QwLCB0YWcpOworICAgIGlmICh1
bnRhZykgeworICAgICAgICBqaXQudW50YWdQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBBUk02
NFJlZ2lzdGVyczo6bHIpOworICAgICAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJl
Z2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgfQorICAgIGppdC5mYXJK
dW1wKEdQUkluZm86OmFyZ3VtZW50R1BSNywgdGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkxMSW50VGh1
bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcsICJMTEludCB0YWlsIGNhbGwgZ2F0ZSB0aHVuayIpOwpAQCAtNTczLDggKzU3NSw4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXR1cm5Mb2NhdGlvblRo
dW5rKE9wY29kZUlEIG9wY29kZUlELCBPcGNvCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9w
X2l0ZXJhdG9yX29wZW4pCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2l0ZXJhdG9yX25l
eHQpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdCkKLSAgICBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Nsb3cpCi0gICAgTExJTlRfUkVUVVJOX0xP
Q0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3cpCisgICAgTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX2NhbGxfdmFyYXJncykKKyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3Ry
dWN0X3ZhcmFyZ3MpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV9pZCkKICAg
ICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X3ZhbCkKICAgICBMTElOVF9SRVRVUk5f
TE9DQVRJT04ob3BfcHV0X2J5X2lkKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50VGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuaAppbmRleCBiODdjNDIwY2JlNDAyYTFmMGNmMDg2ODEwN2I1YWZkNmRiY2Y1NGFjLi4w
NWVjNjAxYzAxNjRjYjk1NGI3M2EyMWM3MzUxZmYwMTBmZWE3MTBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaApAQCAtODgsNyArODgsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBqaXRDYWdlUHRyVGh1bmsoKTsKICNp
ZiBDUFUoQVJNNjRFKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4gY3JlYXRlSlNHYXRlVGh1bmsodm9pZCosIFB0clRhZywgY29uc3QgY2hhciopOwogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlV2FzbUdhdGVUaHVu
ayh2b2lkKiwgUHRyVGFnLCBjb25zdCBjaGFyKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQ
dHJUYWcsIGJvb2wpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4gbG9vcE9TUkVudHJ5R2F0ZVRodW5rKCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPiBlbnRyeU9TUkVudHJ5R2F0ZVRodW5rKCk7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiB3YXNtT1NSRW50cnlHYXRlVGh1bmsoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQppbmRleCBiYjg4YjZmZGIwOTliNDk5YWU2ZmY0ZTgxMDEwMTUwNGRhYTZkNGUzLi4zYTI1
MjMzMDdiNGNkMDBlOTI2MDFkZjYwMGQ3MzViYjRmODk2NzM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC01NTEsNiAr
NTUxLDcgQEAgY29uc3QgU3ltYm9sVHlwZSA9IGNvbnN0ZXhwciBTeW1ib2xUeXBlCiBjb25zdCBP
YmplY3RUeXBlID0gY29uc3RleHByIE9iamVjdFR5cGUKIGNvbnN0IEZpbmFsT2JqZWN0VHlwZSA9
IGNvbnN0ZXhwciBGaW5hbE9iamVjdFR5cGUKIGNvbnN0IEpTRnVuY3Rpb25UeXBlID0gY29uc3Rl
eHByIEpTRnVuY3Rpb25UeXBlCitjb25zdCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSA9IGNvbnN0ZXhw
ciBJbnRlcm5hbEZ1bmN0aW9uVHlwZQogY29uc3QgQXJyYXlUeXBlID0gY29uc3RleHByIEFycmF5
VHlwZQogY29uc3QgRGVyaXZlZEFycmF5VHlwZSA9IGNvbnN0ZXhwciBEZXJpdmVkQXJyYXlUeXBl
CiBjb25zdCBQcm94eU9iamVjdFR5cGUgPSBjb25zdGV4cHIgUHJveHlPYmplY3RUeXBlCkBAIC0x
MTUxLDI3ICsxMTUyLDI3IEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAgICAgICAgIGNsb29w
Q2FsbEpTRnVuY3Rpb24gY2FsbGVlCiAgICAgZWxzaWYgQVJNNjRFCiAgICAgICAgIG1hY3JvIGNh
bGxOYXJyb3coKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpv
ZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkg
KiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRh
ZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFt
ZSUpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBvbGluZV8lb3Bjb2RlTmFt
ZSU6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisgICAgICAgICAgICBjYWxsIHQ1
LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGNhbGxXaWRlMTYoKQot
ICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0Nv
bmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJV93aWRlMTYpICogUHRy
U2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBj
YWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9m
ZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dp
ZGUxNikgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0
ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9saW5lXyVvcGNvZGVO
YW1lJV93aWRlMTY6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisgICAgICAgICAg
ICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGNhbGxX
aWRlMzIoKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZz
ZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJV93aWRl
MzIpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcgIyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhw
ciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29k
ZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9saW5l
XyVvcGNvZGVOYW1lJV93aWRlMzI6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisg
ICAgICAgICAgICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCi0gICAgICAgIG1v
dmUgY2FsbGVlLCB0MworICAgICAgICBtb3ZlIGNhbGxlZSwgdDUKICAgICAgICAgc2l6ZShjYWxs
TmFycm93LCBjYWxsV2lkZTE2LCBjYWxsV2lkZTMyLCBtYWNybyAoZ2VuKSBnZW4oKSBlbmQpCiAg
ICAgZWxzZQogICAgICAgICBjYWxsIGNhbGxlZSwgY2FsbFB0clRhZwpAQCAtMTIwOSwxMiArMTIx
MCwyMyBAQCBtYWNybyBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaQogICAgIGVuZAogZW5kCiAKLW1hY3JvIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBj
YWxsUHRyVGFnKQotICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCittYWNybyBwcmVw
YXJlRm9yUmVndWxhckNhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCiBlbmQKIAotIyBz
cCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZQotbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxl
ZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCittYWNybyBpbnZva2VG
b3JSZWd1bGFyQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgbWF5YmVPbGRDRlIs
IGNhbGxQdHJUYWcpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgY2FsbGVlLCBjYWxsUHRyVGFnKQorZW5kCisKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHBy
ZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2Fs
bFB0clRhZykKK2VuZAorCittYWNybyBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKCkKK2VuZAor
CisjIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQ1NpemUKKyMg
V2UgbGVhdmUgY2ZyIHRlbXA0IHRvIHVzZSBpdCBmb3IgdW50YWdnaW5nLgorbWFjcm8gcHJlcGFy
ZUZvclRhaWxDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQogICAgIHJlc3RvcmVDYWxs
ZWVTYXZlc1VzZWRCeUxMSW50KCkKIAogICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpc1tjZnJdLCB0ZW1wMgpAQCAtMTIzMiwxOCArMTI0NCwxNyBAQCBt
YWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1w
NCwgY2FsbFB0clRhZykKICAgICBtb3ZlIGNmciwgdGVtcDEKICAgICBhZGRwIHRlbXAyLCB0ZW1w
MQogCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
W3NwXSwgdGVtcDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZVtzcF0sIHRlbXAyCiAgICAgIyBXZSBhc3N1
bWUgPCAyXjI4IGFyZ3VtZW50cwogICAgIG11bGkgU2xvdFNpemUsIHRlbXAyCiAgICAgYWRkaSBT
dGFja0FsaWdubWVudCAtIDEgKyBDYWxsRnJhbWVIZWFkZXJTaXplLCB0ZW1wMgogICAgIGFuZGkg
flN0YWNrQWxpZ25tZW50TWFzaywgdGVtcDIKIAogICAgIGlmIEFSTXY3IG9yIEFSTTY0IG9yIEFS
TTY0RSBvciBDX0xPT1Agb3IgQ19MT09QX1dJTiBvciBNSVBTIG9yIFJJU0NWNjQKLSAgICAgICAg
YWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKICAgICAgICAgc3ViaSBDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgQ2FsbGVyRnJhbWVBbmRQQzo6cmV0dXJuUENb
Y2ZyXSwgbHIKICAgICBlbHNlCi0gICAgICAgIGFkZHAgUHRyU2l6ZSwgc3AKKyAgICAgICAgc3Vi
cCBQdHJTaXplLCBzcAogICAgICAgICBzdWJpIFB0clNpemUsIHRlbXAyCiAgICAgICAgIGxvYWRw
IFB0clNpemVbY2ZyXSwgdGVtcDMKICAgICAgICAgc3RvcmVwIHRlbXAzLCBbc3BdCkBAIC0xMjcw
LDkgKzEyODEsMTIgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRl
bXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCiAgICAgZW5kCiAKICAgICBtb3ZlIHRlbXAx
LCBzcAorZW5kCisKK21hY3JvIGludm9rZUZvclRhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKICAgICBpZiBBUk02NEUKLSAgICAg
ICAgbW92ZSB0ZW1wNCwgYTIKLSAgICAgICAgbW92ZSBjYWxsZWUsIGEwCisgICAgICAgIG1vdmUg
bWF5YmVPbGRDRlIsIGEyCisgICAgICAgIG1vdmUgY2FsbGVlLCBhNwogICAgICAgICBsZWFwIEpT
Q0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25z
dGV4cHIgR2F0ZTo6dGFpbENhbGwlY2FsbFB0clRhZyUpICogUHRyU2l6ZSwgYTEKICAgICAgICAg
am1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjICVjYWxsUHRyVGFnJQogICAgIGVsc2UK
QEAgLTEyODAsNiArMTI5NCwyMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0
ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBlbmQKIGVuZAogCisj
IHQ1IGlzIG1ldGFkYXRhCittYWNybyBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbChvcGNv
ZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxS
ZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxQdHJUYWcpCisgICAgaWYgQVJNNjRFCisgICAgICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIGE3CisgICAgICAgIGxlYXAgSlNDQ29uZmln
ICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBH
YXRlOjp0YWlsQ2FsbFdpdGhvdXRVbnRhZyVjYWxsUHRyVGFnJSkgKiBQdHJTaXplLCBhMQorICAg
ICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJUYWclCisgICAg
ZWxzZQorICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCBhMQorICAgICAg
ICBqbXAgYTEsIGNhbGxQdHJUYWcKKyAgICBlbmQKK2VuZAorCittYWNybyBwcmVwYXJlRm9yU2xv
d1RhaWxDYWxsKCkKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCitlbmQKKwog
bWFjcm8gc2xvd1BhdGhGb3JDb21tb25DYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVj
dCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBzbG93UGF0aEZvckNhbGwo
b3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRj
aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogZW5kCkBAIC0xMjkxLDcgKzEzMjEsNyBAQCBtYWNy
byBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVBy
b2ZpbGVOYW1lLCBkc3RWaXJ0dQogICAgICAgICBtYWNybyAoY2FsbGVlLCBjYWxsZWVGcmFtZVB0
cikKICAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250VXBkYXRlU1AKICAgICAg
ICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCi0gICAgICAgICAgICBwcmVwYXJlQ2FsbChj
YWxsZWUsIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpCisgICAgICAgICAg
ICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKICAgICAgICAgLmRvbnRVcGRhdGVTUDoKICAg
ICAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNo
LCBjYWxsZWUsIEpTRW50cnlTbG93UGF0aFB0clRhZykKICAgICAgICAgZW5kKQpAQCAtMTgyMCwx
MiArMTg1MCwxNiBAQCBpZiBBUk02NEUKICAgICBnbG9iYWwgX3RhaWxDYWxsSlNFbnRyeVRyYW1w
b2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZToKICAgICAgICAgdW50YWdSZXR1
cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwgSlNFbnRyeVB0clRhZworICAgICAgICBqbXAg
YTcsIEpTRW50cnlQdHJUYWcKIAogICAgIGdsb2JhbCBfdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhU
cmFtcG9saW5lCiAgICAgX3RhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJhbXBvbGluZToKICAgICAg
ICAgdW50YWdSZXR1cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwgSlNFbnRyeVNsb3dQYXRo
UHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZworCisgICAgZ2xvYmFsIF90YWls
Q2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lCisgICAgX3RhaWxDYWxsV2l0aG91dFVu
dGFnSlNFbnRyeVRyYW1wb2xpbmU6CisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAg
ICAgZ2xvYmFsIF9leGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZQogICAgIF9leGNlcHRpb25IYW5k
bGVyVHJhbXBvbGluZToKQEAgLTIzMjUsMTcgKzIzNTksMTcgQEAgZW5kKQogCiAKICMgd2UgY2Fu
J3QgdXNlIGNhbGxPcCBiZWNhdXNlIHdlIGNhbid0IHBhc3MgYGNhbGxgIGFzIHRoZSBvcGNvZGUg
bmFtZSwgc2luY2UgaXQncyBhbiBpbnN0cnVjdGlvbiBuYW1lCi1jb21tb25DYWxsT3Aob3BfY2Fs
bCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
bWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY29tbW9uQ2FsbE9wKG9wX2NhbGwsIF9sbGludF9zbG93
X3BhdGhfY2FsbCwgT3BDYWxsLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3Vs
YXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dS
ZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogICAgIGFycmF5UHJvZmlsZUZvckNh
bGwoT3BDYWxsLCBnZXR1KQogZW5kKQogCiAKLW1hY3JvIGNhbGxPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKLSAgICBjb21tb25DYWxsT3Aob3BfJW9wY29kZU5h
bWUlLCBfbGxpbnRfc2xvd19wYXRoXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBwcmVwYXJl
Q2FsbCwgZm4pCittYWNybyBjYWxsT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBwcmVwYXJl
Q2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIGZu
KQorICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9w
Y29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJl
UG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCiBlbmQKIAogCi1jYWxsT3AodGFpbF9j
YWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0
YSkKK2NhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52
b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9y
U2xvd1RhaWxDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJyYXlQcm9maWxlRm9y
Q2FsbChPcFRhaWxDYWxsLCBnZXR1KQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgp
CiAgICAgIyByZWxvYWQgbWV0YWRhdGEgc2luY2UgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3Vl
KCkgbWlnaHQgaGF2ZSB0cmFzaGVkIHQ1CkBAIC0yMzQzLDcgKzIzNzcsNyBAQCBjYWxsT3AodGFp
bF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRh
ZGF0YSkKIGVuZCkKIAogCi1jYWxsT3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKK2NhbGxPcChjb25zdHJ1
Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJD
YWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1
bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAogbWFjcm8gYnJhbmNoSWZF
eGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQpAQCAtMjM1NCw3ICsyMzg4LDcgQEAgbWFjcm8gYnJh
bmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQogLm5vRXhjZXB0aW9uOiAgICAKIGVuZAog
Ci1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlz
cGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKK21hY3JvIGRvQ2Fs
bFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgZ2V0LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBmcmFtZVNsb3dQ
YXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhp
YywgcHJlcGFyZVNsb3dDYWxsKQogICAgIGNhbGxTbG93UGF0aChmcmFtZVNsb3dQYXRoKQogICAg
IGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5l
KQogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKQEAgLTIzNjksMzIgKzI0MDMsNzAgQEAgbWFjcm8g
ZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBm
cmFtZVNsb3dQYXRoLCBzbG8KICAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENT
aXplLCBzcAogICAgICAgICBlbmQKICAgICBlbmQKLSAgICBzbG93UGF0aEZvckNvbW1vbkNhbGwo
b3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBh
cmVDYWxsKQorICAgIGNhbGxDYWxsU2xvd1BhdGgoCisgICAgICAgIHNsb3dQYXRoLAorICAgICAg
ICAjIFRob3NlIGFyZSByMCBhbmQgcjEKKyAgICAgICAgbWFjcm8gKHJlc3RvcmVkUENPclRocm93
LCBjYWxsZWVGcmFtZVB0cikKKyAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250
VXBkYXRlU1AKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQorICAgICAgICAg
ICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDEp
CisgICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKKyAgICAg
ICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKKworICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDEK
KyAgICAgICAgICAgIGJ0cHogdDEsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhp
Y0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAgICAgICAgICMgcHJlcGFyZUNhbGwg
aW4gTExJbnQgZG9lcyBub3QgdW50YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50
YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGluZSBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgIyBCdXQg
d2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2Ug
aXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRodW5rIHNpZGUuCisgICAgICAg
ICAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRy
VGFnKQorICAgICAgICAgICAgam1wIC5nb1BvbHltb3JwaGljCisKKyAgICAgICAgLm5vdFBvbHlt
b3JwaGljOgorICAgICAgICAgICAgYnFuZXEgdDAsIHQxLCAub3BDYWxsU2xvdworICAgICAgICAg
ICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKyAgICAgICAgLmdvUG9seW1vcnBoaWM6
CisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAg
ICAgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJv
ZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0
clRhZykKKworICAgICAgICAub3BDYWxsU2xvdzoKKyAgICAgICAgICAgICMgdDAgaXMgY2FsbGVl
CisgICAgICAgICAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAgICAgICAgICMgdDMgaXMg
Y2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICAgICAgICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBpbiB0Mgor
ICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5m
by5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB0MworICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9i
amVjdFt0M10sIHQzCisgICAgICAgICAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgICAgICAgICAg
Y2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0Vu
dHJ5UHRyVGFnKQorICAgICAgICAuZG9udFVwZGF0ZVNQOgorICAgICAgICAgICAgam1wIF9sbGlu
dF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCisgICAgICAgIGVuZCkKIGVuZAogCiAK
LWxsaW50T3Aob3BfY2FsbF92YXJhcmdzLCBPcENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgT3BD
YWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFy
YXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2Fs
bCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfY2FsbF92YXJhcmdzLCBPcENhbGxWYXJhcmdzLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICBkb0NhbGxW
YXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcENhbGxWYXJhcmdzLCBtX3Byb2Zp
bGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFt
ZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1Jl
Z3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKQogZW5kKQogCi1sbGludE9wKG9w
X3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRh
aWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIFdlIGxpZSBhbmQg
cGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0IHNpbmNlIHdlIGNh
bid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29kZQotICAgIGRvQ2Fs
bFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIHNpemUsIE9wVGFpbENhbGxWYXJhcmdzLCBk
aXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRf
c2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzLCBwcmVwYXJlRm9yVGFpbENhbGwpCisgICAgZG9D
YWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcFRhaWxDYWxsVmFy
YXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19w
YXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3Zh
cmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQ
b2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxs
aW50T3Aob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRh
KG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVu
dHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGNo
ZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgIyBXZSBsaWUgYW5kIHBlcmZvcm0gdGhl
IHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmluZyBpdCBzaW5jZSB3ZSBjYW4ndAogICAgICMg
cHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBvcGNvZGUKLSAgICBkb0NhbGxWYXJhcmdzKG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgc2l6ZSwgT3BUYWlsQ2FsbEZvcndhcmRBcmd1
bWVudHMsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX2ZvcndhcmRf
YXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywg
cHJlcGFyZUZvclRhaWxDYWxsKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBtX3By
b2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9m
cmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwsIGludm9rZUZvclRhaWxDYWxsLCBw
cmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFyZUZvclNsb3dUYWlsQ2FsbCkKIGVu
ZCkKIAogCi1sbGludE9wKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENvbnN0cnVjdFZhcmFyZ3Ms
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3Ry
dWN0X3ZhcmFyZ3MsIHNpemUsIE9wQ29uc3RydWN0VmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9z
bG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1
Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25zdHJ1Y3RWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICBkb0NhbGxWYXJhcmdzKG9wX2NvbnN0
cnVjdF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ29uc3RydWN0VmFyYXJncywgbV9wcm9maWxlLCBt
X2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9y
X3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1Jl
Z3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKQogZW5kKQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAppbmRl
eCBjMDRmZmQ2YjBiYzNmMjZlMTkyZjA2ZjJiYmY3NGIwNjRkY2IyNzlhLi45ODc2ZWY2ZWY3NDJh
Y2VlZGFlMjY5YTJhYjQ1NGM1YjYyY2Q1MTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCkBAIC0xMjksNiArMTI5LDggQEAg
dXNpbmcgV2ViQ29uZmlnOjpnX2NvbmZpZzsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENh
bGxMaW5rSW5mbzsKKwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBDTG9vcFJlZ2lzdGVyIGlz
IHRoZSBzdG9yYWdlIGZvciBhbiBlbXVsYXRlZCBDUFUgcmVnaXN0ZXIuCiAvLyBJdCBkZWZpbmVz
IHRoZSBwb2xpY3kgb2YgaG93IGludHMgc21hbGxlciB0aGFuIGludHB0cl90IGFyZSBwYWNrZWQg
aW50byB0aGUKQEAgLTE2Niw2ICsxNjgsNyBAQCBjbGFzcyBDTG9vcFJlZ2lzdGVyIHsKICAgICBv
cGVyYXRvciBQcm90b0NhbGxGcmFtZSooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UHJvdG9DYWxs
RnJhbWUqPihtX3ZhbHVlKTsgfQogICAgIG9wZXJhdG9yIFJlZ2lzdGVyKigpIHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDxSZWdpc3Rlcio+KG1fdmFsdWUpOyB9CiAgICAgb3BlcmF0b3IgVk0qKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFZNKj4obV92YWx1ZSk7IH0KKyAgICBvcGVyYXRvciBDYWxsTGlu
a0luZm8qKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PENhbGxMaW5rSW5mbyo+KG1fdmFsdWUpOyB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8
c2l6ZW9mKFQpID09IHNpemVvZih1aW50cHRyX3QpPj4KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
b3BlcmF0b3I9KFQgdmFsdWUpIHsgbV92YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZh
bHVlKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCA5MDNlNWE0NWIxYjY2ODJmZDI4NzhiOTc5NDg1
MmFlZmQ2NzUxZDVlLi44NmUzZWVmN2E5ZDBkYjM5OWFhNzI5ZDIzOGFhZGYzYzUwNTQzZjk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQpAQCAtMTE4LDcgKzExOCw5IEBAIG1hY3JvIGNDYWxsMlZvaWQoZnVu
Y3Rpb24pCiBlbmQKIAogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQotICAgIGlmIEFSTXY3IG9yIE1J
UFMKKyAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgorICAgICAgICBjbG9vcENhbGxTbG93UGF0
aDQgZnVuY3Rpb24sIGEwLCBhMSwgYTIsIGEzCisgICAgZWxzaWYgQVJNdjcgb3IgTUlQUwogICAg
ICAgICBjYWxsIGZ1bmN0aW9uCiAgICAgZWxzaWYgWDg2IG9yIFg4Nl9XSU4KICAgICAgICAgcHVz
aCBhMwpAQCAtMjE1MSwxMiArMjE1MywxMiBAQCBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKG9w
Y29kZVN0cnVjdCwgZ2V0dSkKICAgICBiaW5lcSBUaGlzQXJndW1lbnRPZmZzZXQgKyBUYWdPZmZz
ZXRbY2ZyLCB0MywgOF0sIENlbGxUYWcsIC5kb25lCiAgICAgbG9hZGkgVGhpc0FyZ3VtZW50T2Zm
c2V0ICsgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XSwgdDAKICAgICBsb2FkaSBKU0NlbGw6Om1f
c3RydWN0dXJlSURbdDBdLCB0MAotICAgIHN0b3JlaSB0MCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURb
dDVdCisgICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9m
aWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKKyMgdDUgaG9sZHMg
bWV0YWRhdGEuCiBtYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGws
IHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBn
ZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKLSAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAg
Z2V0Q2FsbGVlKHQwKQogCiAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0sIHQyCkBA
IC0yMTg4LDcgKzIxOTAsNyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1Bh
dGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBlbmQsIG1l
dGFkYXRhKQogCiAgICAgICAgIG1hY3JvIGdldENhbGxlZShkc3QpCi0gICAgICAgICAgIGdldCht
X2NhbGxlZSwgdDApCisgICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAgICAgICBlbmQK
IAogICAgICAgICBtYWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTIxOTksNiArMjIwMSw3
IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0
LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0
cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogICAgICAgICAKKyAgICAgICAgIyB0NSBo
b2xkcyBtZXRhZGF0YQogICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBv
cGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRj
aCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3Vu
dCkKICAgICBlbmQpCiBlbmQKQEAgLTI4NjYsNiArMjg2OSw3IEBAIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfaXRlcmF0b3Jfb3BlbiwgT3BJdGVyYXRvck9wZW4sIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoCiAgICAgICAgIG1vdmUgMSwgZHN0CiAgICAgZW5kCiAKKyAgICBtZXRhZGF0YSh0NSwg
dDApCiAgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0
ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0
ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2lu
dCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdl
dEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0QnlJZFN0YXJ0OgpAQCAtMjkyNyw2
ICsyOTMxLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJh
dG9yTmV4dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNl
IG1fdmFsdWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQg
bGF0ZXIuCisgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jf
bmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0
LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNp
emUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1l
bnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAu
Z2V0RG9uZVN0YXJ0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBhOTEzMTRmY2U5ZWU0NGNhNmUwYmFjNzgyZDli
ZTJmNTljMGE4MzcwLi4zM2JiZGQyNjg3ZWQyOWZlMTIyNzJjMjcyYjBmYmUwYjA2Y2M5ZGE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQpAQCAtMTQzLDcgKzE0Myw5IEBAIGVuZAogIyBUaGlzIGJhcmVseSB3b3Jrcy4g
YXJnMyBhbmQgYXJnNCBzaG91bGQgcHJvYmFibHkgYmUgaW1tZWRpYXRlcy4KIG1hY3JvIGNDYWxs
NChmdW5jdGlvbikKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCh0NCwgMHhiYWQwYzAw
NCkKLSAgICBpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKKyAgICBpZiBD
X0xPT1Agb3IgQ19MT09QX1dJTgorICAgICAgICBjbG9vcENhbGxTbG93UGF0aDQgZnVuY3Rpb24s
IGEwLCBhMSwgYTIsIGEzCisgICAgZWxzaWYgWDg2XzY0IG9yIEFSTTY0IG9yIEFSTTY0RSBvciBS
SVNDVjY0CiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODZfNjRfV0lOCiAgICAg
ICAgICMgT24gV2luNjQsIHJjeCwgcmR4LCByOCwgYW5kIHI5IGFyZSB1c2VkIGZvciBwYXNzaW5n
IHRoZSBmaXJzdCBmb3VyIHBhcmFtZXRlcnMuCkBAIC0zMDksMTIgKzMxMSwxMiBAQCBtYWNybyBt
YWtlSmF2YVNjcmlwdENhbGwoZW50cnksIHByb3RvQ2FsbEZyYW1lLCB0ZW1wMSwgdGVtcDIpCiAg
ICAgaWYgQ19MT09QIG9yIENfTE9PUF9XSU4KICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBl
bnRyeQogICAgIGVsc2lmIEFSTTY0RQotICAgICAgICBtb3ZlIGVudHJ5LCB0MwotICAgICAgICBs
ZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCAr
IChjb25zdGV4cHIgR2F0ZTo6dm1FbnRyeVRvSmF2YVNjcmlwdCkgKiBQdHJTaXplLCBhMgotICAg
ICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZworICAg
ICAgICBtb3ZlIGVudHJ5LCB0NQorICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBK
U0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6dm1FbnRyeVRv
SmF2YVNjcmlwdCkgKiBQdHJTaXplLCBhNworICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwogICAgICAgICBnbG9iYWwgX3ZtRW50cnlUb0phdmFT
Y3JpcHRUcmFtcG9saW5lCiAgICAgICAgIF92bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZToK
LSAgICAgICAgY2FsbCB0MywgSlNFbnRyeVB0clRhZworICAgICAgICBjYWxsIHQ1LCBKU0VudHJ5
UHRyVGFnCiAgICAgZWxzZQogICAgICAgICBjYWxsIGVudHJ5LCBKU0VudHJ5UHRyVGFnCiAgICAg
ZW5kCkBAIC0yMzYwLDQxICsyMzYyLDU4IEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3Bj
b2RlU3RydWN0LCBnZXR1KQogICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldFtjZnIsIHQzLCA4
XSwgdDAKICAgICBidHFueiB0MCwgbm90Q2VsbE1hc2ssIC5kb25lCiAgICAgbG9hZGkgSlNDZWxs
OjptX3N0cnVjdHVyZUlEW3QwXSwgdDMKLSAgICBzdG9yZWkgdDMsICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVy
ZUlEW3Q1XQorICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FycmF5
UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCiAuZG9uZToKIGVuZAogCi1tYWNybyBj
YWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykKLSAgICBtZXRhZGF0YSh0NSwgdDApCi0gICAgZ2V0Q2FsbGVlKHQwKQorIyB0
NSBob2xkcyBtZXRhZGF0YS4KK21hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVw
YXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGws
IHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBn
ZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICBnZXRDYWxsZWUodDEpCiAKLSAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JM
YXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0W3Q1XSwgdDIKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQwLCB0MykKLSAgICBicW5lcSB0MywgdDIsIC5vcENhbGxTbG93CisgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCiAKKyAgICAjIEFsaWduZWQgdG8gSklU
Ojpjb21waWxlU2V0dXBGcmFtZQogICAgIGdldEFyZ3VtZW50U3RhcnQodDMpCiAgICAgbHNoaWZ0
aSAzLCB0MwogICAgIG5lZ3AgdDMKICAgICBhZGRwIGNmciwgdDMKLSAgICBzdG9yZXEgdDIsIENh
bGxlZVt0M10KICAgICBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh0MikKLSAgICBzdG9y
ZVBDKCkKICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9h
ZE9mZnNldFt0M10KKworICAgICMgU3RvcmUgbG9jYXRpb24gYml0cyBhbmQgfGNhbGxlZXwsIGFu
ZCBjb25maWd1cmUgc3AuCisgICAgc3RvcmVQQygpCisgICAgc3RvcmVxIHQwLCBDYWxsZWVbdDNd
CiAgICAgbW92ZSB0Mywgc3AKLSAgICBpZiBBUk02NEUKLSAgICAgICAgbG9hZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwg
dDAKLSAgICAgICAgcHJlcGFyZUNhbGwodDAsIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5UHRyVGFn
KQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
Lm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24o
b3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0
dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0MCwgSlNFbnRyeVB0clRhZykKLSAgICBlbHNlCi0gICAg
ICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8u
bV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5UHRyVGFnKQot
ICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0
LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVd
LCBKU0VudHJ5UHRyVGFnKQotICAgIGVuZAotLm9wQ2FsbFNsb3c6Ci0gICAgc2xvd1BhdGhGb3JD
YWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQotZW5kCisg
ICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKIAotbWFjcm8gY29tbW9uQ2FsbE9wKG9w
Y29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkK
KyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2Fs
bGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgIGJ0cHogdDEsIChjb25zdGV4cHIgQ2FsbExpbmtJ
bmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAjIHByZXBh
cmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVk
IHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAjIEJ1dCB3
ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBp
dCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICBwcmVw
YXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAg
IGptcCAuZ29Qb2x5bW9ycGhpYworCisubm90UG9seW1vcnBoaWM6CisgICAgYnFuZXEgdDAsIHQx
LCAub3BDYWxsU2xvdworICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisuZ29Qb2x5
bW9ycGhpYzoKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGlu
dm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCisK
Ky5vcENhbGxTbG93OgorICAgICMgdDAgaXMgY2FsbGVlCisgICAgIyB0MiBpcyBDYWxsTGlua0lu
Zm8qCisgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgIGFkZHAgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZv
KiBpbiB0MgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIHQzCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisg
ICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUl
X3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCitlbmQKKworbWFjcm8gY29tbW9u
Q2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBp
bnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgcHJvbG9ndWUp
CiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0
YSh0NSwgdDApCiAKQEAgLTI0MDMsNyArMjQyMiw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNv
ZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAg
ICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkKLSAg
ICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAgICBnZXQobV9jYWxsZWUsIGRz
dCkKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3QpCkBA
IC0yNDE0LDcgKzI0MzMsOCBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1Bh
dGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICAgICAgZ2V0
dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgZHN0KQogICAgICAgICBlbmQKIAotICAgICAg
ICBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmls
ZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxl
ZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKKyAgICAgICAgIyB0NSBob2xk
cyBtZXRhZGF0YQorICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNv
ZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVw
YXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCiAgICAgZW5k
KQogZW5kCiAKQEAgLTI1MzMsNiArMjU1Myw4OCBAQCBvcChsbGludF90aHJvd19kdXJpbmdfY2Fs
bF90cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3Bh
dGhfdHJhbXBvbGluZQogZW5kKQogCisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0lu
Zm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CittYWNybyBsaW5rU2xvd1BhdGhG
b3IoZnVuY3Rpb24pCisgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCisgICAgbG9hZHAgSlNHbG9iYWxP
YmplY3Q6Om1fdm1bdDNdLCB0MQorICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDFd
CisgICAgbW92ZSB0MiwgYTIKKyAgICBtb3ZlIHQzLCBhMQorICAgIG1vdmUgY2ZyLCBhMAorICAg
IGNDYWxsNChmdW5jdGlvbikKKyAgICBmdW5jdGlvbkVwaWxvZ3VlKCkKKyAgICB1bnRhZ1JldHVy
bkFkZHJlc3Mgc3AKKyAgICBidHB6IHIxLCAuZG9Ob3RUcmFzaAorICAgIHByZXNlcnZlUmV0dXJu
QWRkcmVzc0FmdGVyQ2FsbCh0MSkKKyAgICBwcmVwYXJlRm9yVGFpbENhbGwodDEsIHQyLCB0Mywg
dDQpCisgICAgdW50YWdSZXR1cm5BZGRyZXNzIHQ0CisuZG9Ob3RUcmFzaDoKKyAgICAjIEZJWE1F
OiBVc2UgaW52b2tlRm9yVGFpbENhbGw/CisgICAgam1wIHQwLCBKU0VudHJ5UHRyVGFnCitlbmQK
KworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIn
cyBKU0dsb2JhbE9iamVjdAorbWFjcm8gdmlydHVhbFRodW5rRm9yKG9mZnNldE9mSklUQ29kZVdp
dGhBcml0eUNoZWNrLCBpbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZSwgcHJlcGFyZUNhbGwsIHNs
b3dDYXNlKQorICAgIGFkZGkgMSwgQ2FsbExpbmtJbmZvOjptX3Nsb3dQYXRoQ291bnRbdDJdCisg
ICAgbW92ZSBOb3RDZWxsTWFzaywgdDEKKyAgICBidHFueiB0MCwgdDEsIHNsb3dDYXNlCisgICAg
YmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBKU0Z1bmN0aW9uVHlwZSwgLm5vdEpTRnVuY3Rpb24K
KyAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVPclJhcmVEYXRhW3QwXSwgdDEKKyAg
ICBidHB6IHQxLCAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgLmlzRXhlY3V0
YWJsZQorICAgIGxvYWRwIChGdW5jdGlvblJhcmVEYXRhOjptX2V4ZWN1dGFibGUgLSAoY29uc3Rl
eHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSlbdDFdLCB0MQorLmlzRXhlY3V0YWJsZToKKyAg
ICBsb2FkcCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja1t0MV0sIHQxCisgICAgYnRweiB0
MSwgc2xvd0Nhc2UKKy5jYWxsQ29kZToKKyAgICBwcmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkK
KyAgICBqbXAgdDEsIEpTRW50cnlQdHJUYWcKKy5ub3RKU0Z1bmN0aW9uOgorICAgIGJibmVxIEpT
Q2VsbDo6bV90eXBlW3QwXSwgSW50ZXJuYWxGdW5jdGlvblR5cGUsIHNsb3dDYXNlCisgICAgcHJl
cGFyZUNhbGwodDUsIHQyLCB0MywgdDQpCisgICAgam1wIGludGVybmFsRnVuY3Rpb25UcmFtcG9s
aW5lCitlbmQKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBp
cyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUs
IG1hY3JvICgpCisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF9saW5rX2NhbGwpCitlbmQpCisK
KyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3Mg
SlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAo
KQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrLCBfbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBt
YWNybyAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dD
YXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQorCisj
IHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpT
R2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNy
byAoKQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ29u
c3RydWN0V2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3Rf
dHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KSBlbmQsIC5zbG93
Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2Fs
bCkKK2VuZCkKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBp
cyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJh
bXBvbGluZSwgbWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9uX2Nh
bGxfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQorICAgICAg
ICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodGVtcDEpCisgICAgICAgIHByZXBhcmVG
b3JUYWlsQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKKyAgICAgICAgdW50YWdSZXR1
cm5BZGRyZXNzIHRlbXA0CisgICAgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlu
a1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCiAKIG1hY3JvIG5hdGl2ZUNh
bGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKQogICAgIGZ1bmN0aW9uUHJv
bG9ndWUoKQpAQCAtMzA0Niw4ICszMTQ4LDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVy
YXRvcl9vcGVuLCBPcEl0ZXJhdG9yT3BlbiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAg
ICAgICAgbW92ZSAxLCBkc3QKICAgICBlbmQKIAotCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRv
cl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9w
ZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQor
ICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9s
bGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVy
YXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9y
UmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9y
U2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1
ZGluZ1RoaXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9yZU5leHRBbmRE
aXNwYXRjaCh2YWx1ZSkKQEAgLTMxMDQsNyArMzIwNiw4IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfaXRlcmF0b3JfbmV4dCwgT3BJdGVyYXRvck5leHQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoCiAgICAgZW5kCiAKICAgICAjIFVzZSBtX3ZhbHVlIHNsb3QgYXMgYSB0bXAgc2luY2Ugd2Ug
YXJlIGdvaW5nIHRvIHdyaXRlIHRvIGl0IGxhdGVyLgotICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0
b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JO
ZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQor
ICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX25leHQsIF9s
bGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9yTmV4dCwgbV9uZXh0
UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JS
ZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JT
bG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdl
dENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVk
aW5nVGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0OgogICAgIG1hY3JvIHN0b3JlRG9uZUFuZEpt
cFRvR2V0VmFsdWUoZG9uZVZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20vY2xvb3AucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9j
bG9vcC5yYgppbmRleCBjYWQyMTVhZTM0M2NjODZiM2ExMGE1ZmFmNjYyODQyNGE5YzAyZjI4Li5j
NzAxNjY0YWIyYmZmZjIwN2QxMmU1ZTIyMmY5NjRjZmE5MTJhMmZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgpAQCAtNTcyLDYgKzU3MiwxNCBAQCBkZWYgY2xv
b3BFbWl0Q2FsbFNsb3dQYXRoVm9pZChvcGVyYW5kcykKICAgICAkYXNtLnB1dGMgIiN7b3BlcmFu
ZHNbMF0uY0xhYmVsfSgje29wZXJhbmRzWzFdLmNsRHVtcH0sICN7b3BlcmFuZHNbMl0uY2xEdW1w
fSk7IgogZW5kCiAKK2RlZiBjbG9vcEVtaXRDYWxsU2xvd1BhdGg0KG9wZXJhbmRzKQorICAgICRh
c20ucHV0YyAieyIKKyAgICAkYXNtLnB1dGMgIiAgICBjbG9vcFN0YWNrLnNldEN1cnJlbnRTdGFj
a1BvaW50ZXIoc3AudnAoKSk7IgorICAgICRhc20ucHV0YyAiICAgIFNsb3dQYXRoUmV0dXJuVHlw
ZSByZXN1bHQgPSAje29wZXJhbmRzWzBdLmNMYWJlbH0oI3tvcGVyYW5kc1sxXS5jbER1bXB9LCAj
e29wZXJhbmRzWzJdLmNsRHVtcH0sICN7b3BlcmFuZHNbM10uY2xEdW1wfSwgI3tvcGVyYW5kc1s0
XS5jbER1bXB9KTsiCisgICAgJGFzbS5wdXRjICIgICAgZGVjb2RlUmVzdWx0KHJlc3VsdCwgdDAs
IHQxKTsiCisgICAgJGFzbS5wdXRjICJ9IgorZW5kCisKIGNsYXNzIEluc3RydWN0aW9uCiAgICAg
ZGVmIGxvd2VyQ19MT09QCiAgICAgICAgIGNhc2Ugb3Bjb2RlCkBAIC0xMTc1LDYgKzExODMsOSBA
QCBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgd2hlbiAiY2xvb3BDYWxsU2xvd1BhdGhWb2lkIgog
ICAgICAgICAgICAgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9pZChvcGVyYW5kcykKIAorICAgICAg
ICB3aGVuICJjbG9vcENhbGxTbG93UGF0aDQiCisgICAgICAgICAgICBjbG9vcEVtaXRDYWxsU2xv
d1BhdGg0KG9wZXJhbmRzKQorCiAgICAgICAgICMgRm9yIGRlYnVnZ2luZyBvbmx5LiBUaGlzIGlz
IHVzZWQgdG8gaW5zZXJ0IGluc3RydW1lbnRhdGlvbiBpbnRvIHRoZQogICAgICAgICAjIGdlbmVy
YXRlZCBMTEludEFzc2VtYmx5LmggZHVyaW5nIGxsaW50IGRldmVsb3BtZW50IG9ubHkuIERvIG5v
dCB1c2UKICAgICAgICAgIyBmb3IgcHJvZHVjdGlvbiBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCmluZGV4IDljYmE1ZDY4ZjNjYWQz
MWNmYTJkOTZlYTRjOWJiYThkZmU5ZGE5YjIuLmMwMGI1MTZiMzNlYzVhZDEyOWQ1NmMzZmZkMjNl
OWY1ZWMyMDVmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNt
L2luc3RydWN0aW9ucy5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9p
bnN0cnVjdGlvbnMucmIKQEAgLTQ1OSw2ICs0NTksNyBAQAogICAgICAiY2xvb3BDYWxsTmF0aXZl
IiwgICAgICAgICAjIG9wZXJhbmRzOiBjYWxsZWUKICAgICAgImNsb29wQ2FsbFNsb3dQYXRoIiwg
ICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgY3VycmVudEZyYW1lLCBjdXJyZW50UEMKICAg
ICAgImNsb29wQ2FsbFNsb3dQYXRoVm9pZCIsICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgY3Vy
cmVudEZyYW1lLCBjdXJyZW50UEMKKyAgICAgImNsb29wQ2FsbFNsb3dQYXRoNCIsICAgICAgIyBv
cGVyYW5kczogY2FsbFRhcmdldCwgYTAsIGExLCBhMiwgYTMKIAogICAgICAjIEZvciBkZWJ1Z2dp
bmcgb25seToKICAgICAgIyBUYWtlcyBubyBvcGVyYW5kcyBidXQgc2ltcGx5IGVtaXRzIHdoYXRl
dmVyIGZvbGxvd3MgaW4gLy8gY29tbWVudHMgYXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCmluZGV4IDk1ODEwNWQzMjY2ZGRmZjg1YmU1ZDc2ZDg3
Y2RlNWNiMzMxMzE0YzMuLjQ4ZmQ5MmY4YjZhOGVkMjk0NGE3MjQ4YjE1N2QyYWY3Mjc3M2M1YjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaApA
QCAtNTcsNiArNTcsNyBAQCBpbmxpbmUgYm9vbCBpc0NhbGwoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQogCiBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZy
aWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
ICAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZEZ1
bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IDVhYTU0MmEx
MmYyNzFkYmRmZjAyMGI5MTBlZGJjYzlhMTFjODM2NTYuLjJlOWI1MDY2MDVjZmM2ZjFjNWVkZDIy
ZGFkOTczZTczZWFhOGY2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaCIKKyNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIlNvdXJj
ZUNvZGUuaCIKICNpbmNsdWRlIDx3dGYvQm94Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HYXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
YXRlLmgKaW5kZXggZjZhMDViMDY1ZTMyZDhhZWNkNTY3YmY2YWI3NGFhZTYzODk5Nzc3OC4uZTQ3
NzkyYjg3NjRlOTFkNTA2MTBlNGNkZGFlMzIzMWMxNDU5ZTIwNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dhdGUuaApAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2
KGppdENhZ2VQdHIsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50cnlQdHJUYWcsIE5v
UHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFB0clRhZywgTm9QdHJUYWcp
IFwKKyAgICB2KHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwK
ICAgICB2KGxvb3BPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KGVudHJ5T1NSRW50cnksIE5v
UHRyVGFnKSBcCiAgICAgdih3YXNtT1NSRW50cnksIE5vUHRyVGFnKSBcCkBAIC00NiwyMCArNDcs
MjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgSlNDX0pTX0dBVEVfT1BDT0RFUyh2KSBc
CiAgICAgdihvcF9jYWxsLCBKU0VudHJ5UHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGwsIEpT
RW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NvbnN0cnVjdCwgSlNFbnRyeVB0clRhZykgXAogICAg
IHYob3BfaXRlcmF0b3JfbmV4dCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfaXRlcmF0b3Jf
b3BlbiwgSlNFbnRyeVB0clRhZykgXAotICAgIHYob3BfY2FsbF9zbG93LCBKU0VudHJ5U2xvd1Bh
dGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJU
YWcpIFwKLSAgICB2KG9wX2NvbnN0cnVjdF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwK
LSAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAg
ICB2KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAot
ICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3csIEpTRW50cnlTbG93UGF0
aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVNsb3dQ
YXRoUHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3ZhcmFyZ3MsIEpTRW50cnlQdHJUYWcpIFwKKyAg
ICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzLCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jYWxs
X3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5
UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3Rfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAg
IHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVy
YXRvcl9vcGVuX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfdmFyYXJnc19z
bG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93LCBK
U0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xv
dywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywgSlNF
bnRyeVB0clRhZykgXAogICAgIHYob3BfY2FsbF9ldmFsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0
clRhZykgXAotICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJU
YWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFn
KSBcCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCA5Y2Y1ZmVhMDE5ODQ5ZGI2ZTY2MDkxMGJiOTQ1MWNkMjdjMjVmYmM1Li5l
YzQ4MjJmNWE5MDNkNGZiODVjYjQ4NDFhNGNkNjhmMGMxMGJmYmYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xMzgsNiArMTM4LDcgQEAKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERh
dGEuaCIKKyNpbmNsdWRlICJMTEludEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJNaW5pbXVtUmVz
ZXJ2ZWRab25lU2l6ZS5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNp
bmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpAQCAtOTEwLDYgKzkxMSw0MSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVu
Y3Rpb25UcmFtcG9saW5lRm9yKENvZAogICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7
CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJTGlu
a0NhbGwoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQor
ICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0
ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlmCisgICAgcmV0dXJuIExMSW50Ojpn
ZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lKTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElUaHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9w
dGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJU
YWc+KCk7CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6OmNhbGxUb1Rocm93KCp0aGlzKS50ZW1w
bGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IFZNOjpnZXRDVElWaXJ0dWFsQ2FsbChDYWxsTW9kZSBj
YWxsTW9kZSkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkK
KyAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvcigqdGhpcywgY2FsbE1vZGUpOworI2VuZGlm
CisgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAgIGNhc2UgQ2FsbE1vZGU6OlJlZ3VsYXI6Cisg
ICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxp
bnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworICAgIGNhc2UgQ2FsbE1vZGU6OlRhaWw6Cisg
ICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxp
bnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZSk7CisgICAgY2FzZSBDYWxsTW9kZTo6Q29u
c3RydWN0OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUpOworICAgIH0KKyAgICBy
ZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1
YWxfY2FsbF90cmFtcG9saW5lKTsKK30KKwogVk06OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkK
IHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDFkNzNkMTA1YzlhODZjNmFh
YzQwNWM5MjI0ODAxMjhlMDVlOTBhZjAuLmNjZjAxY2ZhMDZhMWY3OWU3NGM3MGQ0MTI5OTA3NmE4
NWUwYzk4MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTA2LDYgKzEwNiw4
IEBAIGNsYXNzIEJhc2ljQmxvY2tMb2NhdGlvbjsKIGNsYXNzIEJ1aWx0aW5FeGVjdXRhYmxlczsK
IGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxsRnJhbWU7CitjbGFz
cyBDYWxsTGlua0luZm87CitlbnVtIGNsYXNzIENhbGxNb2RlOwogc3RydWN0IENoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwpAQCAt
OTAyLDYgKzkwNCw5IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZN
PiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgTmF0aXZlRXhlY3V0YWJs
ZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3Qp
OwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVy
bmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2FsbCgpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElUaHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGgoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IGdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlKTsKIAogICAgIHN0YXRpYyBw
dHJkaWZmX3QgZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGNkYmMyODA5YjVlNGYxODExMjE4MjBk
Yjc1MWRmMTlkNjFiNGRlZWQuLjE5MmUzZmNhOTY4YWY0NjFkM2YxNDdjOWZiOTE0NDFlZDFkZDQ5
YWMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9pcy1j
YWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanM6CisgICAgICAgICog
c3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzOgorICAgICAgICAo
cGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudm0uaXNXYXNtU3VwcG9ydGVkKToKKyAg
ICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qczoKKyAgICAgICAgKHBsYXRm
b3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnZtLmlzV2FzbVN1cHBvcnRlZCk6CisgICAgICAg
ICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanM6CisgICAgICAg
IChkb2VzVHJlZUhhdmVTdGFja1RyYWNlKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAq
IHdhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanM6CisKIDIwMjEtMTEtMTAgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaW5fYnlfdmFsIHNob3VsZCBu
b3QgY29uc3RhbnQgZm9sZCB0byBpbl9ieV9pZCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBhIHByb3Bl
cnR5IGluZGV4CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwt
bmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJs
ZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMKaW5kZXggNTBjYWVlZDExNDg0
MjlmZDFiNWNlMGIwZmVhZTZiZGRkZTY3MTBiOC4uOTRkYWI0NmQyZDcxODRmMzVkNDNlMmRiNGEy
ZGQ1NjQxOThiZWZmNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4t
ZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2lz
LWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcwpAQCAtMSw0ICsx
LDQgQEAKLS8vQCBydW5EZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIC0tdXNlQ29uY3Vy
cmVudEpJVD1mYWxzZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZv
ckpJVFNvb249MTAiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVz
aG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVB
ZnRlckxvbmdXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICIt
LXRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZv
ckZUTE9wdGltaXplU29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJ
VD10cnVlIikKKy8vQCBydW5EZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIiwgIi0tdXNl
Q29uY3VycmVudEpJVD1mYWxzZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVz
aG9sZEZvckpJVFNvb249MTAiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICIt
LXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEw
MCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVz
aG9sZEZvckZUTE9wdGltaXplU29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVz
ZUZUTEpJVD10cnVlIikKIAogZnVuY3Rpb24gbWFpbigpIHsKICAgICBsZXQgdjE2MjsKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9u
LmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24u
anMKaW5kZXggNjg5YTAwNWFiNTU1YTFmYzYwMWE1NGU0ZWJmOTRlOTlhNjY4Zjc3ZS4uNWMyMjBm
ZDc2Y2RjNWM0MGU1OWNjNjZlNTczNDJjNzJkOGM3ZjNhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9z
dHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKKysrIGIvSlNUZXN0
cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKQEAgLTY5LDUg
KzY5LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVy
biBpbnN0YW5jZS5leHBvcnRzLl9wYXJyb3QoMSk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21F
bnRyeSwgWyJfc2lsbHkiLCAiKHVua25vd24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIs
ICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIs
ICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XSIsICJ3YXNtLXN0dWIiLCAiMjQiLCAid2FzbUVu
dHJ5Il0pOworICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAi
PD8+Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAi
PD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwg
Iih1bmtub3duKSIsICJ3YXNtRW50cnkiXSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJv
ZmlsZXItd2FzbS5qcwppbmRleCBjZDIxZjI4OGMxNDhhNGI3NDA1YmY4NjhkZWY5YjU0NTczNDA1
MDQ1Li4wNmRmMDEyNDk1OTY5ZTI4NDIxODc3ODY5MDEzNWJmMDkwMTBlYzZkIDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCisrKyBiL0pTVGVzdHMv
c3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMKQEAgLTgsNSArOCw1IEBACiAgICAgdmFy
IHdhc21FbnRyeSA9IGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0
cy5sb29wKDEwMDAwMDAwKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53
YXNtLWZ1bmN0aW9uWzBdIiwgIndhc20tc3R1YiIsICIwIiwgIndhc21FbnRyeSJdKTsKKyAgICBy
dW5UZXN0KHdhc21FbnRyeSwgWyI8Pz4ud2FzbS1mdW5jdGlvblswXSIsICIodW5rbm93bikiLCAi
d2FzbUVudHJ5Il0pOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJv
ZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2Zp
bGVyL3NhbXBsaW5nUHJvZmlsZXIuanMKaW5kZXggOTY0MmRkYzdjMWU2ZjA2ZTNiMTMyNzljMGU0
YTAyNWI1NGRjYWJmMS4uMWI5MmU5NDg1NGFmNjNmNjdkMDhmNTQ4ODdjNTIxNzkxNGVlMmJmNSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9m
aWxlci5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1By
b2ZpbGVyLmpzCkBAIC03MCwxMSArNzAsMTMgQEAgZnVuY3Rpb24gY2hlY2sobm9kZSkgewogICAg
IAogICAgIGxldCBub2RlID0gdHJlZTsKICAgICBmb3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5n
dGg7IGktLTsgKSB7CisgICAgICAgIGxldCBwcmV2ID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5v
ZGUuY2hpbGRyZW5bc3RhY2tUcmFjZVtpXV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAg
ICAgICAgaWYgKFZFUkJPU0UpIHsKICAgICAgICAgICAgICAgICBwcmludCgiZmFpbGluZyBvbiAi
ICsgaSArICIgOiAiICsgc3RhY2tUcmFjZVtpXSk7CiAgICAgICAgICAgICAgICAgcHJpbnQoSlNP
Ti5zdHJpbmdpZnkodHJlZSkpOworICAgICAgICAgICAgICAgIHByaW50KE9iamVjdC5rZXlzKHBy
ZXYuY2hpbGRyZW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQpAQCAtMTA4LDcgKzExMCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3Rh
Y2tUcmFjZU9yU3RyaW5nKSB7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0g
c3RhcnRUaW1lIDwgdGltZVRvRmFpbCk7CiAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkocm9vdCwg
dW5kZWZpbmVkLCAyKSk7Ci0gICAgZG9lc1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1Ry
YWNlLCB0cnVlLCB0cnVlKTsKKyAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNr
VHJhY2VPclN0cmluZywgdHJ1ZSwgdHJ1ZSk7CiAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc3Rh
Y2sgdHJhY2UiKTsKIH0KIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3Rz
L25hbWVTZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9u
LmpzCmluZGV4IDY4MDVlNjg5ZjVjODc5ZTJjYTUwOWM4OGQzZTdiMzc2ZGUwOWZhYWEuLjMzYzg2
YmYxY2RlOWE4ZGFiMTE4ZTBlNGNiMGJhY2Q1OWI3NDkxZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKQEAgLTY5LDQgKzY5LDQgQEAKIGFzc2VydC5lcShz
dGFja3RyYWNlWzNdLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXUBbd2FzbSBjb2RlXSIpOwog
YXNzZXJ0LmVxKHN0YWNrdHJhY2VbNF0sICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV1AW3dhc20g
Y29kZV0iKTsKIGFzc2VydC5lcShzdGFja3RyYWNlWzVdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3Bh
cnJvdF1AW3dhc20gY29kZV0iKTsKLWFzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHVi
QFt3YXNtIGNvZGVdIik7IC8vIHdhc20gZW50cnkKK2Fzc2VydC5lcShzdGFja3RyYWNlWzZdLCAi
d2FzbS1zdHViQFtuYXRpdmUgY29kZV0iKTsgLy8gd2FzbSBlbnRyeQo=
</data>
<flag name="commit-queue"
          id="468906"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444014</attachid>
            <date>2021-11-11 15:44:24 -0800</date>
            <delta_ts>2021-11-11 15:47:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111154423.patch</filename>
            <type>text/plain</type>
            <size>398461</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MjBmNmFkNjgyNzQ5ZmJhODUzOTc4ZDdlYmRiNTMzYjZhZmFjYjljLi5lZTQ1ZmUyMzBiNTY5MzQ1
ZTVjY2IyZWYxOGI2NmUwMjc1OWI0YzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTUgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oOgor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwOgor
ICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oOgorICAgICAgICAoSlNDOjpjYWxsTGlua0luZm9Gb3IpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJT
dHViKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZSk6
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnZpc2l0V2Vhayk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9TdHViKToKKyAgICAgICAgKiBieXRl
Y29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjppc0xpbmtl
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c3R1YiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRTbG93U3R1Yik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJTbG93U3R1Yik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGlu
ZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
ZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludE9y
QmFzZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hM
TEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9SZXBhdGNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAuCisgICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAg
ICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU93bmVy
KToKKyAgICAgICAgKEpTQzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OnJl
dmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6anNU
b1dhc21JQ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAg
IChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2gu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oLgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpo
YW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjp2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJl
ZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFi
aWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8pOgorICAgICAgICAoSlND
OjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpK
SVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6
CisgICAgICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
dmlydHVhbEZvcldpdGhGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgIChK
U0M6OnZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF9saW5rX2NhbGwpOgorICAgICAg
ICAoSlNDOjpMTEludDo6bGxpbnRfdmlydHVhbF9jYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAg
ICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwp
OgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOiBEZWxldGVkLgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAgICAgICAoSlND
OjpMTEludDo6Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVy
bkxvY2F0aW9uVGh1bmspOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wUmVnaXN0ZXI6Om9wZXJhdG9y
IENhbGxMaW5rSW5mbyopOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAg
ICAgKiBvZmZsaW5lYXNtL2Nsb29wLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rp
b25zLnJiOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2F0ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJTGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisKIDIwMjEtMTEtMTEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIERpc2FibGUgSklUIHJ1bnMgb2YgdGhlIEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3Qgd2hlbiAhRU5BQkxFKEpJVCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggMTJjNGE1YzgyNzdjYTc3MDFkODQ5ZWZmNjQ2N2JkODg3OTU5MDAwOC4uY2M0MWZjMDNkMGEw
ODZjYzc3Y2U0ZTdkMDAyZGUxN2M4NjQzMjAxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtNjU5LDcgKzY1OSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmgKICAgICBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAogICAgIGJ5dGVj
b2RlL0p1bXBUYWJsZS5oCi0gICAgYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAogICAgIGJ5
dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCiAg
ICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAogICAgIGJ5dGVjb2RlL0xpbmtU
aW1lQ29uc3RhbnQuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4OWM5YzE3NGJi
MjIzYjM2YzM5NmJhZmM0NmZlMTE2NmE2ODIwZjQzLi4zMTViNGYwZjk2ZTQxNzM3ZjM3YjAxMTlm
NzBjNmI2OTk3MTQ4OGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ3LDcg
KzE0Nyw2IEBACiAJCTBGMENBRUZDMUVDNERBNkIwMDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBDQUVGQTFFQzREQTYyMDA5NzBEMTIgLyogSlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENBRUZGMUVD
NERBODgwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAv
KiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0
SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYwRkM0NUExNEJE
MTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJ
bnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjEwRjFBMzFDNDIwQkYwMDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEwRjFBMjFDNDIwQkYw
MDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggKi87IH07CiAJCTBGMTJERTEwMTk3OUQ1RkQwMDA2RkY0
RSAvKiBFeGNlcHRpb25GdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTM2RDRE
MTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODYs
NyArMTg1LDYgQEAKIAkJMEYyNEU1NDQxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNGMTdFQTlG
NTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3
IC8qIFRlbXBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjRF
NTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRj
aC5oICovOyB9OwogCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1
NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IH07CkBAIC0xODkyLDYgKzE4OTAs
NyBAQAogCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzM0Y1MDg2MUI4NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVj
dG9yLmx1dC5oICovOyB9OwogCQlFMzQwMEVDMTIyQTFDQzdCMDA5REVENTQgLyogRnVuY3Rpb25F
eGVjdXRhYmxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM0MDBFQzAyMkExQ0M3ODAwOURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlu
bGluZXMuaCAqLzsgfTsKIAkJRTM0OUE3ODEyNDkxRjE2MTAwMUJBMzM2IC8qIERGR0NvZGVPcmln
aW5Qb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzQ5QTc4MDI0OTFGMTVBMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzREMUFFNTI3M0RDOTFG
MDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEQxQUU0MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5s
aW5lcy5oICovOyB9OwogCQlFMzRFNjU3NTIwNjY4RUFBMDBGQjgxQUMgLyogUGFyc2VIYXNoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRFNjU3MzIw
NjY4RThEMDBGQjgxQUMgLyogUGFyc2VIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM0RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1l
VHJhY2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM0RURCRjYxREI1RkZDMTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNEY5MzBFMjMyMkQ4ODIwMDJC
OERCNCAvKiBKU0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTM0RjkzMEMyMzIyRDg4MTAwMkI4REI0IC8qIEpTR2VuZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MDYsNiAr
MTkwNSw3IEBACiAJCUUzNUEwQjlEMjIwQUQ4N0EwMEFDNDQ3NCAvKiBFeGVjdXRhYmxlQmFzZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NUEwQjlDMjIwQUQ4N0EwMEFDNDQ3NCAvKiBFeGVjdXRhYmxlQmFzZUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVDQTE1NDFEQkMz
QTVDMDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklU
SGVhcFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTM1Q0ExNTYxREJDM0E1RjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTAxREJD
M0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNUUzNjNFMjczREM4QzYwMERCMjRDQyAv
KiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICovOyB9OwogCQlFMzVFODlG
RDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTg5RkIyNUM1MEY4NjAwNzFFRTFFIC8qIEJp
Z0ludDY0QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMzVFODlGRTI1QzUwRjg3MDA3MUVFMUUgLyogQmlnVWludDY0QXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUU4OUZDMjVDNTBG
ODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5r
VGltZUNvbnN0YW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzkxLDcgKzIz
OTEsNiBAQAogCQkwRjBDQUVGRTFFQzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxi
YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBGaW5hbGl6ZXJDYWxs
YmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMDE1RjFBNjA0MDAz
MkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0
IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTBG
MUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQ3VzdG9tLmg7IHBhdGggPSBiMy9haXIvQWlyQ3VzdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNl
cHRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2Vw
dGlvbkZ1enouY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEyREUwRTE5NzlE
NUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFeGNlcHRpb25GdXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NDU0LDggKzI0NTMsNiBAQAogCQkwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NDYxN0VFMjc0OTAw
QUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0
ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRlbXBSZWdpc3RlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1MzE3
RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUNhbGxGcmFtZVNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxs
RnJhbWVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQ2FsbEZy
YW1lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjA3LDYgKzUyMDQsNyBA
QAogCQlFMzQwMEVDMDIyQTFDQzc4MDA5REVENTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNDlBNzdGMjQ5MUYxNTkwMDFCQTMzNiAvKiBERkdDb2Rl
T3JpZ2luUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb2RlT3JpZ2luUG9vbC5jcHA7
IHBhdGggPSBkZmcvREZHQ29kZU9yaWdpblBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzQ5QTc4MDI0OTFGMTVBMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ29kZU9yaWdpblBvb2wuaDsgcGF0aCA9IGRmZy9ERkdDb2RlT3Jp
Z2luUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzREMUFFNDI3M0RDOTFG
MDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVwYXRjaElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0
RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8qIFBhcnNlSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYXJzZUhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM0RTY1NzQyMDY2OEU4RTAwRkI4MUFDIC8qIFBhcnNlSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZUhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMzRFREJGNjFEQjVGRkMxMDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lVHJhY2Vycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTIyOSw2ICs1MjI3LDggQEAKIAkJRTM1Q0ExNTAxREJDM0E1
NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01KSVRBYnN0cmFjdEhlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTM1Q0ExNTExREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyog
RE9NSklUSGVhcFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJ
VEhlYXBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzVFMzYzQzI3M0RD
OEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNUUzNjNEMjczREM4
QzYwMERCMjRDQyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFODlG
QjI1QzUwRjg2MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCaWdJbnQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNUU4OUZDMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWdVaW50NjRBcnJheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25z
dGFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDU4LDggKzY0NTgsNiBAQAogCQkJ
CTYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oICovLAogCQkJCTBGQzMx
NDE0MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAx
ODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggKi8sCi0JCQkJMEYyNEU1NDkxN0VFMjc0
OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLAotCQkJCTBGMjRFNTRBMTdFRTI3NDkwMEFCQjIx
NyAvKiBSZXBhdGNoLmggKi8sCiAJCQkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3
IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCTBGRUU5ODQyMUE4OTIyNzUw
MDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgKi8sCkBAIC04ODE1LDcgKzg4MTMsNiBA
QAogCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oICovLAogCQkJCUUzNjM3RUU4MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50
LmNwcCAqLywKIAkJCQlFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFu
dC5oICovLAotCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5m
by5oICovLAogCQkJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAogCQkJCTUzRkEyQUUwMUNGMzdG
M0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCAqLywKIAkJCQkxNEY3OUY2RTIxNkVBRDUwMDAwNDZEMzkgLyogTWV0YWRhdGFUYWJsZS5j
cHAgKi8sCkBAIC04ODYyLDYgKzg4NTksOSBAQAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3
MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8sCiAJCQkJMEZGNjBBQkYxNjc0MEY4MTAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICovLAogCQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3
OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8sCisJCQkJRTM1RTM2M0QyNzNEQzhDNjAwREIyNEND
IC8qIFJlcGF0Y2guY3BwICovLAorCQkJCUUzNUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBh
dGNoLmggKi8sCisJCQkJRTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJbmxpbmVz
LmggKi8sCiAJCQkJODY1REEwQzkyNUI4OTYyQTAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0
YXR1cy5jcHAgKi8sCiAJCQkJODY1REEwQzcyNUI4OTYwQzAwODc1NzcyIC8qIFNldFByaXZhdGVC
cmFuZFN0YXR1cy5oICovLAogCQkJCTg2NURBMEM2MjVCODk1OUUwMDg3NTc3MiAvKiBTZXRQcml2
YXRlQnJhbmRWYXJpYW50LmNwcCAqLywKQEAgLTk3NDcsNiArOTc0Nyw3IEBACiAJCQkJRkVBMDg2
MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTlGQTdDNTI3M0M4QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUz
NDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBEZWZlcnJlZFdvcmtUaW1lci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDMyMyw4ICsxMDMyNCw2IEBACiAJCQkJQTM4RDI1MEUyNTgwMEQ0NDAwNDJCRkRE
IC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZ
YXJySklULmggaW4gSGVhZGVycyAqLywKLQkJCQk2NTNCQzQzRjI2RDAxM0E2MDBEOEJFMjAgLyog
WWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAw
OTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlERDdGNTIz
QzFCQkI1MDA5MDVGMTMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTEwNTI2LDcgKzEwNTI1LDYgQEAKIAkJCQlFMzYzN0VFOTIzNkU1NkIwMDA5NkJEMEEg
LyogTGlua1RpbWVDb25zdGFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVBNkIwRkI0NjBD
RjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwREU5QTA5
MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJbnRDb21tb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAvKiBMTEludERhdGEu
aCBpbiBIZWFkZXJzICovLApAQCAtMTA3MjYsNyArMTA3MjQsOCBAQAogCQkJCUE1QkExNUU4MTgy
MzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk5MkY1NkI3MUU0RTg0QjIwMDM1OTUzQiAvKiBSZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI0RTU1MTE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1RTM2M0UyNzNEQzhDNjAw
REIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCUUzNEQxQUU1MjczREM5MUYw
MDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RjNGQjky
NjEzQzc4OTAwNjlFODlGIC8qIFJlc291cmNlRXhoYXVzdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFM0I2NDJGMjVENkZCNEQwMDFBRERCNCAvKiBSb290TWFya1JlYXNvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMDc4NCw3ICsxMDc4Myw2IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAw
QjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEy
RUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlGRTlGQTdDNTI3M0M4QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RTE1
RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTEwNTIsNiArMTEwNTAsOCBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYw
MEVEQUY3MSAvKiBZYXJyRXJyb3JDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIy
MzQ3NDkxMDBCMUE5QUIgLyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzRjBGQzk1MjZBMTFCNEEwMDk5RkZBMCAvKiBZYXJyTWF0Y2hpbmdDb250
ZXh0SG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0Ig
LyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA3OTNmNDZmN2JjNThlNTA4Y2RhNmNiOTAxNWFhMDkyZThjOTg2MGQ5Li5iNjk1
NTU3YWZlNjBmMTQ3NTEwMDliMWI1MDVmNTUxMzM0MDViOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CkBAIC0yNzMsNiArMjczLDcgQEAgYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCiBi
eXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAog
Ynl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKK2J5dGVjb2RlL1JlcGF0Y2guY3BwCiBieXRl
Y29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRW
YXJpYW50LmNwcAogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCkBAIC02NzYsNyArNjc3LDYg
QEAgaml0L1JlZy5jcHAKIGppdC9SZWdpc3RlckF0T2Zmc2V0LmNwcAogaml0L1JlZ2lzdGVyQXRP
ZmZzZXRMaXN0LmNwcAogaml0L1JlZ2lzdGVyU2V0LmNwcAotaml0L1JlcGF0Y2guY3BwCiBqaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAog
aml0L1Nsb3dQYXRoQ2FsbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0NvZGVMb2NhdGlvbi5oCmluZGV4IGE2Y2E1YzgxYzUxMDk1ZjgxOThkOWI4MmRiMTRhNTgxYTI1
Y2U2MDkuLjA3NTA0YmEwNGU1OWI2ZDFkY2EyMzU4OGJlZmI1NGRmMTkxODVhMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaApAQCAtMjcsOCAr
MjcsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKLSNpZiBFTkFC
TEUoQVNTRU1CTEVSKQotCiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBjbGFzcyBOZWFyQ2FsbE1v
ZGUgOiB1aW50OF90IHsgUmVndWxhciwgVGFpbCB9OwpAQCAtMjY5LDUgKzI2NywzIEBAIGlubGlu
ZSBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21t
b248dGFnPjo6Y29udmVydGliCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwCmluZGV4IDA2MjQwZTg3NDM2Mzg3M2I5ZGYyY2M5ZjM3ZjM4MjkxOGZlN2Uy
OWUuLjk5Yzg3NTY4Y2JmZmU3MmExY2ViNjZjNGRiNmRhZWI4MTkyMGQxMWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcApAQCAtNDMsMjkgKzQz
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBzaXplX3QgTGlua0J1ZmZlcjo6c19wcm9maWxlQ3VtbXVs
YXRpdmVMaW5rZWRTaXplc1tMaW5rQnVmZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIHNpemVfdCBM
aW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZENvdW50c1tMaW5rQnVmZmVyOjpu
dW1iZXJPZlByb2ZpbGVzXTsKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3Nl
bWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCk7Ci19Ci0KLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNv
bXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5
KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNh
c3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAg
ICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKLSAgICAgICAgcmV0dXJuIE9w
dGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpPTUdNb2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JF
bnRyeU1vZGU6Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHkoKTsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiBMaW5rQnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZp
bmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKQogewogICAgIHBlcmZvcm1GaW5hbGl6
YXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgK
aW5kZXggNWEzZjAwZjA1YzY4NTgyOTU3NzI2NjdmYzIyMzU2N2Y2OGU5MmI4Ny4uMjg1ZGYwZDFh
MTgwOWRiMjBiNDc5NGNkMzEyMDU5ZWZjNmVlMDBlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKQEAgLTQzLDEyICs0Myw2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1lbnVtIGNsYXNzIENvbXBpbGF0aW9uTW9kZSA6
IHVpbnQ4X3Q7Ci19Ci0KLWNsYXNzIENvZGVCbG9jazsKLQogLy8gTGlua0J1ZmZlcjoKIC8vCiAv
LyBUaGlzIGNsYXNzIGFzc2lzdHMgaW4gbGlua2luZyBjb2RlIGdlbmVyYXRlZCBieSB0aGUgbWFj
cm8gYXNzZW1ibGVyLCBvbmNlIGNvZGUgZ2VuZXJhdGlvbgpAQCAtNDQ2LDggKzQ0MCw2IEBAIGNs
YXNzIExpbmtCdWZmZXIgewogICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6
ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFnPigpKQogI2VuZGlmCiAKLWJvb2wg
c2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwotCiAjZGVmaW5lIEZJTkFMSVpF
X0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCAu
Li4pICBcCiAgICAgRklOQUxJWkVfQ09ERV9JRigoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNv
ZGVCbG9jaykgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJlZmVy
ZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApAQCAtNDc2LDggKzQ2OCw2IEBAIGJv
b2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwogI2RlZmluZSBGSU5BTEla
RV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIGRhdGFMb2dG
QXJndW1lbnRzRm9ySGVhZGluZykgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKEpTQzo6T3B0aW9u
czo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkg
fHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCksIGxpbmtCdWZmZXJSZWZlcmVuY2Us
IHJlc3VsdFB0clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKQogCi1ib29sIHNob3Vs
ZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwotCiAjZGVmaW5lIEZJ
TkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIC4uLikg
IFwKICAgICBGSU5BTElaRV9DT0RFX0lGKChKU0M6Ok9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHko
KSB8fCBKU0M6Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBXYXNt
RGlzYXNzZW1ibHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgX19WQV9B
UkdTX18pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAppbmRleCA1ZDU2NzQxZWZlNjY0MjZlZmNhMjA1MmFj
MjUwOTgzMjIwMjM3N2QwLi5jZTQxMDNmMDIzNzIxNjJjODVkZTczMGMwNWM4NzgzNGMwZWZmNDdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiSlNDUHRyVGFnLmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFt
Lmg+CiAKQEAgLTYzLDUgKzY1LDI4IEBAIENTdHJpbmcgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFz
ZTo6ZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5CiAgICAgcmV0
dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAorYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdh
c206OkNvbXBpbGF0aW9uTW9kZSBtb2RlKQoreworICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdh
c21EaXNhc3NlbWJseSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKKyAgICAgICAgcmV0
dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOworICAgIGNhc2UgV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdNb2RlOgorICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGU6CisgICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1i
bHkoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggOTI1NTkx
OGIxYmExNzVhMWY0OWRjMzAyNWVjNmZjYTg4OTM5ZDM2NC4uMWVhMzI0NTQxNWFiMDhhNDVjN2Qz
ZTU5NTk2MGM0NDViMTlmZjc1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCkBAIC01NCw2ICs1NCwxMSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20geworZW51bSBjbGFzcyBDb21waWxh
dGlvbk1vZGUgOiB1aW50OF90OworfSAvLyBuYW1lc3BhY2UgV2FzbQorCitjbGFzcyBDb2RlQmxv
Y2s7CiB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIAogZW51
bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwpAQCAtMzc3LDcgKzM4MiwxMCBAQCBjbGFzcyBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewogCiAg
ICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRo
TmFtZShleGVjdXRhYmxlQWRkcmVzcygpLCBkYXRhTG9jYXRpb24oKSwgbmFtZSwgb3V0KTsKKyAg
ICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNl
OjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUs
IG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJh
c2U6OmR1bXBXaXRoTmFtZShudWxscHRyLCBudWxscHRyLCBuYW1lLCBvdXQpOwogICAgIH0KIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCB7IGR1bXBXaXRoTmFtZSgiQ29k
ZVB0ciIsIG91dCk7IH0KQEAgLTUzNyw2ICs1NDUsOSBAQCBpbmxpbmUgRnVuY3Rpb25QdHI8dGFn
Pjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gcHRyKQogewogfQogCiti
b29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqKTsKK2Jvb2wgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9kZSk7CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IGJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2
ZmQyMjU4YTIuLjAxMzg2MGI2NmMyYjE5YThjYmI1OTUzYTVkMGU0NGRkMjc3ZmJkOWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMjYs
NiArMjYsNyBAQAogCiAgICAgOkJhc2ljQmxvY2tMb2NhdGlvbiwKICAgICA6Qm91bmRMYWJlbCwK
KyAgICA6Q2FsbExpbmtJbmZvLAogICAgIDpEZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwK
ICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lvbiwKQEAgLTQ0LDcgKzQ1LDYgQEAKICAgICA6SlNT
Y29wZSwKICAgICA6SlNUeXBlLAogICAgIDpKU1ZhbHVlLAotICAgIDpMTEludENhbGxMaW5rSW5m
bywKICAgICA6UmVzdWx0VHlwZSwKICAgICA6T3BlcmFuZFR5cGVzLAogICAgIDpQcml2YXRlRmll
bGRQdXRLaW5kLApAQCAtODQwLDcgKzg0MCw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxM
aW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CiAgICAgfQogCkBAIC04NTIsNyArODUzLDggQEAKICAgICAgICAgYXJndjogdW5zaWduZWQsCiAg
ICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExp
bmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJy
YXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
ICAgICB9CiAKQEAgLTg2NSw3ICs4NjcsOCBAQAogICAgICAgICBlY21hTW9kZTogRUNNQU1vZGUs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2Fs
bExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKICAgICB9CiAKQEAgLTg3OSw2ICs4ODIsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50
LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlu
a0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9m
aWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTkwMCw2ICs5MDQsNyBAQAogICAgICAgICBm
aXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExp
bmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTkyMSw2ICs5MjYs
NyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsK
KyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmls
ZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQpA
QCAtOTMzLDcgKzkzOSw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAg
ICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBA
IC05NDcsNiArOTU0LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAogICAgIH0sCkBAIC0xMjQ5LDcgKzEyNTcsOCBAQAogICAgIG1ldGFkYXRhOiB7CiAgICAg
ICAgIGl0ZXJhdGlvbk1ldGFkYXRhOiBJdGVyYXRpb25Nb2RlTWV0YWRhdGEsCiAgICAgICAgIGl0
ZXJhYmxlUHJvZmlsZTogVmFsdWVQcm9maWxlLAotICAgICAgICBjYWxsTGlua0luZm86IExMSW50
Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIGl0ZXJhdG9yUHJvZmlsZTog
VmFsdWVQcm9maWxlLAogICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEs
CiAgICAgICAgIG5leHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCkBAIC0xMjcyLDcgKzEyODEsOCBA
QAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGl0ZXJhdGlvbk1ldGFkYXRhOiBJdGVyYXRpb25N
b2RlTWV0YWRhdGEsCiAgICAgICAgIGl0ZXJhYmxlUHJvZmlsZTogQXJyYXlQcm9maWxlLAotICAg
ICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0lu
Zm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAg
ICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgICAgIGRvbmVNb2Rl
TWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIGRvbmVQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCkBAIC0xMzkzLDYgKzE0MDMsOSBAQAogb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1
cm5fZnJvbV9qc180NAogb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180NQogb3Ag
OmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180Ngorb3AgOmxsaW50X2Nsb29wX2RpZF9y
ZXR1cm5fZnJvbV9qc180Nworb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180OAor
b3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180OQogCiBlbmRfc2VjdGlvbiA6Q0xv
b3BIZWxwZXJzCiAKQEAgLTE0MTUsNiArMTQyOCwxMCBAQAogb3AgOmxsaW50X25hdGl2ZV9jb25z
dHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBv
bGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCitv
cCA6bGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NhbGxfdHJh
bXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpsbGlu
dF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF9m
cm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90cmFt
cG9saW5lCiBvcCA6bm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUKQEAgLTE0MjMsNiArMTQ0MCw4
IEBACiBvcCA6bGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbgogb3AgOm9wX2NhbGxfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbgorb3AgOm9wX2Nh
bGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1
cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9w
IDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2dldF9i
eV9pZF9yZXR1cm5fbG9jYXRpb24KQEAgLTE0MzgsMTUgKzE0NTcsMTUgQEAKIG9wIDpvcF9jb25z
dHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbgot
b3AgOm9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxfc2xvd19y
ZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19y
ZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2Nh
dGlvbgogb3AgOm9wX2NhbGxfZXZhbF9zbG93X3JldHVybl9sb2NhdGlvbgogCiBvcCA6anNfdHJh
bXBvbGluZV9vcF9jYWxsCi1vcCA6anNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGwKIG9wIDpqc190
cmFtcG9saW5lX29wX2NvbnN0cnVjdAorb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdz
CitvcCA6anNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJncwogb3AgOmpzX3RyYW1wb2xp
bmVfb3BfaXRlcmF0b3JfbmV4dAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3Blbgog
b3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5o
CmluZGV4IDRmNDdjOGJjY2Y4ZTU3NDhhYTliMGYzNmU2ZjM2MzA1YWRjMzAwMTEuLjI3MGNkNmYx
ZDAyZjQ0ZDUzZGIzZTZhYTYzYWZmYTE1ZTBjMDkyNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oCkBAIC0xODAsNyArMTgwLDcgQEAgcHRyZGlmZl90IHN0YWNrT2Zmc2V0SW5SZWdpc3Rl
cnNGb3JDYWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgdW5zaWduZWQgY2hlY2sKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KLUxMSW50Q2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNr
cG9pbnRJbmRleCkKK0NhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRh
dGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGNoZWNrcG9pbnRJbmRleCk7CiAgICAgcmV0dXJuIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZv
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcApp
bmRleCAzYjgwM2IzOGE3ODY5YjQ5Mzg5YzA3OTBhYmM4YmViOGQ0MGE1NThhLi5hMWFmY2Y5Mzhh
NTFmMmJjMTcyZjBmZDIwMjcxMzJlNjcyZWVkOTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1
ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCi0jaWYg
RU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCiBDYWxsTGlua0luZm86OkNhbGxUeXBlIENh
bGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3IoT3Bjb2RlSUQgb3Bjb2RlSUQpCkBAIC04MiwxMSArODEs
MTMgQEAgQ2FsbExpbmtJbmZvOjp+Q2FsbExpbmtJbmZvKCkKIAogdm9pZCBDYWxsTGlua0luZm86
OmNsZWFyU3R1YigpCiB7CisjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoIXN0dWIoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9zdHViLT5jbGVhckNhbGxOb2Rlc0Zvcih0aGlzKTsKICAgICBt
X3N0dWIgPSBudWxscHRyOworI2VuZGlmCiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmso
Vk0mIHZtKQpAQCAtMTEzLDE5ICsxMTQsMTkgQEAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gQ2FsbExpbmtJbmZvOjpkb25lTG9jYXRpb24oKQogICAgIHJldHVybiBtX2RvbmVM
b2NhdGlvbjsKIH0KIAotc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxs
ZWVNYXNrID0gMTsKLQogdm9pZCBDYWxsTGlua0luZm86OnNldE1vbm9tb3JwaGljQ2FsbGVlKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGly
ZWN0KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2Fs
bGVlKSAmIHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2su
c2V0KHZtLCBvd25lciwgY2FsbGVlKTsKIAotICAgIGlmIChpc0RhdGFJQygpKSAKKyAgICBpZiAo
aXNEYXRhSUMoKSkKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlv
biA9IGNvZGVQdHI7CiAgICAgZWxzZSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsK
KyNlbmRpZgogICAgIH0KIH0KIApAQCAtMTM1LDggKzEzNiwxMSBAQCB2b2lkIENhbGxMaW5rSW5m
bzo6Y2xlYXJDYWxsZWUoKQogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKICAgICBp
ZiAoaXNEYXRhSUMoKSkKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5h
dGlvbiA9IG51bGxwdHI7Ci0gICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkpCisgICAg
ZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkpIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlv
biwgbnVsbHB0cik7CisjZW5kaWYKKyAgICB9CiB9CiAKIEpTT2JqZWN0KiBDYWxsTGlua0luZm86
OmNhbGxlZSgpCkBAIC0yMjQsNiArMjI4LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2Vh
ayhWTSYgdm0pCiAgICAgCiAgICAgaWYgKGlzTGlua2VkKCkpIHsKICAgICAgICAgaWYgKHN0dWIo
KSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICBpZiAoIXN0dWIoKS0+dmlzaXRXZWFr
KHZtKSkgewogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NS
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCkBAIC0yMzQsNiArMjM5LDcgQEAg
dm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgICAgICAgICAgICAgdW5s
aW5rKHZtKTsKICAgICAgICAgICAgICAgICBtX2NsZWFyZWRCeUdDID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KKyNlbmRpZgogICAgICAgICB9IGVsc2UgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fY2Fs
bGVlT3JDb2RlQmxvY2suZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoaXNEaXJlY3QoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKSB7CkBA
IC0yODAsMTMgKzI4NiwxNCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkK
ICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1l
U2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEmIHNodWZmbGVEYXRhKQogewog
ICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KHNodWZmbGVEYXRhKTsKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aElt
cGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBi
b29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
CitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBs
KENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9v
bCBpc1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkK
IHsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCkBAIC0zNDUsNyArMzUy
LDcgQEAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGwKICAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1w
bCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFp
bENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYg
cHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7
CiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CkBAIC0zNTgsNyArMzY1LDcgQEAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0LCBHUFIKICAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxs
cHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFs
c2UsIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gSW52YWxpZEdQUlJlZyk7CiAgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwg
aml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CkBAIC0zNjYsNyArMzczLDcgQEAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJgogCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
Q0NhbGxIZWxwZXJzJiBqaXQpCiB7Ci0gICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8
SlNFbnRyeVB0clRhZz4oKSk7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0
Q1RJTGlua0NhbGwoKS5jb2RlKCkpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlv
bigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CkBAIC0zNzYsMjEgKzM4MywzMSBAQCB2b2lkIENhbGxM
aW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBjYWxsTGlua0luZgogICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwg
b2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9Cisj
ZW5kaWYKIAotdm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURh
dGFJQyhWTSYgdm0sIENhbGxUeXBlIGNhbGxUeXBlLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKiBmcmFtZVNodWZmbGVEYXRhKQogewotICAgIG1fY29k
ZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7
Ci0gICAgc2V0VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIp
OwotICAgIG1fZG9uZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9u
OwotICAgIGlmICh1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKSB7CisgICAg
VU5VU0VEX1BBUkFNKGZyYW1lU2h1ZmZsZURhdGEpOworICAgIG1fY29kZU9yaWdpbiA9IENvZGVP
cmlnaW4oYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOworI2lmIEVO
QUJMRShKSVQpCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBtX2NhbGxlZUdQUiA9
IGNhbGxlZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVmZmxlRGF0YSkgewogICAgICAgICAvLyBGSVhN
RTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUu
Ci0gICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICAgICAg
bV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKmZy
YW1lU2h1ZmZsZURhdGEpOwogICAgIH0KLSAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olll
cyk7CiAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0g
ICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7CisjZW5k
aWYKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgc2V0U2xvd1BhdGhD
YWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOworICAgIC8vIElmIEpJ
VCBpcyBkaXNhYmxlZCwgd2Ugc2hvdWxkIG5vdCBzdXBwb3J0IGR5bmFtaWNhbGx5IGdlbmVyYXRl
ZCBjYWxsIElDLgorICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIGRpc2FsbG93
U3R1YnMoKTsKIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERp
cmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c1RhaWxDYWxsKCkpOwpAQCAtNDA2LDcgKzQyMyw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0
RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiAgICAgfSk7CiB9CiAKLXZvaWQgQ2Fs
bExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3ZvaWQgQ2FsbExpbmtJ
bmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgU2NvcGVk
TGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoaXNUYWlsQ2FsbCgpKTsKIApAQCAtNDYyLDYgKzQ3OSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZv
OjpzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IHRh
cmdldCkKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9j
YWxsTG9jYXRpb24sIHRhcmdldCk7CiB9CisjZW5kaWYKIAogdm9pZCBDYWxsTGlua0luZm86OnNl
dFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyKQogewpAQCAtNDgzLDExICs1MDEsMTQgQEAgdm9pZCBDYWxsTGlua0luZm86
OnJldmVydENhbGxUb1N0dWIoKQogICAgICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLmNsZWFyKCk7
CiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRy
OwogICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpy
ZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiksIGNhbGxlZUdQUigpLCBudWxscHRyKTsKKyNlbmRpZgogICAgIH0K
IH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8UG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKIHsKICAgICBjbGVhclN0dWIoKTsK
QEAgLTUwNCw3ICs1MjUsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8UG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5jb2RlKCkpKTsKICAg
ICB9CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0jZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCmlu
ZGV4IGU1Zjc3Y2YzN2JmMjY2ZjRiOWM5M2M1MGNmOTk2ZDIxYzY2OGNlNDUuLmIyZDNhZmE2Y2Y2
MGQxNWJlN2E1ZDQ5ZDg2MmNjNDVjZjhiNThhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTI4LDI1ICsyOCwyOSBAQAogI2luY2x1ZGUg
IkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCiAjaW5jbHVkZSAiQ2FsbE1vZGUuaCIKICNpbmNsdWRl
ICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5l
bExpbmtlZExpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUKQotCiBj
bGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIEZ1bmN0aW9u
Q29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKK2NsYXNzIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCitzdHJ1Y3QgQ2FsbEZyYW1lU2h1
ZmZsZURhdGE7CiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CiAKIGNsYXNzIENhbGxMaW5r
SW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJs
aWM6CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKwogICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKQEAgLTU5
LDYgKzYzLDggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgRGlyZWN0Q29uc3RydWN0LAogICAgICAgICBE
aXJlY3RUYWlsQ2FsbAogICAgIH07CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBw
b2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwogICAgIAogICAgIHN0YXRpYyBDYWxsVHlwZSBjYWxs
VHlwZUZvcihPcGNvZGVJRCBvcGNvZGVJRCk7CiAKQEAgLTE3NCwzNSArMTgwLDQzIEBAIGNsYXNz
IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZv
PiB7CiAgICAgICAgIHJldHVybiBpc1ZhcmFyZ3NDYWxsVHlwZShzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSkpOwogICAgIH0KIAotICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJl
dHVybiBtX3N0dWIgfHwgbV9jYWxsZWVPckNvZGVCbG9jazsgfQorICAgIGJvb2wgaXNMaW5rZWQo
KSBjb25zdCB7IHJldHVybiBzdHViKCkgfHwgbV9jYWxsZWVPckNvZGVCbG9jazsgfQogICAgIHZv
aWQgdW5saW5rKFZNJik7CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0VXBDYWxsKENh
bGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlR1BSKQogICAgIHsKICAgICAgICAgbV9jYWxs
VHlwZSA9IGNhbGxUeXBlOwogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9
CiAKLSAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwotCiAgICAgR1BSUmVn
IGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CisjZW5kaWYKKworICAg
IHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIENhbGxUeXBlLCBCeXRlY29kZUluZGV4LCBDYWxs
RnJhbWVTaHVmZmxlRGF0YSopOwogICAgIAogICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDogdWlu
dDhfdCB7CiAgICAgICAgIFllcywKICAgICAgICAgTm8KICAgICB9OwogCisjaWYgRU5BQkxFKEpJ
VCkKIHByaXZhdGU6Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFz
dFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47
CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENh
bGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8dm9p
ZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgog
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9y
VGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+
JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVT
RURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwot
ICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CisgICAgdm9pZCBlbWl0RGlyZWN0
VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHBy
ZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmKTsKICAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVj
dENhbGwoKTsKKyAgICB2b2lkIHNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4pOworI2VuZGlmCisKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsK
IAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRh
SUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjE3LDcgKzIzMSw2IEBA
IGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExp
bmtJbmZvPiB7CiAgICAgICAgIG1fZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIH0K
IAotICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKIAogICAgIGJvb2wgYWxsb3dTdHVi
cygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsgfQogCkBAIC0yMzcsNyArMjUwLDYgQEAg
Y2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlu
a0luZm8+IHsKICAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIEpTQ2VsbCosIEZ1bmN0aW9uQ29k
ZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVCbG9jaygpOwogICAgIEZ1bmN0aW9uQ29kZUJs
b2NrKiBjb2RlQmxvY2soKTsKLSAgICB2b2lkIHNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAgICAgdm9pZCBzZXRMYXN0U2VlbkNhbGxlZShW
TSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUpOwogICAgIHZvaWQgY2xl
YXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjQ3LDIyICsyNTksMTggQEAgY2xhc3MgQ2FsbExpbmtJ
bmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2
b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihFeGVjdXRhYmxlQmFzZSopOwogICAg
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAgICAgCisjaWYgRU5BQkxFKEpJVCkKICAg
ICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmKTsKKyNlbmRp
ZgogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZSogc3R1YigpIGNvbnN0CiAgICAgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHJldHVybiBt
X3N0dWIuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTbG93U3R1YihSZWY8SklUU3R1YlJv
dXRpbmU+JiYgbmV3U2xvd1N0dWIpCi0gICAgewotICAgICAgICBtX3Nsb3dTdHViID0gV1RGTW92
ZShuZXdTbG93U3R1Yik7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhclNsb3dTdHViKCkKLSAgICB7
Ci0gICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisjZW5kaWYKICAgICB9CiAKICAgICBib29sIHNlZW5PbmNlKCkKQEAgLTMzMCwxOSAr
MzM4LDE3IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExp
bmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKLSNpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpCi0gICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXM7Ci0gICAgfQotI2VuZGlmCi0KICAgICB1aW50MzJfdCBtYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpczsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCk7CisgICAgdm9pZCB1cGRhdGVNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykK
KyAgICB7CisgICAgICAgIGlmIChtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgICAgICAgICBtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgfQogCiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoQ291bnQoKQogICAgIHsKQEAgLTM2NCwx
MCArMzcwLDEyIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5l
bE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2Fs
bExpbmtJbmZvLCBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKTsKICAgICB9CiAKKyNpZiBFTkFC
TEUoSklUKQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
Y2FsbGVlR1BSOwogICAgIH0KKyNlbmRpZgogCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudCgp
CiAgICAgewpAQCAtMzgzLDkgKzM5MSwxMSBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMg
UGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgZm9yRWFjaERl
cGVuZGVudENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChpc0xpbmtlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoc3R1YigpKQorICAgICAgICAgICAg
aWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICAgICAgc3R1YigpLT5m
b3JFYWNoRGVwZW5kZW50Q2VsbChmdW5jdG9yKTsKLSAgICAgICAgICAgIGVsc2UgeworI2VuZGlm
CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9jYWxsZWVP
ckNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzRGlyZWN0KCkpCiAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9sYXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZS5nZXQo
KSk7CkBAIC0zOTcsMjYgKzQwNywzNSBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogCiAgICAgdm9pZCB2aXNpdFdlYWso
Vk0mKTsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXRGcmFtZVNodWZmbGVEYXRhKGNv
bnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CiAKICAgICBjb25zdCBDYWxsRnJhbWVTaHVmZmxl
RGF0YSogZnJhbWVTaHVmZmxlRGF0YSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9mcmFtZVNo
dWZmbGVEYXRhLmdldCgpOwogICAgIH0KKyNlbmRpZgogCiBwcml2YXRlOgogCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogCisgICAgdWlu
dDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFy
Z3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6
IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGlu
YXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKICAgICAgICAgVW5pb25UeXBlKCkgCisjaWYg
RU5BQkxFKEpJVCkKICAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciwgSW52YWxpZEdQUlJl
ZyB9CisjZWxzZQorICAgICAgICAgICAgOiBkYXRhSUMgeyBudWxscHRyIH0KKyNlbmRpZgogICAg
ICAgICB7IH0KICAgICAgICAgc3RydWN0IERhdGFJQyB7CiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbjsK
KyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgR1BSUmVnIG1fY2FsbExpbmtJbmZvR1BSOwor
I2VuZGlmCiAgICAgICAgIH0gZGF0YUlDOwogCiAgICAgICAgIHN0cnVjdCB7CkBAIC00MjksOSAr
NDQ4LDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPiB7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9y
Q29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4
ZWN1dGFibGU7CisjaWYgRU5BQkxFKEpJVCkKICAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmU+IG1fc3R1YjsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc2xvd1N0dWI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBtX2ZyYW1lU2h1ZmZs
ZURhdGE7CisjZW5kaWYKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1f
aGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgIGJvb2wgbV9oYXNTZWVuQ2xvc3VyZSA6IDE7
CkBAIC00NDEsOSArNDYxLDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRS
YXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgYm9vbCBtX2NsZWFyZWRCeUpldHRp
c29uIDogMTsKICAgICB1bnNpZ25lZCBtX2NhbGxUeXBlIDogNDsgLy8gQ2FsbFR5cGUKICAgICB1
bnNpZ25lZCBtX3VzZURhdGFJQyA6IDE7IC8vIFVzZURhdGFJQworI2lmIEVOQUJMRShKSVQpCiAg
ICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworI2VuZGlmCiAgICAgdWlu
dDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9OwotICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4
aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNr
IHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogfTsKIAogaW5saW5lIENvZGVPcmlnaW4g
Z2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKQEAg
LTQ1MywxMSArNDc0LDcgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9y
aWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIAogc3RydWN0IFVubGlua2VkQ2FsbExp
bmtJbmZvIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwg
b25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENv
ZGVPcmlnaW4uCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOwogfTsKIAot
I2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKaW5kZXggZjdhZmIy
YjBmMjhmZDllNWZmYzVjMzRiNmEzYTg1NmFlMzczMDJmNS4uZjJkZGEwZWVkYWFiOTY0NGEwM2Jl
YjZlNTNmZWExNzIyM2EwY2FmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ2Fs
bExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBAIC02MywzNCArNjIsNyBA
QCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBDb2RlQgogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgp
OwogICAgIH0KICNlbmRpZgotCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgIE9wY29kZUlE
IG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIG9wX2NhbGw6Ci0gICAg
ICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpLm1ldGFkYXRhKHBy
b2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9w
X2NvbnN0cnVjdDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENv
bnN0cnVjdD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBvcF90YWlsX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9
ICZpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5t
X2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVu
OgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVu
PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jayku
bV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHJldHVybiBD
YWxsTGlua1N0YXR1cyhjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlKCkpOworICAgIHJldHVy
biBDYWxsTGlua1N0YXR1cygpOwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcigKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKaW5kZXggNzdjYWE4ZTU3ZTk0YWQ3MzJhODcwM2I3MTBmZDQ4MGY3MTgxM2FlNi4uY2IwMTYy
NWQ1ZjhkM2ZiZmFkYmM1NDI5NWE4NzU0MDE1MTY0YzQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ0OSwxNCArNDQ5LDE3IEBAIGJvb2wg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YSh0aGlzKTsgXAogICAgIG5ldyAoJm1ldGFkYXRhKSBfX29wOjpNZXRhZGF0YSB7IGJ5dGVjb2Rl
IH07IFwKIAotI2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKLQotI2RlZmlu
ZSBMSU5LKC4uLikgXAotICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKTogeyBc
CisjZGVmaW5lIExJTktfSU1QTCguLi4pIFwKICAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShX
VEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpIFwKICAgICAgICAgV1RGX0xBWllfSEFTX1JFU1Qo
X19WQV9BUkdTX18pKHsgXAogICAgICAgICAgICAgV1RGX0xBWllfRk9SX0VBQ0hfVEVSTShMSU5L
X0ZJRUxELCAgV1RGX0xBWllfUkVTVF8oX19WQV9BUkdTX18pKSBcCiAgICAgICAgIH0pIFwKKwor
I2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKKworI2RlZmluZSBMSU5LKC4u
LikgXAorICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKTogeyBcCisgICAgICAg
IExJTktfSU1QTChfX1ZBX0FSR1NfXykgXAogICAgICAgICBicmVhazsgXAogICAgIH0KIApAQCAt
NDY1LDEwICs0NjgsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogICAgICAgICBtX2J5dGVjb2Rl
Q29zdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKICAgICAgICAgc3dpdGNoIChvcGNvZGVJ
RCkgewotICAgICAgICBMSU5LKE9wQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAgIExJTkso
T3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2FsbEZvcndh
cmRBcmd1bWVudHMsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BDb25zdHJ1Y3RWYXJhcmdzLCBw
cm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0QnlWYWwsIHByb2ZpbGUpCiAgICAgICAgIExJTkso
T3BHZXRQcml2YXRlTmFtZSwgcHJvZmlsZSkKIApAQCAtNDk4LDExICs0OTcsNiBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5
KQogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQogCi0gICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
Ci0gICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENvbnN0
cnVjdCwgcHJvZmlsZSkKLQogICAgICAgICBMSU5LKE9wSW5CeVZhbCkKICAgICAgICAgTElOSyhP
cFB1dEJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlWYWxEaXJlY3QpCkBAIC01MjcsMTMgKzUy
MSw5MyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wQ2F0Y2gpCiAg
ICAgICAgIExJTksoT3BQcm9maWxlQ29udHJvbEZsb3cpCiAKKyAgICAgICAgY2FzZSBvcF9jYWxs
OiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsLCBwcm9maWxlKQorICAgICAgICAgICAg
bWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2Fs
bDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGwsIHByb2ZpbGUpCisjaWYgRU5B
QkxFKEpJVCkKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07CisjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworI2VuZGlmCisgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Q
YXJhbWV0ZXJzID0gbnVtUGFyYW1ldGVycygpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyOworI2VuZGlmCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBieXRl
Y29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIp
OworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsr
aSkgeworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICAgICAg
ICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBi
eXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwor
ICAgICAgICAgICAgfQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzaHVmZmxlRGF0
YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBE
YXRhRm9ybWF0SlMpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIHNodWZm
bGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BSKCks
IGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOworI2VuZGlmCisgICAgICAgICAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLnNo
cmlua1RvRml0KCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFs
aXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1
Y3Rpb24uaW5kZXgoKSwgJnNodWZmbGVEYXRhKTsKKyNlbHNlCisgICAgICAgICAgICBtZXRhZGF0
YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisjZW5kaWYK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2
YWw6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENhbGxFdmFsLCBwcm9maWxlKQorICAgICAg
ICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExp
bmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxw
dHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2Nv
bnN0cnVjdDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wQ29uc3RydWN0LCBwcm9maWxlKQor
ICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwg
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCks
IG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNl
IG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BJ
dGVyYXRvck9wZW4pCisgICAgICAgICAgICBMSU5LX0lNUEwoT3BJdGVyYXRvck9wZW4pCisgICAg
ICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxs
TGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVs
bHB0cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
aXRlcmF0b3JfbmV4dDogewotICAgICAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShPcEl0ZXJh
dG9yTmV4dCkKKyAgICAgICAgICAgIExJTktfSU1QTChPcEl0ZXJhdG9yTmV4dCkKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5r
SW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jYWxs
X3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENhbGxWYXJhcmdzLCBwcm9maWxl
KQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2
bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4
KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BUYWls
Q2FsbFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5m
by5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOiB7
CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIHByb2Zp
bGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlD
KHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5k
ZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENv
bnN0cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5r
SW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCkBAIC03ODMsMjEgKzg1NywxOCBAQCB2b2lkIENvZGVCbG9jazo6c2V0dXBX
aXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkp
OwogICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+
KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CiAgICAgICAgIGppdERhdGEubV9zdHVi
SW5mb3MgPSBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5mbz4oaml0Q29kZS0+bV91bmxpbmtl
ZFN0dWJJbmZvcy5zaXplKCkpOwotICAgICAgICBqaXREYXRhLm1fY2FsbExpbmtJbmZvcyA9IEZp
eGVkVmVjdG9yPENhbGxMaW5rSW5mbz4oaml0Q29kZS0+bV91bmxpbmtlZENhbGxzLnNpemUoKSk7
CisgICAgICAgIGZvciAoYXV0byYgdW5saW5rZWRDYWxsTGlua0luZm8gOiBqaXRDb2RlLT5tX3Vu
bGlua2VkQ2FsbHMpIHsKKyAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIHVubGlua2VkQ2FsbExpbmtJ
bmZvLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7Cisg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVMb2NhdGlvbnMoeyB9LCB1bmxpbmtlZENh
bGxMaW5rSW5mby5kb25lTG9jYXRpb24pOworICAgICAgICB9CisKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOwogICAg
ICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CiAgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxM
aW5rSW5mbzogewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oZW50cnkucG9pbnRlcigpKTsKLSAgICAgICAgICAgICAgICBVbmxpbmtlZENh
bGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSBqaXRDb2RlLT5tX3VubGlua2VkQ2Fs
bHNbaW5kZXhdOwotICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0g
aml0RGF0YS5tX2NhbGxMaW5rSW5mb3NbaW5kZXhdOwotICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby5pbml0aWFsaXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZv
OjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRD
b25zdGFudFBvb2xbaV0gPSAmY2FsbExpbmtJbmZvOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvOiB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVyKCkpOwogICAgICAgICAgICAgICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSBqaXRDb2RlLT5tX3Vu
bGlua2VkU3R1YkluZm9zW2luZGV4XTsKQEAgLTE1NjcsMTUgKzE2MzgsNiBAQCB2b2lkIENvZGVC
bG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygpCiAKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0pOwotCi0gICAgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKFsmXShMTEludENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8uaXNMaW5r
ZWQoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChjYWxsTGlua0luZm8uY2FsbGVlKCkpKSB7Ci0gICAg
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmluZyBMTElu
dCBjYWxsIGZyb20gIiwgKnRoaXMpOwotICAgICAgICAgICAgY2FsbExpbmtJbmZvLnVubGluaygp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUoKSAm
JiAhdm0uaGVhcC5pc01hcmtlZChjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUoKSkpCi0gICAg
ICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwotICAgIH0pOwogfQog
CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE1OTMsOCArMTY1NSw2IEBAIENvZGVCbG9jazo6SklURGF0
YSYgQ29kZUJsb2NrOjplbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
KQogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAo
YXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNh
bGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgIGNhbGxM
aW5rSW5mby52aXNpdFdlYWsodm0oKSk7CiAgICAgICAgIGZvciAoYXV0byYgc3R1YkluZm8gOiBq
aXREYXRhLT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyQmFz
ZSBsb2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKICAgICAgICAgICAgIHN0dWJJbmZvLnZpc2l0
V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsKQEAgLTE2MTIsMTkgKzE2NzIsNiBAQCB2b2lk
IENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogICAgICAgICB9CiAgICAgfQog
I2VuZGlmCi0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGlmIChqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHdlIGRvbid0IG5lZWQgdG8gZmlu
YWxpemUgdGhlc2Ugc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgotICAgICAgICBmb3IgKENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4o
bV9qaXRDb2RlLmdldCgpKS0+bV9ldmFsQ2FsbExpbmtJbmZvcykgewotICAgICAgICAgICAgQVNT
RVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwotICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5mb3JFYWNoRGVwZW5kZW50Q2VsbChbXSAoSlNDZWxsKikgewotICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgIH0K
LSNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTE2MzcsNiArMTY4NCwxMCBAQCB2b2lkIENvZGVCbG9j
azo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogICAgIGlmIChKSVRDb2RlOjpjb3Vs
ZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElubGluZUNh
Y2hlcygpOwogCisgICAgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhbJl0oQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vh
ayh2bSk7CisgICAgfSk7CisKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWppdENvZGUoKSkK
ICAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKQEAgLTE3MDAsMTIgKzE3NTEsMTMg
QEAgdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogdm9pZCBDb2RlQmxvY2s6
OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIElDU3RhdHVzTWFwJiBy
ZXN1bHQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKKyAgICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2Fs
bExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAgICByZXN1
bHQuYWRkKGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52
YWx1ZS5jYWxsTGlua0luZm8gPSAmY2FsbExpbmtJbmZvOworICAgIH0pOwogICAgIGlmIChKSVRD
b2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9q
aXREYXRhLmdldCgpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHN0dWJJbmZvIDogaml0RGF0
YS0+bV9zdHViSW5mb3MpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChzdHViSW5mby5jb2Rl
T3JpZ2luLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuc3R1YkluZm8gPSAmc3R1YkluZm87
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExp
bmtJbmZvcykKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby5jb2RlT3Jp
Z2luKCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsTGlua0luZm8gPSAmY2FsbExp
bmtJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewpAQCAtMTc2MCwxNSArMTgxMiwyMiBA
QCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1DYWxsTGlua0luZm8qIENvZGVC
bG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGluZGV4
KQorQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5k
ZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCBpbmRleCkKIHsKLSAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgaWYgKGF1dG8qIGppdERh
dGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8g
OiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpIHsKLSAgICAgICAgICAgIGlmIChjYWxsTGlua0lu
Zm8uY29kZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5kZXgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAmY2FsbExpbmtJbmZvOwotICAgICAgICB9CisgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBp
bnN0cnVjdGlvbnMoKS5hdChpbmRleCk7CisgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2Rl
SUQoKSkgeworI2RlZmluZSBDQVNFKE9wKSBcCisgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKKyAg
ICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9jYWxs
TGlua0luZm87IFwKKyAgICAgICAgYnJlYWs7CisKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9M
TElOVF9DQUxMX0xJTktfSU5GTyhDQVNFKQorCisjdW5kZWYgQ0FTRQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KKwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRh
dGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0yMTM1LDEzICsyMTk0
LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIFNocmlua01vZGUgc2hyaW5rTW9kZSkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBDYWxsTGlu
a0luZm8qIGluY29taW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7
Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIHZvaWQgQ29k
ZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdD
YWxsKGNhbGxlckZyYW1lKTsKQEAgLTIxNTIsMTAgKzIyMDQsMTYgQEAgdm9pZCBDb2RlQmxvY2s6
OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5
bW9ycGhpY0MKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCit2b2lkIENvZGVCbG9jazo6bGlu
a0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8qIGluY29t
aW5nKQoreworICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7CisgICAgbV9pbmNv
bWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOworfQorCiB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5j
b21pbmdDYWxscygpCiB7Ci0gICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCkg
IT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCi0gICAgICAgIG1faW5jb21pbmdMTEludENh
bGxzLmJlZ2luKCktPnVubGluaygpOworICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4o
KSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdp
bigpLT51bmxpbmsodm0oKSk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVREYXRhKiBqaXREYXRh
ID0gbnVsbHB0cjsKICAgICB7CkBAIC0yMTYzLDIwICsyMjIxLDEyIEBAIHZvaWQgQ29kZUJsb2Nr
Ojp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICAgICAgaml0RGF0YSA9IG1faml0RGF0YS5nZXQo
KTsKICAgICB9CiAgICAgaWYgKGppdERhdGEpIHsKLSAgICAgICAgd2hpbGUgKGppdERhdGEtPm1f
aW5jb21pbmdDYWxscy5iZWdpbigpICE9IGppdERhdGEtPm1faW5jb21pbmdDYWxscy5lbmQoKSkK
LSAgICAgICAgICAgIGppdERhdGEtPm1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsodm0o
KSk7CiAgICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5i
ZWdpbigpICE9IGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQogICAg
ICAgICAgICAgaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5s
aW5rKHZtKCkpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIENvZGVC
bG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBMTEludENhbGxM
aW5rSW5mbyogaW5jb21pbmcpCi17Ci0gICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1l
KTsKLSAgICBtX2luY29taW5nTExJbnRDYWxscy5wdXNoKGluY29taW5nKTsKLX0KLQogQ29kZUJs
b2NrKiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKIHsKICAgICByZXR1cm4gb3duZXJFeGVj
dXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgp
KTsKQEAgLTIzMjksMTMgKzIzNzksMTIgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2Zp
bGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSBtb2QKICAgICBp
ZiAodm0uaGVhcC5jdXJyZW50VGhyZWFkSXNEb2luZ0dDV29yaygpICYmICF2bS5oZWFwLmlzTWFy
a2VkKG93bmVyRXhlY3V0YWJsZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKEpJ
VCkKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICAgICAgaWYgKEpJVERhdGEqIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQot
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwotICAg
ICAgICB9CisgICAgICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0
Q2xlYXJlZEJ5SmV0dGlzb24oKTsKKyAgICAgICAgfSk7CisKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAg
ICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9u
KCk7CkBAIC0yMzQ0LDcgKzIzOTMsNiBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmls
ZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1vZAogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9Ci0jZW5kaWYKIAogICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgy
KS4KICAgICBvd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUodm0sIGFsdGVybmF0aXZlKCks
IGNvZGVUeXBlKCksIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKQEAgLTI4NDcsMTkgKzI4OTUsMTMg
QEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGUKIHsKICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+
b3Bjb2RlSUQoKSkgewotI2RlZmluZSBDQVNFMShPcCkgXAorI2RlZmluZSBDQVNFKE9wKSBcCiAg
ICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKICAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8
T3A+KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2ZpbGU7CiAKLSNkZWZpbmUgQ0FTRTIoT3Ap
IFwKLSAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAgICAgICByZXR1cm4gJmluc3RydWN0aW9u
LT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZTsK
LQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRTEpCi0gICAgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ0FTRTIpCisgICAgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNFKQogCi0jdW5kZWYgQ0FTRTEKLSN1bmRl
ZiBDQVNFMgorI3VuZGVmIENBU0UKIAogICAgIGNhc2UgT3BHZXRCeUlkOjpvcGNvZGVJRDogewog
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKQEAg
LTMwMjksMTcgKzMwNzEsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJvZmls
ZVByZWRpY3Rpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2UKICAgICAgICAgfQog
ICAgIH0pOwogCi0jZGVmaW5lIFZJU0lUMShfX29wKSBcCisjZGVmaW5lIFZJU0lUKF9fb3ApIFwK
ICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgcHJv
Y2VzcyhtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSk7IH0pOwogCi0jZGVmaW5lIFZJU0lUMihfX29w
KSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7
IHByb2Nlc3MobWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUpOyB9KTsKLQot
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoVklTSVQxKQotICAgIEZPUl9F
QUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKFZJU0lUMikKKyAgICBGT1JfRUFD
SF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUKQogCi0jdW5kZWYgVklTSVQxCi0jdW5k
ZWYgVklTSVQyCisjdW5kZWYgVklTSVQKIAogICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVy
YXRvck5leHQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsKICAgICAgICAgcHJvY2VzcyhtZXRhZGF0
YS5tX2l0ZXJhYmxlUHJvZmlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKaW5kZXggNjRmOWY1YWJjZmUyYWU3MDVkMWRhNjVhYTlmODMxOTdiOTZjNmQzMS4u
YjdhZWEyNjc3ZjVlOTQ5MDhhYjM1NWY5NmIwZDIzYzM3ODI0MjAxMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1
ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVt
cFRhYmxlLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIk1ldGFkYXRhVGFibGUuaCIKICNpbmNs
dWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpAQCAtMjYxLDggKzI2MCw2IEBAIGNsYXNz
IENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3N0dWJJbmZvczsKLSAgICAgICAgRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxM
aW5rSW5mb3M7Ci0gICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIFBhY2tl
ZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAgICAgICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBQYWNrZWRSYXdTZW50aW5l
bE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOwog
ICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKQEAgLTI5MSw3ICsy
ODgsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBUaGlzIGlz
IGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFyaWx5IGZvciBjb21waWxpbmcgT1NSIGV4
aXRzIGluIHRoZSBjYXNlCiAgICAgLy8gdGhhdCB0aGVyZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hh
bmNlcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMsIHlvdSdyZSByZWFsbHkKICAgICAvLyBs
b29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxs
aW5nIHRoaXMuCi0gICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgpOworICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9y
Qnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsK
ICAgICAKICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKQEAgLTMwOSwxNCAr
MzA2LDExIEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiAKICAgICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotI2lmIEVOQUJM
RShKSVQpCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUs
IENhbGxMaW5rSW5mbyopOworI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBsaW5rSW5jb21pbmdQ
b2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9k
ZSopOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwo
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKLQogICAgIGNvbnN0
IEluc3RydWN0aW9uKiBvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYyk7
CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBv
ZmZzZXQpCiAgICAgewpAQCAtNDUzLDcgKzQ0Nyw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1Ymxp
YyBKU0NlbGwgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZh
bHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlu
a0luZm8oY29uc3QgRnVuY3RvciYpOwogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBiaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiB1bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRl
eCk7CkBAIC05NTksNyArOTUzLDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7
CiAgICAgVk0qIG1fdm07CiAKICAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1BvaW50
ZXIgeyBudWxscHRyIH07Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZv
LCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJ
bnRDYWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdT
ZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgIFN0cnVjdHVy
ZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxK
SVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCmluZGV4IDFkNTk0YWI4MzUyODk3
ZWM4YTc0NWVhMjQ5M2Y4ZDJkYTAxOGI5NjIuLjkyZGE5OWEwYmEyYWNjMWZjZGI2YTk3MzVmY2Rk
ZTIzZWZjOTMzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2tJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9ja0lubGluZXMuaApAQCAtODYsNyArODYsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExp
bmtJbmZvKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50
T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJiBmdW5jKQogewogICAgIGlmICht
X21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDEwNThmZmNkOTE3ZGQyYzUwMTYyZTEzNTViM2Q1OGIxOGU2YTA3MjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0NQdHJUYWcuaCIKLSNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0jaW5j
bHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3Ry
dWN0IEluc3RydWN0aW9uOwotCi1jbGFzcyBMTEludENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+IHsKLXB1YmxpYzoKLSAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3QgdW5saW5rZWRCaXQgPSAweDE7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbygpID0g
ZGVmYXVsdDsKLSAgICAKLSAgICB+TExJbnRDYWxsTGlua0luZm8oKQotICAgIHsKLSAgICAgICAg
aWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuICEobV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVl
V2l0aExpbmtCaXQgJiB1bmxpbmtlZEJpdCk7IH0KLSAgICAKLQotICAgIHZvaWQgbGluayhWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkp
Ci0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVl
V2l0aExpbmtCaXQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpOwotICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lciwgY2FsbGVlKTsKLSAgICAgICAgbV9tYWNoaW5lQ29k
ZVRhcmdldCA9IGNvZGVQdHI7Ci0gICAgfQotCi0gICAgdm9pZCB1bmxpbmsoKQotICAgIHsKLSAg
ICAgICAgLy8gTWFrZSBsaW5rIGludmFsaWRhdGVkLiBJdCB3b3JrcyBiZWNhdXNlIExMSW50IHRl
c3RzIHRoZSBnaXZlbiBjYWxsZWUgd2l0aCB0aGlzIHBvaW50ZXIuIEJ1dCBpdCBpcyBzdGlsbCB2
YWxpZCBhcyBsYXN0U2VlbkNhbGxlZSEKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVl
V2l0aExpbmtCaXQgfD0gdW5saW5rZWRCaXQ7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4oKTsKLSAgICAgICAgaWYgKGlz
T25MaXN0KCkpCi0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCog
Y2FsbGVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaXNMaW5rZWQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTT2JqZWN0
Kj4obV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQpOwotICAgIH0KLQotICAgIEpT
T2JqZWN0KiBsYXN0U2VlbkNhbGxlZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEpTT2JqZWN0Kj4obV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQg
JiB+dW5saW5rZWRCaXQpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgp
Ci0gICAgewotICAgICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCA9IHVu
bGlua2VkQml0OwotICAgIH0KLQotICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKLSAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KLQotcHJpdmF0
ZToKLSAgICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1
bmxpbmtlZEJpdCB9OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBt
X21hY2hpbmVDb2RlVGFyZ2V0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggY2E4YmVmMzI4YjRiZmIyYjBkZmRjOGIy
ODUyNDkyMWFjODM5YmQzNi4uMWNiYzY2Zjg0OTk1NDk5N2VmN2M1MGQ0OTM4NDMwMmYzNWM2Mjll
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMTI2LDExICsx
MjYsMTkgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxl
bmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFJzaGlmdCkgXAog
ICAgIG1hY3JvKE9wR2V0UHJpdmF0ZU5hbWUpIFwKIAotI2RlZmluZSBGT1JfRUFDSF9PUENPREVf
V0lUSF9BUlJBWV9QUk9GSUxFKG1hY3JvKSBcCisjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRI
X0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCisgICAgbWFjcm8oT3BDYWxsKSBcCisgICAg
bWFjcm8oT3BUYWlsQ2FsbCkgXAorICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwKKyAgICBtYWNybyhP
cENvbnN0cnVjdCkgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCisgICAgbWFjcm8oT3BJ
dGVyYXRvck5leHQpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BU
YWlsQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykg
XAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAorCisjZGVmaW5lIEZPUl9FQUNIX09Q
Q09ERV9XSVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcEdldEJ5VmFsKSBc
CiAgICAgbWFjcm8oT3BJbkJ5VmFsKSBcCiAgICAgbWFjcm8oT3BQdXRCeVZhbCkgXApAQCAtMTM5
LDYgKzE0Nyw3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNv
ZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BFbnVtZXJh
dG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEVudW1lcmF0b3JJbkJ5VmFsKSBcCiAgICAgbWFj
cm8oT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpIFwKKyAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09E
RV9XSVRIX0FSUkFZX0FMTE9DQVRJT05fUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wTmV3
QXJyYXkpIFwKQEAgLTE0OCwxNCArMTU3LDYgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBi
aXRXaWR0aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICNk
ZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfT0JKRUNUX0FMTE9DQVRJT05fUFJPRklMRShtYWNy
bykgXAogICAgIG1hY3JvKE9wTmV3T2JqZWN0KSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKLSAgICBtYWNybyhPcENhbGwpIFwK
LSAgICBtYWNybyhPcFRhaWxDYWxsKSBcCi0gICAgbWFjcm8oT3BDYWxsRXZhbCkgXAotICAgIG1h
Y3JvKE9wQ29uc3RydWN0KSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKLSAgICBtYWNy
byhPcEl0ZXJhdG9yTmV4dCkgXAotCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFS
WV9BUklUSF9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BBZGQpIFwKICAgICBtYWNybyhP
cE11bCkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0
Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI3M2MzN2RkNzJhNWFhODY2OTkwZmRmMWE5Mzk3YWVlMjlmMDIwMTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKQEAg
LTAsMCArMSwyMDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlcGF0Y2guaCIKKwor
I2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1l
U2h1ZmZsZXIuaCIKKyNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHU3Bl
Y3VsYXRpdmVKSVQuaCIKKyNpbmNsdWRlICJET01KSVRHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRl
ICJEaXJlY3RBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlQmFzZUlubGluZXMuaCIK
KyNpbmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGdWxsQ29kZU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIklDU3RhdHMuaCIKKyNpbmNsdWRlICJJbmxpbmVBY2Nl
c3MuaCIKKyNpbmNsdWRlICJJbnN0YW5jZU9mQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJKSVQuaCIKKyNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseS5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlNb2R1bGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAi
TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKyNpbmNsdWRlICJT
dHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRl
ICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRl
ICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgor
I2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0m
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQoreworICAgIGNhbGxMaW5rSW5mby5zZXRTbG93UGF0
aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5
UHRyVGFnPigpKTsKK30KKworI2lmIEVOQUJMRShKSVQpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1Bh
dGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IpCit7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKK30K
KyNlbmRpZgorCitzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQoreworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbExpbmtJbmZv
LmNhbGxNb2RlKCkpOworICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1
YWxUaHVuayk7Cit9CisKK3N0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiBj
YWxsZWUpCit7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIC8vIEVhY2ggV2ViQXNzZW1i
bHkuSW5zdGFuY2Ugc2hhcmVzIHRoZSBzdHVicyBmcm9tIHRoZWlyIFdlYkFzc2VtYmx5Lk1vZHVs
ZSwgd2hpY2ggYXJlIHRoZXJlZm9yZSB0aGUgYXBwcm9wcmlhdGUgb3duZXIuCisgICAgcmV0dXJu
IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2FsbGVlKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGNhbGxlZSk7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCit9CisKK3ZvaWQg
bGlua01vbm9tb3JwaGljQ2FsbCgKKyAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCisg
ICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHIpCit7CisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKworICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgLy8g
T3VyIGNhbGxlciBtdXN0IGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCisg
ICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAg
ICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKKworICAgIENvZGVCbG9j
ayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworCisgICAgLy8g
V2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9jay4KKyAg
ICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseU1vZHVsZShjYWxsZXJGcmFtZS0+Y2FsbGVl
KCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXND
ZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOworICAgIEFTU0VSVChvd25lcik7CisKKyAgICBBU1NF
UlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TW9ub21v
cnBoaWNDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUsIGNvZGVQdHIpOworICAgIGNhbGxMaW5rSW5m
by5zZXRMYXN0U2VlbkNhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7CisKKyNpZiBFTkFCTEUoSklU
KQorICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKKyAg
ICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNv
ZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAo
Y2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKKyNl
bmRpZgorCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2Nr
LT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKKworI2lmIEVO
QUJMRShKSVQpCisgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7CisgICAgICAgIGxpbmtT
bG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKK30KKworc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc0Rp
cmVjdCgpKSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29k
ZUJsb2NrKCk7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkp
CisgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyNlbmRp
ZgorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRp
c29uKCkpIHsKKyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNv
ZGVSZWYpOworCisgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKKyAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOworICAgICAgICB9CisgICAg
ICAgIGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBp
bmxpbmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCisgICAgfQor
ICAgIGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKKyAgICBjYWxsTGlua0luZm8uY2xlYXJTdHVi
KCk7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBjYWxsTGlua0lu
Zm8ucmVtb3ZlKCk7Cit9CisKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQoreworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZv
KSk7CisgICAgCisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElMaW5r
Q2FsbCgpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQoreworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKyAgICBpZiAoIWNhbGxlZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPih2bSwgY2FsbGVlKSkKKyAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxs
RW50cnlwb2ludCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIFVOVVNFRF9Q
QVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKKyNlbmRpZgorICAgIHJldHVy
biBudWxscHRyOworfQorCisjaWYgRU5BQkxFKEpJVCkKKworc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX09Q
RVJBVElPTl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9uKTsKK30KKworc3RhdGljIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oQ29kZUxv
Y2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsKQoreworICAgIEpTQ19SRVRVUk5fUkVU
QUdHRURfQ0FMTF9UQVJHRVRfV0lUSF9WQUxJREFUSU9OKGNhbGwpOworfQorCitzdGF0aWMgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxp
ZGF0aW9uKHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7CisgICAgQ29kZUxvY2F0aW9uQ2FsbDxK
U0ludGVybmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbjsK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6RlRMSklUKSB7CisgICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJn
ZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgcmV0dXJuIHJl
dGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5
Rm9yU2xvd1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7CisgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KyAgICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oY2FsbCk7Cit9CisKK3Zv
aWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9j
YXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgICAgICBWTSYg
dm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3MgPSAqdm0u
ZnRsVGh1bmtzOworICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0g
TWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAg
ICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5r
UHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtleUZv
clNsb3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOworICAgICAgICBrZXkgPSBrZXkud2l0
aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHRodW5rcy5nZXRT
bG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2sp
OworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q2FsbChjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkp
OworfQorCitzdGF0aWMgdm9pZCByZXBhdGNoU2xvd1BhdGhDYWxsKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlD
KCkpIHsKKyAgICAgICAgc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rp
b24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLm1fc2xvd1Bh
dGhDYWxsTG9jYXRpb24sIG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30KKworZW51bSBJbmxpbmVDYWNo
ZUFjdGlvbiB7CisgICAgR2l2ZVVwT25DYWNoZSwKKyAgICBSZXRyeUNhY2hlTGF0ZXIsCisgICAg
QXR0ZW1wdFRvQ2FjaGUKK307CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JD
ZWxsKFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y2VsbC0+c3RydWN0dXJlKHZtKTsKKworICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3RydWN0dXJl
LT50eXBlSW5mbygpOworICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoc3RydWN0dXJlLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0Jl
ZW5GbGF0dGVuZWRCZWZvcmUoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICAvLyBGbGF0dGVuaW5nIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgb2Zmc2V0LCBzbyBy
ZXR1cm4gZWFybHkgZm9yIGFub3RoZXIgdHJ5LgorICAgICAgICBhc09iamVjdChjZWxsKS0+Zmxh
dHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIHJldHVybiBB
dHRlbXB0VG9DYWNoZTsKK30KKworc3RhdGljIGJvb2wgZm9yY2VJQ0ZhaWx1cmUoSlNHbG9iYWxP
YmplY3QqKQoreworICAgIHJldHVybiBPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpOworfQorCitB
TFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVl
ZGVkKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCYgcmVzdWx0KQoreworICAgIGlmIChyZXN1bHQu
c2hvdWxkUmVzZXRTdHViQW5kRmlyZVdhdGNocG9pbnRzKCkpIHsKKyAgICAgICAgcmVzdWx0LmZp
cmVXYXRjaHBvaW50cyh2bSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAgICAg
c3R1YkluZm8ucmVzZXQobG9ja2VyLCBjb2RlQmxvY2spOworICAgICAgICB9CisgICAgfQorfQor
CitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXpp
bmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgewor
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2lu
ZDo6VHJ5QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsK
KyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5k
OjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZE9wdGltaXplOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCit7Cisg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25HZXRCeUlkOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXM7CisgICAgY2FzZSBHZXRC
eUtpbmQ6OlRyeUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkOworICAg
IGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0
QnlJZERpcmVjdDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25HZXRCeVZhbEdlbmVyaWM7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1l
OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWU7CisgICAgY2FzZSBHZXRC
eUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lQnlJZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJl
c3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9y
Y2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBm
b3IgaW1tZWRpYXRlcy4KKyAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgY29uc3QgYm9vbCBpc1ByaXZhdGUgPSBraW5kID09
IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUgfHwga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1l
QnlJZDsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBp
ZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgeworICAgICAgICAg
ICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAm
JiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpz
Q2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgeworCisgICAgICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAor
ICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVu
Z3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29k
ZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2lu
ZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChs
b2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6U3RyaW5nTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChE
aXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRz
Kj4odm0sIGJhc2VDZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3Zl
cnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2Fk
ISBHdWFyZGluZworICAgICAgICAgICAgICAgIC8vIHRoaXMgd2l0aCBzdWNoIGEgY2hlY2sgZW5h
YmxlcyB1cyB0byBhZGQgYW4gSUMgY2FzZSBmb3IgdGhhdCBsb2FkIGlmIG5lZWRlZC4KKyAgICAg
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKKyAgICAgICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxT
Y29wZWRBcmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgLy8gRGl0
dG8uCisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCisg
ICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgQWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNT
eW1ib2woKSAmJiBiYXNlQ2VsbC0+aW5oZXJpdHM8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+KHZt
KSAmJiAhc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vZHVsZU5hbWVz
cGFjZVNsb3QgPSBzbG90Lm1vZHVsZU5hbWVzcGFjZVNsb3QoKSkKKyAgICAgICAgICAgICAgICBu
ZXdDYXNlID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IHByb3BlcnR5TmFtZSwganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oYmFzZUNlbGwp
LCBtb2R1bGVOYW1lc3BhY2VTbG90LT5lbnZpcm9ubWVudCwgU2NvcGVPZmZzZXQobW9kdWxlTmFt
ZXNwYWNlU2xvdC0+c2NvcGVPZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKCFuZXdDYXNlKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAh
c2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisK
KyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7
CisKKyAgICAgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOworICAgICAg
ICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQ
cm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAgICAgICAgYmFzZUNlbGwgPSBi
YXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gYmFzZUNlbGwt
PnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRy
dWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlv
biA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKKyAgICAgICAgICAgIGlmIChhY3Rpb24g
IT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAg
ICAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICYmIHNs
b3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2VWYWx1ZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQor
ICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKQorICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7CisgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5l
KSB7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gs
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5
TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5
RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJ
ZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwg
cHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZlB0
cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisKKyAgICAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNl
dCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ3VzdG9t
KCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgIC8v
IFRvIGNhY2hlIHNlbGYgY3VzdG9tcywgd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMgYmVj
YXVzZSB3ZQorICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1
c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlCisgICAgICAgICAgICAgICAgLy8gY29u
c3RhbnQgZnVuY3Rpb24gcG9pbnRlci4KKworICAgICAgICAgICAgICAgIGlmICghcHJlcGFyZUNo
YWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIHNsb3Quc2xvdEJhc2UoKSwgc2xvdC5zbG90QmFz
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNl
KCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVu
RmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFy
eVN0cnVjdHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsgLy8gV2UgbWF5IGhhdmUgY2hhbmdlZCBw
cm9wZXJ0eSBvZmZzZXRzLgorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
IChzbG90LmlzVW5zZXQoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGtpbmQgaXMgR2V0
QnlLaW5kOjpCeUlkRGlyZWN0IG9yIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUsIHdlIGRvIG5vdCBu
ZWVkIHRvIGludmVzdGlnYXRlIHByb3RvdHlwZSBjaGFpbnMgZnVydGhlci4KKyAgICAgICAgICAg
ICAgICAvLyBDYWNoZWFiaWxpdHkganVzdCBkZXBlbmRzIG9uIHRoZSBoZWFkIHN0cnVjdHVyZS4K
KyAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3QgJiYgIWlz
UHJpdmF0ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFy
ZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1
cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJv
cGVydHkgb2Zmc2V0cyBtYXkgaGF2ZSBjaGFuZ2VkIGR1ZSB0byBmbGF0dGVuaW5nLiBXZSdsbCBj
YWNoZSBsYXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3Rv
dHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxP
YmplY3QsIGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJv
dG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3Ry
dWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gb2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZvciBmYXN0
ZXIgYWNjZXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0
aGlzIGBpZmAgc2hvdWxkIGJlIGluc2lkZSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eUJs
YWguCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg1MjE1CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5p
c1Vuc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUudWlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RC
YXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0g
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZS51aWQoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGdldHRlciA9IG51bGxwdHI7CisgICAgICAg
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgIGdldHRl
ciA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBzbG90LmdldHRlclNldHRlcigpLT5n
ZXR0ZXIoKSk7CisKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3Rh
dGlvbj4gZG9tQXR0cmlidXRlOworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSAmJiBzbG90LmRvbUF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0
ZSA9IHNsb3QuZG9tQXR0cmlidXRlKCk7CisKKyAgICAgICAgICAgIGlmIChraW5kID09IEdldEJ5
S2luZDo6VHJ5QnlJZCkgeworICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
dHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNj
ZXNzQ2FzZTo6TWlzczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXRHZXR0
ZXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJs
ZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qu
d2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKHN0dWJJbmZvLCBnZXR0
ZXIsIHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNpY0dldHRl
ckFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBnZXR0ZXIsIFdURk1vdmUocHJv
dG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChpc1ByaXZhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNs
b3QuaXNVbnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaXNQcm94
eSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2Rl
QmxvY2ssIEFjY2Vzc0Nhc2U6OkxvYWQsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIGlzUHJveHksIHNsb3Qud2F0
Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQo
KSkgeworICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6
Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNVbnNldCgpID8gQWNjZXNzQ2FzZTo6TWlzcyA6
IEFjY2Vzc0Nhc2U6OkxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUs
IG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNs
b3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSB0eXBlOworICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdl
dHRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRl
cjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCisgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0
b21WYWx1ZUdldHRlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtp
bmQ6OkJ5SWRXaXRoVGhpcyAmJiB0eXBlID09IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0
dGVyICYmIGRvbUF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxv
YWRUYXJnZXRGcm9tUHJveHksCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90LndhdGNocG9p
bnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNj
ZXNzb3JQdHJUYWc+KHNsb3QuY3VzdG9tR2V0dGVyKCkpIDogbnVsbHB0ciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LnNsb3RCYXNlKCkg
IT0gYmFzZVZhbHVlID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbUF0dHJpYnV0ZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExP
R19JQygoSUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JO
dWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xv
dC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZv
LmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6
OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlm
IChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSks
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6
OkJ5SWRXaXRoVGhpczoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAg
ICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6CisgICAgICAgICAgICBjYXNlIEdl
dEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAg
ICAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgICAgICAgICAgSW5saW5l
QWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5l
ZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwor
fQorCit2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZUdldEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1Yklu
Zm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKK30K
KworCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheUdldEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorewor
ICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKworICAgIGlmICghaW5kZXguaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNo
ZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwor
CisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBB
Y2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChiYXNlLT50eXBl
KCkgPT0gRGlyZWN0QXJndW1lbnRzVHlwZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkRGlyZWN0QXJndW1lbnRzTG9hZDsKKyAgICAgICAgZWxzZSBpZiAoYmFz
ZS0+dHlwZSgpID09IFNjb3BlZEFyZ3VtZW50c1R5cGUpCisgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFNjb3BlZEFyZ3VtZW50c0xvYWQ7CisgICAgICAgIGVsc2Ug
aWYgKGJhc2UtPnR5cGUoKSA9PSBTdHJpbmdUeXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOworICAgICAgICBlbHNlIGlmIChpc1R5cGVk
VmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4TG9hZDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9h
ZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJh
eSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAg
ICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYg
SW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsK
KyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVMb2FkOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzTG9hZDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VMb2Fk
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAg
IGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2
bSksIElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVl
ZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQu
c2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQor
Cit2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheUdldEJ5VmFs
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8pID09IEdpdmVV
cE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQ
cm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkK
K3sKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7
CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERp
cmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1v
ZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVG
aWVsZFN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6
CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAg
ICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoK
KyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAg
ICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0
S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkR2VuZXJpYzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2lu
ZCBwdXRLaW5kKQoreworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERl
ZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAg
ICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHN3aXRj
aCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBB
U1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRl
RmllbGRPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8g
TWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0
S2luZCBwdXRLaW5kKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICB7CisgICAgICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVj
dCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAg
IGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgIAorICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiAhc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCisgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHRyeSB0byBkbyBzb21ldGhpbmcgc21hcnRlciBoZXJlLi4uCisgICAgICAgIGlmIChpc0Nv
cHlPbldyaXRlKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKQorICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIC8vIFdlIGNhbid0IGVuZCB1cCBzdG9yaW5nIHRv
IGEgQ29XIG9uIHRoZSBwcm90b3R5cGUgc2luY2UgaXQgc2hvdWxkbid0IG93biBwcm9wZXJ0aWVz
LgorICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc2xvdC5iYXNlKCktPmluZGV4aW5nTW9k
ZSgpKSk7CisKKyAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAg
IEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgYm9vbCBp
c1Byb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3
YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5
Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxs
OworICAgICAgICAgICAgaXNQcm94eSA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFdlIGN1cnJl
bnRseSBvbmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHku
IFdlIGRvbid0CisgICAgICAgICAgICAvLyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2Jh
bCBvYmplY3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgICAg
ICAvLyBpbiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGJvb2wgaXND
YWNoZWFibGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBlKCkgPT0g
UHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHx8IHNs
b3QuaXNDYWNoZWFibGVTZXR0ZXIoKQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFi
bGVDdXN0b20oKTsKKyAgICAgICAgICAgIGlmICghaXNDYWNoZWFibGVQcm94eSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c1Byb3h5ICYmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCB8fCBw
dXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkpCisgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3
Q2FzZTsKKworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXND
YWNoZWFibGVQdXQoKSkgeworICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3Bl
cnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNz
ZXJ0IGhlbHBzIGNhdGNoIGJ1Z3MgaWYgd2UgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBkaXNhYmxl
IGNhY2hpbmcKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHRyYW5zaXRpb24gdGhlbiBzdG9y
ZSB0byBhbiBleGlzdGluZyBwcm9wZXJ0eS4gVGhpcyBpcyBjb21tb24gYW1vbmcKKyAgICAgICAg
ICAgICAgICAvLyBwYXRocyB0aGF0IHJlaWZ5IGxhenkgcHJvcGVydGllcy4gSWYgd2UgcmVpZnkg
YSBsYXp5IHByb3BlcnR5IGFuZCBmb3JnZXQKKyAgICAgICAgICAgICAgICAvLyB0byBkaXNhYmxl
IGNhY2hpbmcsIHdlIG1heSBjb21lIGRvd24gdGhpcyBwYXRoLiBUaGUgUmVwbGFjZSBJQyBkb2Vz
IG5vdAorICAgICAgICAgICAgICAgIC8vIGtub3cgaG93IHRvIG1vZGVsIHRoZXNlIHR5cGVzIG9m
IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAob3IgYW55IHN0cnVjdHVyZQorICAgICAgICAgICAgICAg
IC8vIHRyYW5zaXRpb24gZm9yIHRoYXQgbWF0dGVyKS4KKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gb2xkU3RydWN0dXJl
KTsKKworICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxh
Y2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKQorICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgeworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5m
bywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVP
cHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIsIGNv
ZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5l
d0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNz
Q2FzZTo6UmVwbGFjZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvbGRTdHJ1
Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIGlzUHJveHkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWlzUHJveHkpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5
KTsKKworICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBvbGQgc3RydWN0dXJlIGlzIGRpY3Rpb25hcnksIGl0IG1lYW5zIHRoYXQgdGhp
cyBpcyBvbmUtb24tb25lIGJldHdlZW4gYW4gb2JqZWN0IGFuZCBhIHN0cnVjdHVyZS4KKyAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIE5ld1Byb3BlcnR5IG9wZXJhdGlvbiwgZ2VuZXJhdGlu
ZyBJQyBmb3IgdGhpcyBkb2VzIG5vdCBvZmZlciBhbnkgYmVuZWZpdCBiZWNhdXNlIHRoaXMgdHJh
bnNpdGlvbiBuZXZlciBoYXBwZW5zIGFnYWluLgorICAgICAgICAgICAgICAgIGlmIChvbGRTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOworCisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVy
ZSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
Ok5vbmUpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFu
ZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBK
U09iamVjdDo6cHV0IGlzIG92ZXJyaWRkZW4gYnkgVXNlck9iamVjdCwgVXNlck9iamVjdDo6cHV0
IHBlcmZvcm1zIHNpZGUtZWZmZWN0IG9uIEpTT2JqZWN0OjpwdXQsIGFuZCBpdCBuZWdsZWN0cyB0
byBtYXJrIHRoZSBQdXRQcm9wZXJ0eVNsb3QgYXMgbm9uLWNhY2hhZWJsZSwKKyAgICAgICAgICAg
ICAgICAvLyB0aGVuIGFyYml0cmFyeSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgY2FuIGhhcHBlbiBk
dXJpbmcgdGhlIHB1dCBvcGVyYXRpb24sIGFuZCB0aGlzIGdlbmVyYXRlcyB3cm9uZyB0cmFuc2l0
aW9uIGluZm9ybWF0aW9uIGhlcmUgYXMgaWYgb2xkU3RydWN0dXJlIC0+IG5ld1N0cnVjdHVyZS4K
KyAgICAgICAgICAgICAgICAvLyBJbiByZWFsaXR5LCB0aGUgdHJhbnNpdGlvbiBpcyBvbGRTdHJ1
Y3R1cmUgLT4gc29tZXRoaW5nIHVua25vd24gc3RydWN0dXJlcyAtPiBiYXNlVmFsdWUncyBzdHJ1
Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gVG8gZ3VhcmQgYWdhaW5zdCB0aGUgZW1iZWRkZXIn
cyBwb3RlbnRpYWxseSBpbmNvcnJlY3QgVXNlck9iamVjdDo6cHV0IGltcGxlbWVudGF0aW9uLCB3
ZSBzaG91bGQgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uIGFuZCBpZiBmb3VuZCwgYW5kIGdpdmUg
dXAgb24gY2FjaGluZyB0aGUgcHV0LgorICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gbmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pICE9IG5ld1N0cnVjdHVyZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAg
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4g
cHJvdG90eXBlQWNjZXNzQ2hhaW47CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1
dEtpbmQ6Ok5vdERpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVz
ID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIGlm
IChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGds
b2JhbE9iamVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkgeworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaWRlbnQuaXNQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCBjb2RlQmxv
Y2ssIGdsb2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlVHJhbnNpdGlvbih2bSwgY29k
ZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIHN0dWJJbmZvKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CisgICAgICAgICAgICBpZiAoc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9B
Y2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisKKyAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZSBhIHNlbGYgY3VzdG9tLCBzaW5jZSB3ZSBt
dXN0IGRpc2FsbG93IGRpY3Rpb25hcmllcworICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2Ug
bmVlZCB0byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9tIGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNo
ZSB0aGUgY29uc3RhbnQKKyAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBwb2ludGVyLgorICAg
ICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGds
b2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KworICAgICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0No
YWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0No
YWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0
dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVh
dGUoCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNDdXN0b21BY2Nl
c3NvcigpID8gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXIgOiBBY2Nlc3NDYXNlOjpD
dXN0b21WYWx1ZVNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAg
ICAgICAgICAgIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbiksIGlzUHJveHksIHNsb3QuY3VzdG9tU2V0dGVyKCkucmV0YWdnZWQ8Q3VzdG9t
QWNjZXNzb3JQdHJUYWc+KCksIHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3QuYmFzZSgp
IDogbnVsbHB0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VS
VChzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpOworICAgICAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVj
dCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNo
ZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAg
ICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3ND
aGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBiYXNl
Q2VsbC0+c3RydWN0dXJlKHZtKSktPmdldCh2bSwgaWRlbnQuaW1wbCgpLCBhdHRyaWJ1dGVzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpIHx8ICEo
YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWlu
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBzbG90
LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6
OkFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRp
dGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFj
Y2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFj
Y2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1v
ZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlO
YW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNv
bWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0
aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBi
YXNlVmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmNvZGUoKSk7CisKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
aXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9j
aywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZl
VXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hQdXRCeShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBi
YXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgCisgICAg
aWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xk
U3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtp
bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihzbG90LCBwdXRC
eUtpbmQsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
QXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCkKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIo
KSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAg
IHsKKyAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAg
IEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRW
aWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBl
KSB7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDhDbGFtcGVkU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50
MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZs
b2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1Vp
bnQ2NEFycmF5IGluIElDCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAg
ICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdU
eXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdT
aGFwZSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFw
ZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5
U3RvcmFnZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJlc3VsdCA9IHN0
dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNN
QU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVk
U29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VX
aXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOwor
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRj
aHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hl
IDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJh
c2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBw
dXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8sIHB1dEtp
bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYykpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxl
dGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
RGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVzdWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIGlmIChm
b3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7CisgICAgICAgIGlmICghYmFz
ZVZhbHVlLmlzT2JqZWN0KCkgfHwgIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpIHx8IG9sZFN0cnVjdHVyZS0+aXNQcm94eSgpKQorICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlRGVsZXRlKCkp
CisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBpZiAoYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAg
IGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5oYXNCZWVuRmxhdHRlbmVkQmVm
b3JlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsdWUpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2
bSk7CisgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNl
OworCisgICAgICAgIGlmIChzbG90LmlzRGVsZXRlSGl0KCkpIHsKKyAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG5ld09mZnNldCA9IGludmFsaWRPZmZzZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJv
bUV4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LnVpZCgpLCBuZXdPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIGlmICghbmV3
U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgfHwgbmV3U3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgICAgIEFTU0VSVChuZXdPZmZzZXQgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0
dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkg
PT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOworICAgICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZE9m
ZnNldChuZXdPZmZzZXQpKTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVh
dGVEZWxldGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBuZXdPZmZzZXQsIG9sZFN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzTm9uY29uZmln
dXJhYmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChlY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0ZU5vbkNv
bmZpZ3VyYWJsZSwgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsg
fSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVNaXNzLCBwcm9w
ZXJ0eU5hbWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwgeyB9LCBudWxscHRyKTsKKwor
ICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGVjbWFNb2RlLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkp
OworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVy
dHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIERlbEJ5S2luZCBraW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworCisgICAgaWYgKHRyeUNhY2hlRGVsZXRlQnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIHNsb3QsIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHN0
dWJJbmZvLCBraW5kLCBlY21hTW9kZSkgPT0gR2l2ZVVwT25DYWNoZSkgeworICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhHZW5lcmljLCBiYXNlVmFsdWUuY2xhc3NJbmZv
T3JOdWxsKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3Bl
cnR5TmFtZS51aWQoKSkpKTsKKyAgICAgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQor
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVy
YXRpb25EZWxldGVCeUlkR2VuZXJpYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxH
ZW5lcmljKTsKKyAgICB9Cit9CisKK2lubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQoreworICAg
IHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVy
biBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKKyAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICBjYXNlIEluQnlLaW5k
OjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lu
bGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY0luQnlG
dW5jdGlvbihJbkJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2Ug
SW5CeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5SWRHZW5lcmljOwor
ICAgIGNhc2UgSW5CeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeVZh
bEdlbmVyaWM7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIHJldHVy
biBvcGVyYXRpb25IYXNQcml2YXRlTmFtZUdlbmVyaWM7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZUluQnkoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwK
KyAgICBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQo
KSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9i
amVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpIHx8ICghd2FzRm91bmQgJiYgIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGVGb3JBYnNlbmNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIGlm
ICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICh3YXNGb3VuZCkgeworICAg
ICAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFz
ZSk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNj
ZXNzLgorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6
VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAg
ICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCisgICAgICAgICAgICAgICAgJiYg
IXNsb3Qud2F0Y2hwb2ludFNldCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVl
ZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5C
eVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNh
Y2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2UsIHNs
b3QpOworICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1
cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQ
cm90bykgeworICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQ
cm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNz
Q2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5
TmFtZS51aWQoKSkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRy
OworICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50Lmlt
cGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgY29u
ZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmco
Z2xvYmFsT2JqZWN0LCBiYXNlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmICghY2FjaGVTdGF0
dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAg
IGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgIHByb3Rv
dHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxP
YmplY3QsIGJhc2UsIHNsb3QpOworICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNz
Q2hhaW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgd2Fz
Rm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgcHJvcGVydHlO
YW1lLCB3YXNGb3VuZCA/IHNsb3QuY2FjaGVkT2Zmc2V0KCkgOiBpbnZhbGlkT2Zmc2V0LCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworCisg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUo
bmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewor
ICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgaWYgKGtp
bmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1Yklu
Zm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdp
dmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCBy
ZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworCisgICAgaWYgKHRyeUNhY2hlSW5CeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZU9iamVjdCwgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRo
R2VuZXJpYywgYmFzZU9iamVjdC0+Y2xhc3NJbmZvKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5
RnVuY3Rpb24oa2luZCkpOworICAgIH0KK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFu
ZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBi
cmFuZElELnVpZCgpKTsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1
cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKworICAg
ICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsK
KyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVy
biBhY3Rpb247CisKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7CisgICAgICAg
IExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
LCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vz
c0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBicmFuZElELCBpbnZhbGlkT2Zmc2V0
LCBzdHJ1Y3R1cmUsIHsgfSwgeyB9KTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRB
Y2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJp
Y3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5n
ZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVw
bGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVy
dHkpKTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAg
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
aXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9j
aywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZl
VXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hIYXNQcml2YXRl
QnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIGJvb2wg
d2FzRm91bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisKKyAgICBpZiAodHJ5Q2FjaGVIYXNQ
cml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQs
IHdhc0ZvdW5kLCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRH
ZW5lcmljKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQ2hlY2tQcml2
YXRlQnJhbmQoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsCisg
ICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisK
KyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkp
CisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2FjaGVB
Y3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rp
b24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAg
ICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkNoZWNrUHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVDaGVja1ByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBi
cmFuZElELCBzdHJ1Y3R1cmUpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vz
c0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgp
LCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6Q2hlY2tQcml2
YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBp
c0Jhc2VQcm9wZXJ0eSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29k
ZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5m
bywgY29kZUJsb2NrLCByZXN1bHQpOworCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBO
b3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRj
aENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBi
cmFuZElELCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlQ2hlY2tQ
cml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQs
IHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYyk7
Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVNldFByaXZhdGVCcmFuZCgK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIGJyYW5kSUQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJl
c3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJh
bmRJRC51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJl
KGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOworCisgICAgICAgIGlmIChvbGRTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKKworICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZt
LCBiYXNlKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAg
ICAgIHJldHVybiBhY3Rpb247CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6c2V0QnJhbmRUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJl
Q29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgYnJhbmRJRC51aWQoKSk7CisgICAgICAgIGlmICgh
bmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAg
ICAgaWYgKG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
ID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRp
b25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlNldEJyYW5kKTsKKyAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgIAorICAgICAgICBib29sIGlzQmFzZVBy
b3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRB
ZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJv
cGVydHkpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmNyZWF0ZVNldFByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElELCBvbGRTdHJ1Y3R1
cmUsIG5ld1N0cnVjdHVyZSk7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNz
Q2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCks
IGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJh
dGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRl
QnJhbmRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBp
c0Jhc2VQcm9wZXJ0eSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVk
KHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwor
fQorCit2b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsICBicmFuZElELCBzdHVi
SW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRHZW5lcmljKTsKK30KKwor
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5zdGFuY2VPZigKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1
ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sCisgICAgYm9vbCB3YXNGb3VuZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlQodmFsdWVWYWx1ZS5pc0NlbGwoKSk7IC8vIHNob3VsZENvbnNpZGVyQ2FjaGluZyBy
ZWplY3RzIG5vbi1jZWxscy4KKyAgICAKKyAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2Jq
ZWN0KSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgCisgICAgeworICAgICAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7
CisgICAgICAgIAorICAgICAgICBKU0NlbGwqIHZhbHVlID0gdmFsdWVWYWx1ZS5hc0NlbGwoKTsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS0+c3RydWN0dXJlKHZtKTsKKyAg
ICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3RvdHlwZVZhbHVlKTsKKyAg
ICAgICAgaWYgKHByb3RvdHlwZSkgeworICAgICAgICAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEpT
T2JqZWN0Kj4odm0sIHZhbHVlKSkgeworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5j
ZU9mQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlzcywgc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCgpLAorICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChzdHJ1Y3R1cmUtPnByb3RvdHlwZVF1ZXJpZXNBcmVDYWNoZWFibGUoKSkg
eworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUZWFjaCB0aGlzIHRvIGRvIHBvbHkgcHJvdG8u
CisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NTY2MworICAgICAgICAgICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFs
T2JqZWN0LCB2YWx1ZSwgd2FzRm91bmQgPyBwcm90b3R5cGUgOiBudWxscHRyKTsKKyAgICAgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9mKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvdG90eXBlLCB3YXNGb3VuZCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICB3
YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZIaXQgOiBBY2Nlc3NDYXNlOjpJbnN0YW5j
ZU9mTWlzcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LCBwcm90b3R5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKCFuZXdDYXNlKQorICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9m
R2VuZXJpYywgQ2FjaGVhYmxlSWRlbnRpZmllcigpKTsKKyAgICAgICAgCisgICAgICAgIExPR19J
QygoSUNFdmVudDo6SW5zdGFuY2VPZkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIElkZW50aWZpZXIoKSkpOworICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8u
YWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6
c3RyaWN0KCksIG51bGxwdHIsIFdURk1vdmUobmV3Q2FzZSkpOworICAgICAgICAKKyAgICAgICAg
aWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6Okluc3RhbmNlT2ZSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5l
ZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4g
cmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRl
cjsKK30KKwordm9pZCByZXBhdGNoSW5zdGFuY2VPZigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1Zh
bHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgYm9v
bCB3YXNGb3VuZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CisgICAgaWYgKHRyeUNhY2hlSW5zdGFuY2VPZihnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgdmFsdWVWYWx1ZSwgcHJvdG90eXBlVmFsdWUsIHN0dWJJbmZvLCB3YXNGb3VuZCkgPT0gR2l2
ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7Cit9CisKK3ZvaWQgbGlua0RpcmVjdENh
bGwoCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
LCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHVi
KCkpOworICAgIAorICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKKworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAK
KyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8u
c2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9j
ayo+KGNhbGxlZUNvZGVCbG9jaykpOworICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
Y2FsbGVyQ29kZUJsb2NrKSkKKyAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1
bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSks
ICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAi
LCBjb2RlUHRyLCAiXG4iKTsKKworICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0
KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKworICAgIGlmIChj
YWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2Fs
bChjYWxsRnJhbWUsICZjYWxsTGlua0luZm8pOworfQorCit2b2lkIGxpbmtTbG93Rm9yKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJs
b2NrKCk7CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIGxp
bmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOworfQorCitzdGF0aWMgdm9pZCBsaW5rVmlydHVh
bEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbykKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSgpOworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNv
ZGVCbG9jaygpOworCisgICAgZGF0YUxvZ0xuSWYoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNh
bGxlckNvZGVCbG9jayksCisgICAgICAgICJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCBGdWxs
Q29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCkpKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVh
bFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkpOwor
ICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBjYWxs
TGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOworfQorCituYW1lc3BhY2Ugeworc3RydWN0
IENhbGxUb0NvZGVQdHIgeworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworfTsKK30gLy8gYW5ub255
bW91cyBuYW1lc3BhY2UKKwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm8uYWxsb3dTdHVicygpKTsKKworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworCisgICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBsaW5rUG9seW1vcnBoaWNDYWxsLCB3
ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBHQy4KKyAgICAvLyBHQyBqZXR0aXNv
bnMgQ29kZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8gZXRjLiBhbmQgYnJlYWtzIGFzc3Vt
cHRpb24gZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2FsbC4KKyAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyR0NGb3JBV2hpbGUodm0pOworICAgIAorICAgIGlmICghbmV3VmFyaWFudCkgewor
ICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBj
ZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCisgICAgLy8gdGhpcyBmcm9tIFdhc20sIHdl
IGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNh
bGxlZSgpLmlzQ2VsbCgpKTsKKworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2Fs
bGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgIGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2ViQXNz
ZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKTsKKworICAgIC8vIFdl
YkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAg
SlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZy
YW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgQVNTRVJUKG93
bmVyKTsKKworICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OworICAgIGlmIChQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgIGxpc3Qg
PSBzdHViLT52YXJpYW50cygpOworICAgIGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBj
YWxsTGlua0luZm8uY2FsbGVlKCkpCisgICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3QgeyBD
YWxsVmFyaWFudChvbGRDYWxsZWUpIH07CisgICAgCisgICAgbGlzdCA9IHZhcmlhbnRMaXN0V2l0
aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNs
b3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCBhbGwgb2YgdGhlbSBhcyBj
bG9zdXJlIGNhbGxzLgorICAgIC8vIFRoaXMgbWFrZXMgc3dpdGNoaW5nIG9uIGNhbGxlZSBjaGVh
cGVyLiBJdCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0J3MgZWFzaWVyIG9uIHRoZSBERkc7
CisgICAgLy8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50IHRvIGRlYWwgd2l0aCBhIGNvbWJp
bmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNhbGxlZXMuCisgICAgYm9vbCBpc0Ns
b3N1cmVDYWxsID0gZmFsc2U7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkg
IHsKKyAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7CisgICAgICAgICAgICBs
aXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsKKyAgICAgICAgICAgIGlzQ2xvc3Vy
ZUNhbGwgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaWYgKGlzQ2xvc3VyZUNhbGwpCisgICAgICAgIGNhbGxMaW5rSW5mby5zZXRIYXNTZWVu
Q2xvc3VyZSgpOworICAgIAorICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2Fz
ZXM7CisgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7CisgICAgCisgICAgLy8gRmlndXJl
IG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDog
bGlzdCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgICAg
IGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFudC5leGVjdXRhYmxlKCktPmlzSG9z
dEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
dmFyaWFudC5leGVjdXRhYmxlKCk7CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAg
ICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGVpdGhlciBiZWNhdXNlIHdl
IGRvbid0IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBhcml0eSBtaXNtYXRjaCwKKyAgICAg
ICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlzIHdob2xlIHRoaW5nIHRv
IGJlIGEgdmlydHVhbCBjYWxsLgorICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2sgfHwgY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmlzVmFyYXJncygpKSB7
CisgICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJ
bmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7CisgICAgICAgIGlmIChpc0Nsb3N1
cmVDYWxsKSB7CisgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwu
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5MzExCisgICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1ZSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlv
biA9IHZhcmlhbnQuZnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQu
aW50ZXJuYWxGdW5jdGlvbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChBU1NFUlRfRU5B
QkxFRCkgeworICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMuY29udGFpbnMobmV3Q2FzZVZhbHVl
KSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9SOiBBdHRlbXB0IHRvIGFkZCBkdXBs
aWNhdGUgY2FzZSB2YWx1ZS5cbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4aXN0aW5n
IGNhc2UgdmFsdWVzOiAiKTsKKyAgICAgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7Cisg
ICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhc2VWYWx1ZXMpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8gYWRkOiAiLCBu
ZXdDYXNlVmFsdWUsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhbnQgbGlz
dDogIiwgbGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50LCBjb2RlQmxv
Y2spKTsKKyAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3Q2FzZVZhbHVlKTsKKyAgICB9Cisg
ICAgQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZhbHVlcy5zaXplKCkpOworCisgICAg
Ly8gSWYgd2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVzZSBhIG5vcm1hbCB2aXJ0dWFsIGNh
bGwuCisgICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplOworICAg
IGlmIChpc1dlYkFzc2VtYmx5KQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlz
dFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JXZWJB
c3NlbWJseVRvSlMoKTsKKyAgICBlbHNlIGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9
PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlh
bnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZv
clRvcFRpZXIoKTsKKyAgICBlbHNlCisgICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRM
aXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSgpOwor
CisgICAgLy8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQgb2YgY2FsbENhc2VzLnNpemUoKSBi
ZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBmb3Igbm93LgorICAgIGlmIChsaXN0
LnNpemUoKSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSkgeworICAgICAgICBs
aW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+IGNhbGxzKGNhbGxDYXNlcy5z
aXplKCkpOworICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBmYXN0Q291bnRzOworCisgICAgaWYg
KCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6
OnRvcFRpZXJKSVQoKSkgeworICAgICAgICBmYXN0Q291bnRzID0gbWFrZVVuaXF1ZUFycmF5PHVp
bnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgbWVtc2V0KGZhc3RDb3VudHMuZ2V0
KCksIDAsIGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICB9CisgICAg
CisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKTsKKworICAg
IGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRhSUMoKTsKKyAgICBDQ2FsbEhlbHBl
cnMgc3R1YkppdChjYWxsZXJDb2RlQmxvY2spOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxG
cmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOworICAgIGlmIChjYWxsTGlua0luZm8uZnJhbWVT
aHVmZmxlRGF0YSgpKSB7CisgICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgp
KTsKKyAgICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZXI+
KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKTsKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0
IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCisgICAgICAgIC8vIHVzZSB0aGUgYWRk
aXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPmFz
c3VtZUNhbGxlZUlzQ2VsbCgpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPmxvY2tH
UFIoY2FsbGVlR1BSKTsKKyAgICB9CisKKyAgICBHUFJSZWcgY29tcGFyaXNvblZhbHVlR1BSOwor
ICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAg
ICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBBc3NlbWJs
eUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOworCisgICAgR1BSUmVnIGZhc3RDb3Vu
dHNCYXNlR1BSOworICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICBmYXN0Q291bnRzQmFz
ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
ZmFzdENvdW50c0Jhc2VHUFIgPQorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RT
Y3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7
CisgICAgfQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFz
dENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKKworICAgIGlmICghZnJhbWVTaHVm
ZmxlciAmJiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIC8vIFdlIHN0cm9u
Z2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBjYWxsZWUgc2F2ZSByZWdpc3RlciBp
biB0aGUgc2xvdyBwYXRoLgorICAgICAgICBBU1NFUlQoIWNhbGxlckNvZGVCbG9jay0+Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOworICAgICAgICBzdHViSml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOworICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgIC8vIFZlcmlmeSB0
aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRj
aEdQUi4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFp
bENhbGwoKSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90
Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVl
R1BSKSk7CisjZWxzZQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0
aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorI2VuZGlmCisgICAgICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNh
bGwuCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90RnVuY3Rpb24o
Y2FsbGVlR1BSKSk7CisKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEo
KSksIGNvbXBhcmlzb25WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IHN0
dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNvbXBhcmlzb25WYWx1ZUdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsK
KyAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb21wYXJpc29u
VmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBoYXNFeGVj
dXRhYmxlLmxpbmsoJnN0dWJKaXQpOworICAgIH0KKworICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlT
d2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0
cik7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgIHdoaWxlIChiaW5hcnlT
d2l0Y2guYWR2YW5jZShzdHViSml0KSkgeworICAgICAgICBzaXplX3QgY2FzZUluZGV4ID0gYmlu
YXJ5U3dpdGNoLmNhc2VJbmRleCgpOworICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmlhbnQgdmFy
aWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKKyAgICAgICAgCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworICAgICAgICBp
ZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmV4
ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwgY2FsbExpbmtJbmZvLnNwZWNpYWxp
emF0aW9uS2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOworICAgICAgICAgICAgaWYgKCFjb2Rl
UHRyKQorICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVp
cmVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmludGVy
bmFsRnVuY3Rpb24oKSk7CisgICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxG
dW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoZmFzdENvdW50cykgeworICAgICAgICAgICAgc3R1YkppdC5hZGQzMigKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNhc2VJbmRleCAq
IHNpemVvZih1aW50MzJfdCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbmVlZHNEb25l
SnVtcCA9IGZhbHNlOworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikgeworICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+c25hcHNob3QoKSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBz
dHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgaWYgKGNhbGxMaW5rSW5mby5p
c1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOworICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFp
bENhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0RhdGFJQykKKyAg
ICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2Fs
bCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4
XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIG5lZWRzRG9uZUp1
bXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhbGxzW2Nhc2VJ
bmRleF0uY29kZVB0ciA9IGNvZGVQdHI7CisgICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0
dWJKaXQuanVtcCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzbG93UGF0aC5saW5r
KCZzdHViSml0KTsKKyAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0
KTsKKworICAgIGlmIChmcmFtZVNodWZmbGVyKSB7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnJl
bGVhc2VHUFIoY2FsbGVlR1BSKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihj
b21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZh
c3RDb3VudHNCYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBmcmFtZVNo
dWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDApKTsKKyNlbHNlCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxl
ZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CisjZW5kaWYKKyAgICAg
ICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgfQor
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0
KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIDEuIElm
IGl0IGlzIG5vdCBEYXRhSUMsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVM
b2NhdGlvbi4KKyAgICAvLyAyLiBJZiBpdCBpcyB0YWlsLWNhbGwsIGxpbmtSZWdpc3RlciBpcyBu
b3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbiBmb3Igc2xvdy1jYWxsIGNhc2UuCisgICAgLy8g
VGh1cyB3ZSBuZWVkIHRvIHB1dCBpdCBmb3IgdGhlIHNsb3ctcGF0aCBjYWxsLgorICAgIGlmICgh
aXNEYXRhSUMpIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVz
cygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBB
U1NFUlQoaXNEYXRhSUMpOworICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkg
eworICAgICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2
bS5nZXRDVElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5jb2RlKCkudW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICAgICAg
c3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0
dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJK
aXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKKyAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewor
ICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5z
aXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29k
ZVB0ciA6IGNhbGxzKSB7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgICAgIC8vIFRhaWwgY2Fs
bCBzcGVjaWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdo
ZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJlc3MKKyAgICAgICAgLy8gd2l0aCBhIG5v
bi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNz
IHdpdGggYSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KKyAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0g
Y2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOwor
ICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRy
LmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlv
blB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQpKSk7CisjZWxzZQorICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0
clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAo
IWRvbmUuZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOworICAgIH0K
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRy
VGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7CisgICAgCisgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAg
ICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcs
CisgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50
ICVwLCB0YXJnZXRzICVzIiwKKyAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFz
c2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5m
by5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHRv
Q1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAorICAgICAgICB2bSwgb3duZXIs
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCisgICAg
ICAgIFdURk1vdmUoZmFzdENvdW50cykpKTsKKworICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBh
dGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxsCisgICAgLy8gcmVhY2hhYmxl
IG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKKyAgICAvLyB0
cmlnZ2VyIHRoZSBzbG93IHBhdGgKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsK
KworICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0
IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCisgICAgLy8gdGhh
dCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4KKyAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZN
b3ZlKHN0dWJSb3V0aW5lKSk7CisgICAgCisgICAgLy8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxv
bmdlciBoYXMgYSBjYWxsIGNhY2hlIGFwYXJ0IGZyb20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3Jw
aGljIGNhbGwKKyAgICAvLyBzdHViLgorICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkK
KyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2b2lkIHJlc2V0R2V0QnkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5k
IGtpbmQpCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBh
cHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJ
ZFdpdGhUaGlzOgorICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgIGNhc2UgR2V0QnlL
aW5kOjpCeUlkRGlyZWN0OgorICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Cisg
ICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKKyAg
ICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVz
ZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJ
bmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtp
bmQpCit7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlv
bjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAg
ICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rp
b24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChj
b2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNl
dFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
KTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0g
ZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5j
dGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25U
eXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCisg
ICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERl
ZmluZVByaXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXpl
OworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKwor
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVu
Y3Rpb24pOworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgor
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6Cisg
ICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
Cit2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQpCit7CisgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5k
OjpCeUlkKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CisgICAgZWxzZQorICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUpOworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKK30KKwordm9pZCByZXNldEluQnko
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtp
bmQga2luZCkKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihraW5kKSk7CisgICAgaWYgKGtpbmQg
PT0gSW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1w
SW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgZWxzZQorICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFu
ZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJ
bnN0YW5jZU9mKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKK30K
Kwordm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAg
ICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzYTAzNjUzMjZhYmZiZWRlZTA1NzU4OWM0NTQwOWIyZWIz
NjU4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVwYXRjaC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhY2hlYWJs
ZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgorI2luY2x1ZGUgIlB1dEtp
bmQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCitl
bnVtIGNsYXNzIEdldEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKKyAgICBUcnlCeUlk
LAorICAgIEJ5SWRXaXRoVGhpcywKKyAgICBCeUlkRGlyZWN0LAorICAgIFByaXZhdGVOYW1lLAor
ICAgIFByaXZhdGVOYW1lQnlJZCwKK307CisKK2VudW0gY2xhc3MgUHV0QnlLaW5kIHsKKyAgICBC
eUlkLAorICAgIEJ5VmFsLAorfTsKKworZW51bSBjbGFzcyBEZWxCeUtpbmQgeworICAgIEJ5SWQs
CisgICAgQnlWYWwKK307CisKK2VudW0gY2xhc3MgSW5CeUtpbmQgeworICAgIEJ5SWQsCisgICAg
QnlWYWwsCisgICAgUHJpdmF0ZU5hbWUKK307CisKK3ZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgs
IFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCos
IENvZGVCbG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5
UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFs
dWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9pZCBy
ZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1
cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hEZWxldGVCeShK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUs
IFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVs
QnlLaW5kLCBFQ01BTW9kZSk7Cit2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBj
b25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQg
cmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2Jq
ZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJ
bmZvJik7Cit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENv
ZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKK3ZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0
dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBD
b2RlQmxvY2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1
YkluZm8mLCBib29sIHdhc0ZvdW5kKTsKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENh
bGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RDYWxs
KENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYpOwordm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7Cit2b2lkIGxp
bmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0lu
Zm8mLCBDYWxsVmFyaWFudCk7Cit2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBHZXRCeUtpbmQpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKK3ZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7Cit2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQgcmVzZXRIYXNQcml2YXRlQnJh
bmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRJbnN0YW5jZU9m
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0Q2hlY2tQcml2YXRl
QnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRTZXRQcml2
YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZnRsVGh1bmtB
d2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0
clRhZz4sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZN
JiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqIGNhbGxlZSk7CisKKworfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVwYXRjaElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNo
SW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlZmU3YjFiMzM3NjRiZGY0MmIyZTRmMDJkNGRmMGNkOWU4
MWM0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVwYXRjaElubGluZXMuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVwYXRj
aC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0
cik7CisKKyAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2Rl
Rm9yQ2FsbCkgeworICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIGNhbGxl
ZSk7CisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7
CisKKyAgICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2ZSkg
eworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJh
bWUpOworICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUp
KTsKKyAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxl
ZUZyYW1lKTsKKyAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAg
ICAgICAgICAgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxP
YmplY3QsIGNhbGxlZSkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAg
ICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVw
VGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKworICAgIGF1dG8gY29uc3RydWN0RGF0
YSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNhbGxlZSk7CisgICAgQVNTRVJUKGNvbnN0cnVjdERh
dGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgaWYgKGNvbnN0cnVjdERhdGEu
dHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgY2FsbGVlRnJhbWUtPnNl
dENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0
dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUp
LT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAgICAgIERpc2FsbG93R0MgZGlz
YWxsb3dHQzsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElU
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6OmdldEhv
c3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgIH0KKworICAgIEFT
U0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVy
cm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAg
ICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBU
aGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9y
KENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
Y2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXph
dGlvbktpbmQoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNEaXJlY3QoKSk7CisK
KyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFs
dWVDYWxsZWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5j
dGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7Cisg
ICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5h
bEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVu
Y3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFj
b2RlUHRyKTsKKworICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCisg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpj
YWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOworCisgICAg
ICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWls
ID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3Qs
IGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAg
ICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rp
b25DZWxsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsK
KyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwor
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGlmIChleGVjdXRhYmxlLT5pc0hv
c3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwg
a2luZCwgY2FsbGVlKTsKKyAgICAgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgY29kZVB0
ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxl
ID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisKKyAgICAg
ICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7CisgICAgICAgICAgICB2b2lk
KiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVj
dXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29u
c3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7
CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKKyAgICAgICAgfQor
CisgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVz
c09mQ29kZUJsb2NrKCk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4
ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29k
ZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFu
ZGxlVGhyb3dFeGNlcHRpb24oKSk7CisKKyAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Ns
b3Q7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworCisgICAgICAgIEFyaXR5Q2hlY2tNb2Rl
IGFyaXR5OworICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8
fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hl
Y2tBcml0eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90
UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3Ioa2luZCwgYXJpdHkpOworICAgIH0KKworICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVu
T25jZSgpKQorICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKKyAgICBlbHNlCisgICAg
ICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBj
b2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExp
bmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtl
ZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0
dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZy
YW1lLT5jYWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5k
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKwor
ICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1
ZUNhbGxlZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxs
ZWVBc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewor
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFz
VmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQp
OworICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7CisgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZy
YW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwp
OworICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7CisgICAg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAg
IGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKKyAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKworICAgICAgICBhdXRvIGhhbmRsZVRo
cm93RXhjZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0g
dm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVj
dEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKKyAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOworICAgICAgICAgICAg
cmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2Rl
QmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygp
OworICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rp
b25FeGVjdXRhYmxlPih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNl
cHRpb24oKSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQorICAgIHJldHVy
biBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigKKyAgICAgICAga2luZCwg
TXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/
IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAppbmRleCAwZDE5ZTI3OTA1NmU1ZjM3ZTc3MWM1YzQ5YTJkYjBlNmMyZDg0OGQ3Li5h
YzU3MTI3YmNmODkwNzJiZTAzODQxNmRhMTM5YjQxZjE2NGFlNjE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTQw
Myw3ICs0MDMsNiBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2Zp
bGVzKHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMsCiAKICNkZWZpbmUgQ09VTlQoX19v
cCkgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4o
KTsKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDT1VOVCkKLSAg
ICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ09VTlQpCiAj
dW5kZWYgQ09VTlQKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEt
Pm51bUVudHJpZXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9m
aWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wR2V0QnlJZD4oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggNDAz
OTRhOTQzOTkyOTkzZjU0NWEyYWM2MmNmNmVkYzA5ZGY1NTVmYS4uMWM1OTA0MmUwZDBjMzgxMWIz
YzliZTIxNThjZGM1NGMwMWRiYjgxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgQ2Fj
aGVkQ29kZUJsb2NrOwogCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKIAogc3RydWN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDVj
NzIwNThkY2YyMTk2MGRjZjg1M2UwYTkyYzI3ZTg5YTJkNTZiZWUuLjVlMzJkMmQyNGYxYjNlZDg3
MGMzMzBmMmVmMjNkODVlNGVjZTQ4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTMxNSw2ICszMTUsMTAgQEAgQ2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGNvbnN0IEkKICAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAg
ICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNl
IGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2Ug
bGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFsX2NhbGxf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmU6
CisgICAgY2FzZSBsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2Ug
bGxpbnRfZ2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6CiAgICAgY2FzZSBsbGludF9oYW5kbGVf
dW5jYXVnaHRfZXhjZXB0aW9uOgogICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lu
bGluZWRfY2FsbF90cmFtcG9saW5lOgpAQCAtMzI1LDYgKzMyOSw4IEBAIENhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKICAg
ICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3Jl
dHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CiAgICAgY2Fz
ZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jb25z
dHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2dldF9ieV9p
ZF9yZXR1cm5fbG9jYXRpb246CkBAIC0zMzUsNyArMzQxLDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNh
cGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IEkKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBj
YXNlIG9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9p
dGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgotICAgIGNhc2Ugb3BfdGFpbF9jYWxs
X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2Nh
dGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVy
bl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xv
Y2F0aW9uOgpAQCAtMzQzLDggKzM0OCw5IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2
ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAg
Y2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgogICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9s
b2d1ZV9ub190bHM6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6Ci0gICAgY2FzZSBq
c190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29u
c3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2UganNfdHJhbXBv
bGluZV9vcF9pdGVyYXRvcl9uZXh0OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRv
cl9vcGVuOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAK
aW5kZXggYjQ1MWNkYjYxZjdhMTFiMzMwMmMxODVjNjZiZmYxN2E5ZmRiZTA5Zi4uZTcyMmY5ZWJk
YWNjODkzNjkwNjU2ZDViNjNlOWY2MjQ0NDYxNWY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMTY2LDEw
ICsxNjYsMTAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
YWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KICAgICAgICAgICAgIGp1bXBUYXJn
ZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19z
bG93KTsKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3Bf
Y2FsbF92YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNh
bGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElO
VF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAg
ICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0
dGVyQ2FsbDogewogICAgICAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09
IG9wX2dldF9ieV9pZCkKQEAgLTIwMSwxMCArMjAxLDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvCiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CiAgICAgICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxs
RnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0KLSAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxwdHI7CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8g
PSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleChsb2NrZXIsIGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7Ci0KICAgICAgICAgICAgIGp1bXBUYXJn
ZXQgPSBjYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOTU2ZDY5NDBl
N2QyMGI4MjAyZjI1NTNlYzVmZTcwYjdlOGU5ZTYwYS4uZTYxZjg5NGJlMTA4Y2NiZmExMmRiMjA4
OTI5ZWNkZTJjM2RmMGYyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC04NDcsMTAgKzg0NywxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsm
XSB7CisgICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
c2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKEludmFsaWRHUFJSZWcpOwpAQCAtODkyLDcgKzg5Miw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0geworICAg
ICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVl
UGF5bG9hZEdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTAwLDcgKzkw
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAg
IG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+
ZW1pdEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAwZmU3YTc5MDkxNWE3MjRmNGUxZmZi
ZDk2YmExNGU3YTg1Y2I4Yzc5Li43NzA3M2YzNGFmYmZkZjk1ZmU1ODI1YTNjODk4OWMzMjIzZGRh
YTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKQEAgLTkzOCwxMCArOTM4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGgg
PSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRl
eChjYWxsU2l0ZSk7CiAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxD
YWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KSk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJl
bCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJ
bnZhbGlkR1BSUmVnKTsKQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0geworICAgICAg
ICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBj
YWxsZWVHUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTg5
LDcgKzk4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAg
ICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0g
Y2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCmluZGV4IGUxYzgyZGY4ODM0MTQ5MTk4NGIwOTgzODFiODBkNWVhMzY3MmQ2
ZWIuLjAxOGEyZjg1OGY0MjExZDM4N2I0MmI2OTJlMjViNTE4NjFiZTRjZDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTEwNDAzLDEwICsx
MDQwMywxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChqaXQsIHNjb3Bl
ZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhS
ZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCkBA
IC0xMDU1OSwxMCArMTA1NTksMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gc3RhdGUtPmppdENvZGUtPmNv
bW1vbi5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDAp
OwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQs
IEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAg
ICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0pKTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CiAgICAgICAgICAg
ICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CkBAIC0xMDkwMiwxMCArMTA5
MDIsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5m
bzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAg
ICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwpAQCAtMTExODMsMTAgKzExMTgz
LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChq
aXQsIEdQUkluZm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
c2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVw
YXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86
OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAg
ICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBjOGNiYmVlMDZiZjdkNjY2MmMxOWE0
YTRhOGExOGMyMWNlZmQzZjcyLi5lNjQ1ODUzMWViYzkwNGRlNWRkMDRjZTNhYmE1M2M1YmQzYzcw
YjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CkBAIC03NDUsMTggKzc0NSwxOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUAogdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhv
dXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihp
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdH
bG9iYWxPYmplY3Qodm0sIEdQUkluZm86OnJlZ1QyLCBpbmZvLT5jYWxsTW9kZSgpKTsKIH0KIAot
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIsIENhbGxNb2RlIGNhbGxNb2RlKQogewotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1vdmUoY2FsbExpbmtJbmZvR1BSLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5r
VGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9u
UHRyVGFnPihjYWxsKTsKICAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0
aW9uVGFzayhbPSwgJnZtXSAoKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwg
KmluZm8pOwotICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0
aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElW
aXJ0dWFsQ2FsbChjYWxsTW9kZSk7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCA2NWRkOGVkZWY3
NDc5OTZkNWY2ZDhmMTkyNDZlNmFkOTMzNmQ0NzM4Li5hNDRhYTVjZjk1NGYyYzE2NTQ3OWVjMmRj
ZDkyM2Q1ZmY0ZjNkMWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKQEAgLTE3NTIsNyArMTc1Miw3IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1
YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxD
YWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKLSAgICB2b2lkIGVtaXRW
aXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsK
KyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZSk7CiAgICAgCiAgICAgdm9pZCBtYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENv
ZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKaW5kZXgg
MTU4OTYwM2YxNDljMjc2YzM1OWU3YmIyNmQ2NGY0ZDg1NzI3ZjE1MC4uMzAwM2IwNzM1MDE4OGU1
ZjczZmNjOTY3MjBkNmE5ZTc0MWY4YmNiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUQ29kZS5oCkBAIC02Miw3ICs2Miw2IEBAIGNsYXNzIEpJVENvbnN0YW50UG9v
bCB7CiAKICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgR2xvYmFsT2Jq
ZWN0LAotICAgICAgICBDYWxsTGlua0luZm8sCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAog
ICAgICAgICBGdW5jdGlvbkRlY2wsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwKQEAgLTkzLDcgKzky
LDYgQEAgY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1Ymxp
YyBNYXRoSUNIb2xkZXIgewogICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKICAgICBQ
Q1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBt
X3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2
YWxDYWxsTGlua0luZm9zOwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPiBt
X3VubGlua2VkQ2FsbHM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
bz4gbV91bmxpbmtlZFN0dWJJbmZvczsKICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+
IG1fc3dpdGNoSnVtcFRhYmxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA5Mjk0
MjQ2MDczNDAwOTExYjZjMzU3Yzc4YTRhMGM2YTc0ZTlhYWQ0Li4yOGFlNmY3NzBkZGFjZDcxYzZm
MTgyYzlkMTc5ZmQxY2NlYjhkZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0x
MDEsMTIgKzEwMSw5IEBAIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rCiAgICAgcmV0dXJuIHN0ZDo6
dHVwbGUgeyBzdHViSW5mbywgc3R1YkluZm9JbmRleCB9OwogfQogCi1zdGQ6OnR1cGxlPFVubGlu
a2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxp
bmtlZENhbGxMaW5rSW5mbygpCitVbmxpbmtlZENhbGxMaW5rSW5mbyogSklUOjphZGRVbmxpbmtl
ZENhbGxMaW5rSW5mbygpCiB7Ci0gICAgdm9pZCogdW5saW5rZWRDYWxsTGlua0luZm9JbmRleCA9
IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihtX3VubGlua2VkQ2Fs
bHMuc2l6ZSgpKSk7Ci0gICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSAmbV91bmxpbmtl
ZENhbGxzLmFsbG9jKCk7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0lu
Zm9JbmRleCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExp
bmtJbmZvLCB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4KTsKLSAgICByZXR1cm4gc3RkOjp0dXBs
ZSB7IGluZm8sIGNhbGxMaW5rSW5mb0luZGV4IH07CisgICAgcmV0dXJuICZtX3VubGlua2VkQ2Fs
bHMuYWxsb2MoKTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTAxMCw3ICsxMDA3LDYg
QEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gRml4
ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+KG1fdW5saW5rZWRDYWxscy5zaXplKCkpOwog
ICAgIGlmIChtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpCiAgICAgICAgIHN0ZDo6
bW92ZShtX3VubGlua2VkQ2FsbHMuYmVnaW4oKSwgbV91bmxpbmtlZENhbGxzLmVuZCgpLCBtX2pp
dENvZGUtPm1fdW5saW5rZWRDYWxscy5iZWdpbigpKTsKLSAgICBtX2ppdENvZGUtPm1fZXZhbENh
bGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogICAgIG1faml0Q29k
ZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8+KG1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKICAgICBpZiAobV9qaXRDb2RlLT5t
X3VubGlua2VkU3R1YkluZm9zLnNpemUoKSkKICAgICAgICAgc3RkOjptb3ZlKG1fdW5saW5rZWRT
dHViSW5mb3MuYmVnaW4oKSwgbV91bmxpbmtlZFN0dWJJbmZvcy5lbmQoKSwgbV9qaXRDb2RlLT5t
X3VubGlua2VkU3R1YkluZm9zLmJlZ2luKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
ZGUyYzVjZTc3MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlhMS4uNjdiNDNkOGZhMzBiNzJj
YmQ0OTQ0NjIyOGM2NDI5NjRmM2QzMzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0x
NTMsNyArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlv
bkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwogICAg
ICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87Ci0gICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsK
IAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIs
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMjk0
LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwor
ICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAg
ICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBv
cF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAgICAs
IHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5s
aW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
JiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZh
bChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzA2
LDYgKzcwNSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAg
ICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNv
bnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rp
b24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVybkZyb21CYXNlbGluZUdlbmVy
YXRvcihWTSYpOworCisgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVj
a190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0m
KTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYp
OwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wR2V0RnJv
bVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQpAQCAtOTU4LDcgKzk2MCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgYWRkVG9Db25z
dGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cik7
CiAgICAgICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKLSAgICAg
ICAgc3RkOjp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQ+IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIFVubGlua2VkQ2FsbExp
bmtJbmZvKiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogCiAgICAgICAgIEludGVycHJldGVy
KiBtX2ludGVycHJldGVyOwogCkBAIC0xMDI5LDcgKzEwMzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBWZWN0b3I8SklUQ29uc3RhbnRQb29sOjpWYWx1ZT4gbV9jb25zdGFudFBvb2w7
CiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFu
dCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAgICAgICBCYWc8
Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAgICAgICAgU2VnbWVu
dGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7
CiAgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZl
MTAyYjVkZmJmYTJiZTRmZTE3MzE5N2UyYi4uODE1MWZmZGU2YTlmMmViMGMzMjQ3NWQ1YmZkZGFh
ZWRhMTAwMDM4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01OSwx
NyArNTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVH
UFIgKHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwotCi0jaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0
Q1RJU3R1YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgorICAgIGVt
aXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0
b3IpLmNvZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAgIENDYWxsSGVscGVy
cyBqaXQ7CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2Vs
aW5lOiBvcF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC04NCw3ICs4OCw3
IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICB1bnNpZ25lZCBjaGVja3Bv
aW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBpbnQgYXJnQ291bnRJbmNs
dWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNr
cG9pbnQpOwpAQCAtOTcsNyArMTAxLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1IpOwogICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
dG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdG1wR1BS
KTsKLSAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3BDYWxsOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUsIE9w
Q2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9m
ZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwog
ICAgIH0KIApAQCAtMTEwLDcgKzExNCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9w
Y29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgot
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtMTYwLDcgKzE2NCw3IEBAIEpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mCiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJl
Z1QyKTsKLSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAg
ICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgcmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSks
IHJlZ1QzKTsKICAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJl
Z1QyKTsKICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9m
ZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwpAQCAtMjAzLDY0ICsyMDcs
NTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwot
ICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
Q2FsbCwgcmVnVDApOwotCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJn
djsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWRWYWx1ZShBZGRyZXNzKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbGVlSlNSKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QzKTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCpt
X3ZtLCBpbmZvKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1Qy
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BDYWxsRXZh
bDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7Cisg
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgY2FsbExp
bmtJbmZvR1BSLCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAgcmVzZXRTUCgpOwogCiAgICAgZW1p
dFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyos
IHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVU
YWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5m
bywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmZvQ29uc3RhbnQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
VGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOwotICAg
IHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZm
bGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcFRhaWxDYWxsOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBKdW1w
TGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIHNjb3BlZExh
bWJkYTx2b2lkKCk+KFsmXXsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURh
dGEgeyB9OworICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9h
cmdjOworICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURh
dGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAg
ICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXI7CiAjZW5kaWYKLSAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KLSAgICAgICAgYnl0
ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVy
KTsKLSAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAg
c2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQotICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKLSAgICAgICAgICAgICAgICBEYXRh
Rm9ybWF0SlMpOwotICAgIH0KKyAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICAg
ICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVv
ZihSZWdpc3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1f
YXJnYyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7
ICsraSkgeworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5t
X2FyZ3YsCisgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0KICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5
OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBz
aHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9h
ZEdQUigpLCBEYXRhRm9ybWF0SlMpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzaHVm
ZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIo
KSwgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9
IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXls
b2FkR1BSKCkpOwogI2VuZGlmCi0gICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwotCi0gICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsK
LSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7
Ci0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BS
LCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1
ZmZsZURhdGEgfTsKKyAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsIHNodWZmbGVE
YXRhIH07CiAgICAgICAgIHNodWZmbGVyLmxvY2tHUFIoY2FsbExpbmtJbmZvR1BSKTsKICAgICAg
ICAgc2h1ZmZsZXIucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgfSk7CisgICAgfSkpOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKLSAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQo
KTsKLSAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7Ci0K
ICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAg
CkBAIC0yODgsMTcgKzI4NywxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgICovCiAK
ICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKICAgICBpZiAob3Bjb2Rl
SUQgIT0gb3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIHN0ZDo6dGllKGluZm8sIGluZm9Db25zdGFu
dCkgPSBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOworICAgICAgICBpbmZvID0gYWRkVW5saW5r
ZWRDYWxsTGlua0luZm8oKTsKICAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBl
Rm9yKG9wY29kZUlEKTsKICAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXpl
KCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8u
YXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOwotICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
b0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OwogICAgIH0KLSAgICBjb21waWxlU2V0dXBGcmFtZShi
eXRlY29kZSwgaW5mb0NvbnN0YW50KTsKKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSk7
CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwpAQCAtMzE2LDE2
ICszMTIsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoY2FsbGVlSlNSKSk7CiAjZW5kaWYKIAotICAgIGlmIChjb21waWxlVGFpbENh
bGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQorICAg
IGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIg
PSByZWdUMjsKLSAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFk
YXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlu
a0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9h
ZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNS
LnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17
CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVw
YXJlRm9yVGFpbENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIH0pOworICAgICAg
ICB9KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CkBAIC0zNDQsMTUgKzM0
MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCB1bnNpZ25lZCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNv
ZGVJRDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIEFT
U0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGxvYWRDb25zdGFudCht
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0
YW50LCByZWdUMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QyKTsKIAogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjYsNyArMzYzLDYgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUUKIAogICAgIHJlc2V0U1AoKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0
NTg3ODAzYzI2MThjNjgwMzk4MzZjZWU2YzdiMzRmZDJjMzA0Li4yZmUyM2M0OWZkMGY5NDA5MWY2
ODYwNWI3NTdhZTJjZTMyMjAxNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKQEAgLTM3MCwyMSArMzcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5l
cmF0b3IoVk0mKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcigm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwotICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOwotfQot
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggZjE1
ZDJlMTczYmU1ZmI3OWE4YTVhZDU2ODI5MWE5YWQ5YzIxOTk3NS4uNDMyNzE1ZmI4N2FmNDhhMzY5
N2UzMzNkYWFkYzQ1MGRlNDgwOTEwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCkBAIC02MCw3ICs2MCw3IEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmpl
Y3QuaCIKLSNpbmNsdWRlICJSZXBhdGNoLmgiCisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIK
ICNpbmNsdWRlICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8u
aCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKQEAgLTE0NDYsMTg2ICsxNDQ2LDkgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvYmFsT2JqZWN0KiBnbG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxs
ZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICBjYWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOwotCi0gICAgaWYgKGNhbGxM
aW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAg
YXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOwotICAgICAgICBBU1NFUlQo
Y2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOwotCi0gICAgICAgIGlmIChjYWxs
RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgICAgIGNh
bGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS5l
bmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09i
amVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAg
ICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAg
ICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtl
ZXBUaGVGcmFtZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KAotICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50
cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9k
ZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAg
IAotICAgICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7
Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFG
dW5jdGlvbkVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoCi0gICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBU
aGVGcmFtZSkpOwotICAgIH0KLQotICAgIEFTU0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0
aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpOwotCi0gICAgYXV0byBjb25zdHJ1Y3REYXRh
ID0gZ2V0Q29uc3RydWN0RGF0YSh2bSwgY2FsbGVlKTsKLSAgICBBU1NFUlQoY29uc3RydWN0RGF0
YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7Ci0KLSAgICBpZiAoY29uc3RydWN0RGF0YS50
eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOwotICAgICAgICBjYWxsZWVGcmFtZS0+c2V0
Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1
cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSkt
Pmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNh
bGxvd0dDOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0
dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5
cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlw
ZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxs
ZWUpKTsKLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50
cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci19Ci0KIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8pKQogewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxl
ckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAotICAgIFJF
TEVBU0VfQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOwotICAgIAotICAgIEpTVmFs
dWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgp
OwotICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxl
ZUFzVmFsdWUpOwotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAgICAgICAgaWYg
KGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24q
Pih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1w
b2xpbmVGb3Ioa2luZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOwot
Ci0gICAgICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5m
bywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7Ci0KLSAgICAgICAgICAgIHZv
aWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZv
aWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRo
ZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJh
bWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLQotICAgIEpTRnVuY3Rp
b24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwot
ICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwotICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7Ci0KLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9u
KCkpIHsKLSAgICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBraW5kLCBjYWxs
ZWUpOwotICAgICAgICBpZiAoIWNvZGVQdHIpCi0gICAgICAgICAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhh
bmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFy
Z2V0ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9j
YXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlz
Q2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBD
b25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJy
b3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJv
d0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2Nr
U2xvdCA9IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgZnVuY3Rp
b25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0s
IGNhbGxlZSwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKLQotICAgICAg
ICBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7
Ci0KLSAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7Ci0gICAgICAgIGlmIChjYWxsZWVGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpCi0g
ICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0ciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0U2VlbigpOwotICAgIGVsc2UKLSAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2Fs
bGVlRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLQot
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6
OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci19Ci0KLWlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi17Ci0gICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8t
PnNwZWNpYWxpemF0aW9uS2luZCgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFt
ZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9
IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCkpIHsKLSAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5j
dGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9u
VHJhbXBvbGluZUZvcihraW5kKTsKLSAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxs
TW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQot
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZ2xv
YmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7Ci0g
ICAgfQotICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24q
PihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBmdW5jdGlvbi0+
c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0
aW9uLT5leGVjdXRhYmxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRD
b2RlRm9yKGtpbmQpKSkgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwot
Ci0gICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAg
ICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJn
ZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Owot
Ci0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3Ry
dWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgewotICAg
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIENv
ZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2Nr
KCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5j
dGlvbkV4ZWN1dGFibGU+KHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4
Y2VwdGlvbigpKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5Ci0gICAgcmV0
dXJuIGVuY29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5k
LCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWls
ID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBsaW5rRm9yKGNh
bGxlZUZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7CiB9CiAKIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsLCBTbG93UGF0aFJldHVy
blR5cGUsIChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZDUxY2RhNGUyYTIx
YTkyMTc5YjUxNWY5ODRhZjJjNjhkNmRmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjAyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlJlcGF0Y2guaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJCaW5hcnlTd2l0Y2gu
aCIKLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAi
REZHT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5jbHVk
ZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCi0j
aW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRlRMVGh1bmtzLmgi
Ci0jaW5jbHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9j
ay5oIgotI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkdldHRl
clNldHRlci5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRl
ICJJQ1N0YXRzLmgiCi0jaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCi0jaW5jbHVkZSAiSW5zdGFu
Y2VPZkFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgi
Ci0jaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklUSW5saW5lcy5oIgotI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHkuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0j
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nh
c2UuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlNjb3BlZEFy
Z3VtZW50cy5oIgotI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2luY2x1
ZGUgIlN0YWNrQWxpZ25tZW50LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCi0jaW5j
bHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5o
IgotI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAu
aD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnT3BlcmF0aW9uV2l0
aFZhbGlkYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVyYXRpb24pCi17Ci0g
ICAgSlNDX1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJREFUSU9OKG9wZXJhdGlv
bik7Ci19Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRh
cmdldFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2Fs
bCkKLXsKLSAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElP
TihjYWxsKTsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1
dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQotewotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZXR1
cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24p
OwotICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCA9IHN0dWJJbmZv
Lm1fc2xvd1BhdGhDYWxsTG9jYXRpb247Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewotICAgICAgICBGdW5jdGlv
blB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFy
Z2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0
clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7Ci0gICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNvZGVC
bG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxs
VGFyZ2V0KCkpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7Ci0j
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgcmV0dXJuIHJldGFnQ2FsbFRhcmdldFdpdGhW
YWxpZGF0aW9uKGNhbGwpOwotfQotCi12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxs
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotI2lm
IEVOQUJMRShGVExfSklUKQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpGVExKSVQpIHsKLSAgICAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgICAgICBG
VEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rpb25QdHI8
SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxK
SVRUaHVua1B0clRhZz4oY2FsbCk7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhUaHVuayA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRk
cmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIEZUTDo6U2xvd1BhdGhD
YWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5r
KTsKLSAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uKTsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9uUHRyPEpJ
VFRodW5rUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIGtleSkuY29kZSgp
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKLSAg
ICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0
YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIHN0dWJJbmZvLm1fc2xvd09w
ZXJhdGlvbiA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxsZWVGdW5jdGlv
bik7Ci19Ci0KLWVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewotICAgIEdpdmVVcE9uQ2FjaGUsCi0g
ICAgUmV0cnlDYWNoZUxhdGVyLAotICAgIEF0dGVtcHRUb0NhY2hlCi19OwotCi1zdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICBUeXBl
SW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLSAgICBpZiAodHlwZUluZm8u
cHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotCi0gICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAg
ICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgLy8gRmxhdHRlbmluZyBjb3VsZCBoYXZl
IGNoYW5nZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZvciBhbm90aGVyIHRyeS4KLSAg
ICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKLSAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFzdHJ1Y3R1
cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0KLSAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Ci19Ci0KLXN0YXRpYyBib29s
IGZvcmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6
Zm9yY2VJQ0ZhaWx1cmUoKTsKLX0KLQotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQmIHJl
c3VsdCkKLXsKLSAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50
cygpKSB7Ci0gICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHModm0pOwotCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2ssIHZtKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KGxvY2tlciwgY29kZUJsb2Nr
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkK
LXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6
QnlJZFdpdGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgY2Fz
ZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2
YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWRP
cHRpbWl6ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
aW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0
aW9uKEdldEJ5S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0
QnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKLSAgICBjYXNl
IEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzOwotICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgICAgICByZXR1cm4g
b3BlcmF0aW9uVHJ5R2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6
OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljOwotICAgIGNh
c2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAg
IHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7Ci0gICAgfQotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBH
ZXRCeUtpbmQga2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+
dm0oKSk7Ci0KLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgICAgIGlmICghYmFz
ZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGNvbnN0
IGJvb2wgaXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lIHx8IGtpbmQg
PT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nh
c2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5z
ZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0g
ICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0
aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKLQot
ICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJy
YXkqPihiYXNlQ2VsbCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlu
bGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2Nr
ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNT
dHJpbmcoYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlw
ZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgewotICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5
bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFuZGxlIHRoaXMg
YXMgYSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKLSAgICAgICAgICAgICAgICAvLyB0
aGlzIHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNhc2UgZm9yIHRo
YXQgbG9hZCBpZiBuZWVkZWQuCi0gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJy
b2RlVGhpbmdzKCkpCi0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3RoLCBw
cm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChTY29wZWRBcmd1bWVudHMqIGFy
Z3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkg
ewotICAgICAgICAgICAgICAgIC8vIERpdHRvLgotICAgICAgICAgICAgICAgIGlmICghYXJndW1l
bnRzLT5vdmVycm9kZVRoaW5ncygpKQotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50
c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNlbGwtPmluaGVyaXRzPEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5tb2R1bGVOYW1lc3BhY2VT
bG90KCkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpzQ2FzdDxKU01vZHVsZU5h
bWVzcGFjZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNlU2xvdC0+ZW52aXJvbm1l
bnQsIFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3BlT2Zmc2V0KSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkgewotICAgICAgICAgICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAgICAgICBib29sIGxvYWRUYXJnZXRG
cm9tUHJveHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1
cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAg
ICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOwotICAg
ICAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAg
IGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7
Ci0gICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNz
LgotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5z
ZXQKLSAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAg
ICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAgICAgICAgICAgICAgICAm
JiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAmJiAhbG9hZFRh
cmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBh
cHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlw
ZUFjY2Vzc0NoYWluOwotCi0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90
LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAg
ICAgICAgICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1c3RvbXMsIHdlIG11c3Qg
ZGlzYWxsb3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKLSAgICAgICAgICAgICAgICAvLyBuZWVk
IHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hlIHRo
ZQotICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBvaW50ZXIuCi0KLSAgICAg
ICAgICAgICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBzbG90
LnNsb3RCYXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2xvdC5p
c1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpzQ2FzdDxKU09iamVjdCo+
KGJhc2VDZWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
IC8vIFdlIG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgJiYgc3RydWN0dXJlLT50
eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAg
ICAgICAgLy8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERpcmVjdCBvciBHZXRCeUtpbmQ6
OlByaXZhdGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3RpZ2F0ZSBwcm90b3R5cGUgY2hh
aW5zIGZ1cnRoZXIuCi0gICAgICAgICAgICAgICAgLy8gQ2FjaGVhYmlsaXR5IGp1c3QgZGVwZW5k
cyBvbiB0aGUgaGVhZCBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gR2V0
QnlLaW5kOjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBi
YXNlQ2VsbCwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMgbWF5IGhhdmUgY2hhbmdlZCBk
dWUgdG8gZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vz
c0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlw
ZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3VsZCBiZSBpbnNpZGUgZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvcGVydHlCbGFoLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNz
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25kaXRpb25TZXQuaXNWYWxp
ZCgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IG9mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVBy
b3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0cmli
dXRlcygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0Z1bmN0aW9uKiBn
ZXR0ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIo
KSkKLSAgICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2
bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOwotCi0gICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZTsKLSAgICAgICAgICAg
IGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21BdHRyaWJ1dGUoKSkKLSAg
ICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJpYnV0ZSgpOwotCi0gICAg
ICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsKLSAgICAgICAgICAgICAg
ICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2Fz
ZTo6TG9hZDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICB0
eXBlID0gQWNjZXNzQ2FzZTo6R2V0R2V0dGVyOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAg
ICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBs
b2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5
cGVBY2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZyb21Q
cm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJp
bnNpY0dldHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgZ2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFj
Y2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpMb2FkLCBwcm9wZXJ0
eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJs
ZVZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmlzVW5z
ZXQoKSA/IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90
b3R5cGVBY2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29y
R2V0dGVyOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMgJiYgdHlwZSA9PSBBY2Nl
c3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0
cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRlcigp
KSA6IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3Vz
dG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2UoKSA6
IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1vdmUo
cHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNzQ2Fz
ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLQot
ICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3Zl
KG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsK
LSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0
eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAg
ICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAg
ICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAgICAgICAgICBjYXNl
IEdldEJ5S2luZDo6VHJ5QnlJZDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGly
ZWN0OgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAg
ICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVz
dWx0LmNvZGUoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBH
ZXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1l
OgotICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdh
dGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJl
c3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25D
YWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZh
bHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewot
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAg
ICBpZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRl
R2V0QnlGdW5jdGlvbihraW5kKSk7Ci19Ci0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkK
LSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsK
LSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
aywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFs
dWUuYXNDZWxsKCk7Ci0KLSAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBl
OwotICAgICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFyZ3VtZW50c1R5cGUpCi0gICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERpcmVjdEFyZ3VtZW50c0xv
YWQ7Ci0gICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTY29wZWRBcmd1bWVudHNUeXBl
KQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTY29wZWRBcmd1
bWVudHNMb2FkOwotICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU3RyaW5nVHlwZSkK
LSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDsK
LSAgICAgICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRB
cnJheVN0b3JhZ2VUeXBlKSkgewotICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8o
dm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDg6
Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5SW50OExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5
cGVVaW50ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlVaW50OExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgotICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50
MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5SW50MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBUeXBlVWludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJ
bnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIGNhc2Ug
VHlwZUJpZ0ludDY0OgotICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUg
PSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOwotICAgICAgICAgICAg
c3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6Ci0g
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMkxvYWQ7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgot
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlTG9h
ZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1No
YXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29u
dGlndW91c0xvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFy
cmF5U3RvcmFnZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRB
Y2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJp
Y3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5
cGUsIG51bGxwdHIpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkp
IHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJh
c2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNo
ZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBi
YXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAg
aWYgKHRyeUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwg
aW5kZXgsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7Ci19
Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJp
Y1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0
QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKLSAg
ICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAg
ICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dDsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
OwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0g
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3Q7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeVZhbDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5l
cmljOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJp
YzsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RHZW5lcmljOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRH
ZW5lcmljOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWM7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVy
IGhhcHB5Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlh
dGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1
dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBzd2l0Y2ggKHB1dEJ5
S2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgotICAgICAgICBzd2l0Y2ggKHB1dEtp
bmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRO
b25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5p
c1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5VmFsOgotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRL
aW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0
TW9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1p
emU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAg
ICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKLSAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0g
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFt
ZS51aWQoKSk7Ci0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChm
b3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzbG90
LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5p
c0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0K
LSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8gc29tZXRoaW5nIHNtYXJ0ZXIg
aGVyZS4uLgotICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1Y3R1cmUtPmluZGV4aW5n
TW9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAvLyBX
ZSBjYW4ndCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUgcHJvdG90eXBlIHNpbmNlIGl0
IHNob3VsZG4ndCBvd24gcHJvcGVydGllcy4KLSAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRl
KHNsb3QuYmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOwotCi0gICAgICAgIGlmICghb2xkU3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFz
Q2VsbCgpOwotCi0gICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNlOwotICAgICAgICBpZiAoYmFz
ZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICAgICAg
YmFzZUNlbGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAg
ICAgICBiYXNlVmFsdWUgPSBiYXNlQ2VsbDsKLSAgICAgICAgICAgIGlzUHJveHkgPSB0cnVlOwot
Ci0gICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFuZCBKUy9D
dXN0b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAotICAgICAgICAgICAgLy8gY2FjaGUg
dHJhbnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJlIHRoZSBz
YW1lIHN0cnVjdHVyZQotICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRp
b24uCi0gICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0NhY2hlYWJs
ZVB1dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0
eSkKLSAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKLSAgICAgICAg
ICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Ci0gICAgICAgICAgICBpZiAoIWlz
Q2FjaGVhYmxlUHJveHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0S2luZCA9PSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGREZWZpbmUpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHNsb3QuYmFzZSgp
ID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgICAgIGlm
IChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRjaCBidWdzIGlmIHdlIGFjY2lk
ZW50YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCi0gICAgICAgICAgICAgICAgLy8gd2hl
biB3ZSB0cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkuIFRoaXMg
aXMgY29tbW9uIGFtb25nCi0gICAgICAgICAgICAgICAgLy8gcGF0aHMgdGhhdCByZWlmeSBsYXp5
IHByb3BlcnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBhbmQgZm9yZ2V0Ci0gICAg
ICAgICAgICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkgY29tZSBkb3duIHRoaXMg
cGF0aC4gVGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKLSAgICAgICAgICAgICAgICAvLyBrbm93IGhv
dyB0byBtb2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKG9yIGFueSBz
dHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGZvciB0aGF0IG1hdHRlciku
Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUodm0pID09IG9sZFN0cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1
cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkg
PT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6
OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90
LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWlz
UHJveHkpIHsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBv
bGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0
QnlLaW5kLCBwdXRLaW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0
UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCgpLCBpc1Byb3h5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKCFpc1Byb3h5KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0
UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW9sZFN0
cnVjdHVyZS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIHN0cnVjdHVyZSBpcyBkaWN0
aW9uYXJ5LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBiZXR3ZWVuIGFuIG9iamVj
dCBhbmQgYSBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBOZXdQcm9w
ZXJ0eSBvcGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9lcyBub3Qgb2ZmZXIgYW55
IGJlbmVmaXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFwcGVucyBhZ2Fpbi4KLSAg
ICAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJl
Q2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBpcyBvdmVycmlkZGVuIGJ5IFVz
ZXJPYmplY3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVmZmVjdCBvbiBKU09iamVj
dDo6cHV0LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0UHJvcGVydHlTbG90IGFzIG5v
bi1jYWNoYWVibGUsCi0gICAgICAgICAgICAgICAgLy8gdGhlbiBhcmJpdHJhcnkgc3RydWN0dXJl
IHRyYW5zaXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQgb3BlcmF0aW9uLCBhbmQgdGhp
cyBnZW5lcmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBoZXJlIGFzIGlmIG9sZFN0
cnVjdHVyZSAtPiBuZXdTdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSW4gcmVhbGl0eSwg
dGhlIHRyYW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0aGluZyB1bmtub3duIHN0cnVj
dHVyZXMgLT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIC8vIFRvIGd1
YXJkIGFnYWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5jb3JyZWN0IFVzZXJPYmpl
Y3Q6OnB1dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlv
biBhbmQgaWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhlIHB1dC4KLSAgICAgICAg
ICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG5ld1N0
cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKHZtKSAhPSBuZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlv
dXNJRCgpID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0
dXJlLT5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAg
ICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFs
T2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2Fj
aGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3Rv
QWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nl
c3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQg
PSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUs
IGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmUpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50LmlzUHJpdmF0ZU5hbWUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwg
aWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmNyZWF0ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBvZmZzZXQsIG9s
ZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBl
QWNjZXNzQ2hhaW4pLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkg
ewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWlu
OwotCi0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgd2UncmUg
YSBzZWxmIGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMKLSAgICAg
ICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3Rv
bSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50Ci0gICAgICAgICAgICAgICAg
Ly8gZnVuY3Rpb24gcG9pbnRlci4KLSAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0g
cHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2Uo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNl
KCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+
dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNz
Q2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFz
ZUNlbGwsIHNsb3QuYmFzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90
eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9w
ZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vz
c29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRp
b25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1c3Rv
bVNldHRlcigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFnPigpLCBzbG90LmJhc2UoKSAh
PSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsKLSAg
ICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nl
c3NDaGFpbjsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNh
Y2hlZE9mZnNldCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VW
YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNo
YWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3Rh
dHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMt
PnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vz
c0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJh
c2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3Rv
dHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5z
bG90QmFzZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSkpLT5nZXQodm0sIGlk
ZW50LmltcGwoKSwgYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
QWNjZXNzb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0
eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLmF0dHJpYnV0
ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNz
Q2hhaW4pLCBpc1Byb3h5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExP
R19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgIAotICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01B
TW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAg
ICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
LCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotCi0gICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVk
ZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0K
LQotdm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5k
LCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICBy
ZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJp
Y1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1Zh
bHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCi17Ci0gICAg
aWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7Ci0KLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKLQotICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGU7Ci0gICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2
bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlJbnQ4U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5
cGVVaW50ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlVaW50OFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50MTZTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlw
ZUludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVVaW50MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0
b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGlt
aXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAg
ICAgY2FzZSBUeXBlQmlnSW50NjQ6Ci0gICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICAgICAgICAgIGNhc2UgSW50MzJT
aGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZElu
dDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJs
ZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
RG91YmxlU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENv
bnRpZ3VvdXNTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZt
KCkpOwotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKLQotICAg
ICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51
bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJ
bkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwg
c3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdp
dmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCBy
ZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17Ci0g
ICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICBy
ZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0S2lu
ZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMp
IDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKLX0KLQotc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1
ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQsIEVD
TUFNb2RlIGVjbWFNb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAg
ICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0
LT52bSgpKTsKLQotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIEFTU0VSVChvbGRTdHJ1
Y3R1cmUpOwotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpIHx8ICFvbGRTdHJ1Y3R1
cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzUHJv
eHkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmICgh
c2xvdC5pc0NhY2hlYWJsZURlbGV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0KLSAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGlj
dGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICAgICAganNDYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKS0+
ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICBS
ZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLQotICAgICAgICBpZiAoc2xvdC5pc0RlbGV0ZUhp
dCgpKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBpbnZhbGlkT2Zm
c2V0OwotICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJl
bW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShv
bGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAg
IGlmICghbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7Ci0gICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBBU1NFUlQobmV3T2Zmc2V0ID09
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+
cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0
aW9uKTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAg
ICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7Ci0gICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5
TmFtZSwgbmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoZWNt
YU1vZGUuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LQotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBBY2Nlc3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHByb3BlcnR5TmFtZSwgaW52YWxp
ZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNj
ZXNzQ2FzZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1
Y3R1cmUsIHsgfSwgbnVsbHB0cik7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNj
ZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgcHJvcGVy
dHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRl
ZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkp
OwotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoSnVtcCwgb2xk
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlO
YW1lLnVpZCgpKSkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3Vs
ZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9p
ZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNo
ZURlbGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFsdWUsIG9sZFN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwgZWNtYU1vZGUpID09IEdpdmVV
cE9uQ2FjaGUpIHsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoR2Vu
ZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAgICAgIGlmIChr
aW5kID09IERlbEJ5S2luZDo6QnlJZCkKLSAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotfQotCi1pbmxpbmUgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rp
b24oSW5CeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluQnlL
aW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAg
Y2FzZSBJbkJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFsT3B0
aW1pemU7Ci0gICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKLXsKLSAgICBz
d2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4g
b3BlcmF0aW9uSW5CeUlkR2VuZXJpYzsKLSAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOwotICAgIGNhc2UgSW5CeUtpbmQ6OlBy
aXZhdGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVHZW5lcmlj
OwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1zdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCi0gICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQp
Ci17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlm
IChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSh2bSktPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFiYXNlLT5zdHJ1
Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5jZSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKHdh
c0ZvdW5kKSB7Ci0gICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAK
LSAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFp
bjsKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAg
ICAgICBpZiAod2FzRm91bmQpIHsKLSAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlv
biA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBB
dHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAg
ICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZQotICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAg
ICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewot
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwotICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwotICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hp
bmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhY2hl
U3RhdHVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAg
ICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJv
dG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2Jh
bE9iamVjdCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3Ry
dWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3Rv
dHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
c2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9m
ZnNldCgpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMg
PSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVsbHB0cik7Ci0g
ICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8p
IHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vz
c0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKLQotICAg
ICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nl
c3NDYXNlOjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQgPyBzbG90LmNhY2hlZE9mZnNl
dCgpIDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJv
dG90eXBlQWNjZXNzQ2hhaW4pKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3Qo
KSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5S
ZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29k
ZSgpKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQotICAgICAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xl
YXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRy
eUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQp
Ci17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZUluQnkoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQs
IHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7Ci0gICAgICAgIExPR19J
QygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VPYmplY3QtPmNsYXNzSW5mbyhn
bG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpKSk7Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAg
ICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0g
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7Ci0KLSAgICB7Ci0gICAgICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsK
LSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJh
c2UtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0g
YWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRv
Q2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgIGJvb2wgaXNCYXNl
UHJvcGVydHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2Fz
ZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAg
ICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlz
cywgYnJhbmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7IH0sIHsgfSk7Ci0KLSAgICAg
ICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkp
OwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVk
ZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0K
LQotdm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxl
SWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwotCi0gICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1YkluZm8pID09IEdpdmVVcE9u
Q2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21V
aWQodm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3Jj
ZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0p
OwotCi0gICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0s
IGJhc2UpOwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAg
ICAgcmV0dXJuIGFjdGlvbjsKLQotICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsK
LSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZEFkZEFjY2Vzc0Nhc2Us
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAg
ICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlQ2hlY2tQcml2
YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0dXJlKTsKLQotICAgICAgICBy
ZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0K
LSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVh
clN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJl
dHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNo
ZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
LQotICAgIGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0g
ICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJl
KTsKLQotICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24g
YWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0g
QXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgICAgICAKLSAg
ICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnNldEJyYW5kVHJhbnNp
dGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGJyYW5k
SUQudWlkKCkpOwotICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICBBU1NF
UlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpTZXRC
cmFuZCk7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAg
ICAKLSAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExPR19JQygo
SUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nh
c2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2YXRlQnJhbmQodm0sIGNvZGVC
bG9jaywgYnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwotCi0gICAgICAgIHJl
c3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQot
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hw
b2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0
KTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25D
YWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5k
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09i
amVjdCogYmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50
aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVy
U2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNo
ZVNldFByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xk
U3RydWN0dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZUluc3RhbmNlT2YoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVzdWx0OwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFsdWUuaXNDZWxsKCkpOyAv
LyBzaG91bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2VsbHMuCi0gICAgCi0gICAgaWYg
KGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgIAotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICAKLSAgICAgICAgSlNDZWxsKiB2YWx1
ZSA9IHZhbHVlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dmFsdWUtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNl
OwotICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+
KHZtLCBwcm90b3R5cGVWYWx1ZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUpIHsKLSAgICAgICAg
ICAgIGlmICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2YWx1ZSkpIHsKLSAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsIHN0
cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgcHJvdG90eXBlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5wcm90b3R5
cGVRdWVyaWVzQXJlQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGVh
Y2ggdGhpcyB0byBkbyBwb2x5IHByb3RvLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKLSAgICAgICAgICAgICAgICBwcmVw
YXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUsIHdhc0ZvdW5kID8gcHJvdG90
eXBlIDogbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKLSAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZSwgd2FzRm91bmQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZBY2Nl
c3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLAot
ICAgICAgICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9m
SGl0IDogQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2Fz
ZSkKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hlYWJsZUlkZW50aWZpZXIoKSk7
Ci0gICAgICAgIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZBZGRBY2Nlc3ND
YXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgCi0g
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBXVEZNb3ZlKG5ld0Nh
c2UpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkg
ewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVwbGFjZVdpdGhKdW1w
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgZmlyZVdh
dGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJl
c3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVV
cE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluc3RhbmNlT2Yo
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIGlmICh0cnlDYWNoZUluc3RhbmNl
T2YoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUsIHByb3RvdHlwZVZhbHVlLCBz
dHViSW5mbywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMp
OwotfQotCi1zdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNv
ZGVSZWYpCi17Ci0gICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNv
ZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwotfQotCi1z
dGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCi17Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0s
IGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwg
Y2FsbExpbmtJbmZvKTsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0
dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIHdl
YkFzc2VtYmx5T3duZXIoSlNDZWxsKiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotICAgIC8vIEVhY2ggV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc2hhcmVzIHRoZSBzdHVicyBmcm9t
IHRoZWlyIFdlYkFzc2VtYmx5Lk1vZHVsZSwgd2hpY2ggYXJlIHRoZXJlZm9yZSB0aGUgYXBwcm9w
cmlhdGUgb3duZXIuCi0gICAgcmV0dXJuIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2Fs
bGVlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCi19Ci0KLXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbCgKLSAgICBWTSYgdm0s
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJs
b2NrKiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlu
a0luZm8uc3R1YigpKTsKLQotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUt
PmNhbGxlckZyYW1lKCk7Ci0gICAgLy8gT3VyIGNhbGxlciBtdXN0IGhhdmUgYSBjZWxsIGZvciBh
IGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0
aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlz
Q2VsbCgpKTsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUt
PmNvZGVCbG9jaygpOwotCi0gICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2
ZSBhIHZhbGlkIENvZGVCbG9jay4KLSAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseU1v
ZHVsZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihj
YWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFT
U0VSVChvd25lcik7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAg
ICBjYWxsTGlua0luZm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUsIGNv
ZGVQdHIpOwotICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2bSwgb3duZXIsIGNh
bGxlZSk7Ci0KLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9j
aykpCi0gICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihj
YWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50
ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxu
Iik7Ci0KLSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2st
PmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8pOwotCi0gICAgaWYg
KGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxs
TGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxs
TGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci19
Ci0KLXZvaWQgbGlua0RpcmVjdENhbGwoCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLXsKLSAgICBBU1NF
UlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIFZNJiB2bSA9IGNhbGxlckNv
ZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgp
KTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpz
Q2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9jaykpOwotICAgIGlmIChzaG91
bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKLSAgICAgICAgZGF0YUxvZygi
TGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExp
bmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2Nr
KSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKLQotICAgIGNhbGxMaW5rSW5m
by5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNv
ZGVQdHIpKTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVC
bG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0luZm8pOwotfQotCi12
b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykKLXsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2Nr
LT52bSgpOwotICAgIAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCi1z
dGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKLXsK
LSAgICBpZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKLSAgICAgICAgY2FsbExpbmtJbmZv
LmNsZWFyQ29kZUJsb2NrKCk7Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpl
dHRpc29uKCkpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0
aXNvbigpKSB7Ci0gICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBj
b2RlUmVmKTsKLQotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCi0gICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsKLSAgICAgICAgfQotICAg
ICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUg
aW5saW5lIGNhY2hlIGJvdGggZm9yIGRhdGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgotICAgIH0K
LSAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1
YigpOwotICAgIGNhbGxMaW5rSW5mby5jbGVhclNsb3dTdHViKCk7Ci0gICAgaWYgKGNhbGxMaW5r
SW5mby5pc09uTGlzdCgpKQotICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZv
aWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxM
aW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7Ci0gICAgCi0gICAgcmV2ZXJ0
Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQg
bGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxl
ckZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3Nl
bWJseUZvcihjYWxsZXJDb2RlQmxvY2spLAotICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwg
YXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9y
aWdpbigpKSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAg
ICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExp
bmtJbmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0
dWFsVGh1bmspKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwotfQot
Ci1uYW1lc3BhY2Ugewotc3RydWN0IENhbGxUb0NvZGVQdHIgewotICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyOwotfTsKLX0gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKTsKLQotICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBs
aW5rUG9seW1vcnBoaWNDYWxsLCB3ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBH
Qy4KLSAgICAvLyBHQyBqZXR0aXNvbnMgQ29kZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8g
ZXRjLiBhbmQgYnJlYWtzIGFzc3VtcHRpb24gZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2Fs
bC4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUodm0pOwotICAgIAotICAg
IGlmICghbmV3VmFyaWFudCkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1l
LCBjYWxsTGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gT3VyIGNh
bGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0gICAg
Ly8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAgICBB
U1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQotICAgIENvZGVCbG9jayog
Y2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGJvb2wgaXNX
ZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFz
Q2VsbCgpKTsKLQotICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2
YWxpZCBDb2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJB
c3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2Rl
QmxvY2s7Ci0gICAgQVNTRVJUKG93bmVyKTsKLQotICAgIENhbGxWYXJpYW50TGlzdCBsaXN0Owot
ICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5z
dHViKCkpCi0gICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOwotICAgIGVsc2UgaWYgKEpT
T2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCi0gICAgICAgIGxpc3Qg
PSBDYWxsVmFyaWFudExpc3QgeyBDYWxsVmFyaWFudChvbGRDYWxsZWUpIH07Ci0gICAgCi0gICAg
bGlzdCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7Ci0KLSAgICAv
LyBJZiB0aGVyZSBhcmUgYW55IGNsb3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0
cmVhdCBhbGwgb2YgdGhlbSBhcyBjbG9zdXJlIGNhbGxzLgotICAgIC8vIFRoaXMgbWFrZXMgc3dp
dGNoaW5nIG9uIGNhbGxlZSBjaGVhcGVyLiBJdCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0
J3MgZWFzaWVyIG9uIHRoZSBERkc7Ci0gICAgLy8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50
IHRvIGRlYWwgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNh
bGxlZXMuCi0gICAgYm9vbCBpc0Nsb3N1cmVDYWxsID0gZmFsc2U7Ci0gICAgZm9yIChDYWxsVmFy
aWFudCB2YXJpYW50IDogbGlzdCkgIHsKLSAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2Fs
bCgpKSB7Ci0gICAgICAgICAgICBsaXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsK
LSAgICAgICAgICAgIGlzQ2xvc3VyZUNhbGwgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpCi0gICAgICAgIGNh
bGxMaW5rSW5mby5zZXRIYXNTZWVuQ2xvc3VyZSgpOwotICAgIAotICAgIFZlY3RvcjxQb2x5bW9y
cGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7Ci0gICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7
Ci0gICAgCi0gICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCi0gICAgZm9yIChD
YWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFu
dC5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICBj
b2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVC
bG9ja0ZvckNhbGwoKTsKLSAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxs
ZWUsIGVpdGhlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBh
cml0eSBtaXNtYXRjaCwKLSAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZv
ciB0aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEgdmlydHVhbCBjYWxsLgotICAgICAgICAgICAgaWYg
KCFjb2RlQmxvY2sgfHwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExp
bmtJbmZvLmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0s
IGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7
Ci0gICAgICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgICAgICBuZXdDYXNlVmFsdWUg
PSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rp
b24gd2l0aCBjbG9zdXJlIGNhbGwuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MzExCi0gICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1
ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChhdXRvKiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkKLSAgICAgICAgICAg
ICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMu
Y29udGFpbnMobmV3Q2FzZVZhbHVlKSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9S
OiBBdHRlbXB0IHRvIGFkZCBkdXBsaWNhdGUgY2FzZSB2YWx1ZS5cbiIpOwotICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkV4aXN0aW5nIGNhc2UgdmFsdWVzOiAiKTsKLSAgICAgICAgICAgICAgICBD
b21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNh
c2VWYWx1ZXMpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0
dGVtcHRpbmcgdG8gYWRkOiAiLCBuZXdDYXNlVmFsdWUsICJcbiIpOwotICAgICAgICAgICAgICAg
IGRhdGFMb2coIlZhcmlhbnQgbGlzdDogIiwgbGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxs
Q2FzZSh2YXJpYW50LCBjb2RlQmxvY2spKTsKLSAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3
Q2FzZVZhbHVlKTsKLSAgICB9Ci0gICAgQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZh
bHVlcy5zaXplKCkpOwotCi0gICAgLy8gSWYgd2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVz
ZSBhIG5vcm1hbCB2aXJ0dWFsIGNhbGwuCi0gICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxs
VmFyaWFudExpc3RTaXplOwotICAgIGlmIChpc1dlYkFzc2VtYmx5KQotICAgICAgICBtYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxW
YXJpYW50TGlzdFNpemVGb3JXZWJBc3NlbWJseVRvSlMoKTsKLSAgICBlbHNlIGlmIChjYWxsZXJD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCi0gICAgICAgIG1h
eFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGlj
Q2FsbFZhcmlhbnRMaXN0U2l6ZUZvclRvcFRpZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIG1heFBv
bHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2Fs
bFZhcmlhbnRMaXN0U2l6ZSgpOwotCi0gICAgLy8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQg
b2YgY2FsbENhc2VzLnNpemUoKSBiZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBm
b3Igbm93LgotICAgIGlmIChsaXN0LnNpemUoKSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRM
aXN0U2l6ZSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlu
a0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPENhbGxUb0NvZGVQ
dHI+IGNhbGxzKGNhbGxDYXNlcy5zaXplKCkpOwotICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBm
YXN0Q291bnRzOwotCi0gICAgaWYgKCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+
aml0VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkgewotICAgICAgICBmYXN0Q291bnRz
ID0gbWFrZVVuaXF1ZUFycmF5PHVpbnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgpKTsKLSAgICAgICAg
bWVtc2V0KGZhc3RDb3VudHMuZ2V0KCksIDAsIGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWlu
dDMyX3QpKTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5m
by5jYWxsZWVHUFIoKTsKLQotICAgIGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRh
SUMoKTsKLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChjYWxsZXJDb2RlQmxvY2spOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOwotICAgIGlm
IChjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxs
TGlua0luZm8uaXNUYWlsQ2FsbCgpKTsKLSAgICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlx
dWU8Q2FsbEZyYW1lU2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxl
RGF0YSgpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZl
IGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCi0g
ICAgICAgIC8vIHVzZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCi0gICAg
ICAgIGZyYW1lU2h1ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgpOwotI2VuZGlmCi0gICAgICAg
IGZyYW1lU2h1ZmZsZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKLSAgICB9Ci0KLSAgICBHUFJSZWcg
Y29tcGFyaXNvblZhbHVlR1BSOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgIGlm
IChmcmFtZVNodWZmbGVyKQotICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVT
aHVmZmxlci0+YWNxdWlyZUdQUigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wYXJp
c29uVmFsdWVHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BS
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwot
Ci0gICAgR1BSUmVnIGZhc3RDb3VudHNCYXNlR1BSOwotICAgIGlmIChmcmFtZVNodWZmbGVyKQot
ICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPQotICAgICAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVl
R1BSLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsK
LQotICAgIGlmICghZnJhbWVTaHVmZmxlciAmJiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7
Ci0gICAgICAgIC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBj
YWxsZWUgc2F2ZSByZWdpc3RlciBpbiB0aGUgc2xvdyBwYXRoLgotICAgICAgICBBU1NFUlQoIWNh
bGxlckNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOwot
ICAgICAgICBzdHViSml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICB9Ci0KLSAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7
Ci0gICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhl
IGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBp
ZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVy
cykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5i
cmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSKSk7Ci0jZWxzZQotICAgICAgICAvLyBXZSB3b3VsZCBo
YXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0g
ICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVu
Y3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCi0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0
LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9m
RXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGF1
dG8gaGFzRXhlY3V0YWJsZSA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olpl
cm8sIGNvbXBhcmlzb25WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpKTsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhjb21wYXJpc29uVmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
RXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVH
UFIpOwotICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJnN0dWJKaXQpOwotICAgIH0KLQotICAg
IEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVz
LCBCaW5hcnlTd2l0Y2g6OkludFB0cik7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25l
OwotICAgIHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkgewotICAgICAgICBz
aXplX3QgY2FzZUluZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOwotICAgICAgICAKLSAg
ICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQo
KTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyOwotICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwg
Y2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOwot
ICAgICAgICAgICAgaWYgKCFjb2RlUHRyKQotICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJp
YW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNh
bGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICBjb2RlUHRy
ID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZmFzdENvdW50cykgewotICAgICAgICAg
ICAgc3R1YkppdC5hZGQzMigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigxKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50
c0Jhc2VHUFIsIGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgbmVlZHNEb25lSnVtcCA9IGZhbHNlOwotICAgICAgICBpZiAoZnJhbWVTaHVm
ZmxlcikgewotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVm
Zmxlci0+c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICBjYWxs
c1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICB9IGVs
c2UgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQu
cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5j
YWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChpc0RhdGFJQykKLSAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwg
PSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAg
ICAgICAgICAgIG5lZWRzRG9uZUp1bXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7Ci0gICAgICAgIGlm
IChuZWVkc0RvbmVKdW1wKQotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkp
OwotICAgIH0KLSAgICAKLSAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICBiaW5hcnlT
d2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKLQotICAgIGlmIChmcmFtZVNodWZm
bGVyKSB7Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKLSAg
ICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOwotICAg
ICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKLSNpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVl
UmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKLSNlbHNl
Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdz
KEdQUkluZm86OnJlZ1QwKSk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFy
ZUZvclNsb3dQYXRoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxl
ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
R1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKLSAgICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1Rh
aWxDYWxsKCkpIHsKLSAgICAgICAgLy8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRo
LCBnZXQgcmlkIG9mIGFueSByZW1uYW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBl
eGlzdC4gVGhpcyByZWFsbHkgb25seSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAg
ICAgICAgLy8gU1AgZm9yIGNhbGxzLgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUNCk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVu
dGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKLSAgICAKLSAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsK
LSAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAo
cGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICBsaW5rVmlydHVhbEZv
cih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgp
KTsKLSAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7Ci0jaWYg
Q1BVKEFSTV9USFVNQjIpCi0gICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1
cmVzIHByb3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBz
IHRvIGFuIGFkZHJlc3MKLSAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJp
dCBidXQgYSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90
dG9tIGJpdC4KLSAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlz
RmxhZ1NldChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOwotICAgICAgICB2b2lkKiB0YXJnZXQg
PSBpc1RhaWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2Fs
bFRvQ29kZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyh0YXJnZXQpKSk7Ci0jZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxU
b0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5j
b2RlUHRyKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKLSAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOwot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJU
YWc+KHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpKTsKLSAgICAKLSAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAg
ICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywK
LSAgICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAsIHRhcmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNz
ZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgdG9D
U3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCi0gICAgICAgIHZtLCBvd25lciwg
Y2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKLSAgICAg
ICAgV1RGTW92ZShmYXN0Q291bnRzKSkpOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHNsb3cgcGF0
aCBpcyB1bnJlYWNoYWJsZSBvbiA2NC1iaXRzLCBidXQgc3RpbGwKLSAgICAvLyByZWFjaGFibGUg
b24gMzItYml0cyBzaW5jZSBhIG5vbi1jZWxsIGNhbGxlZSB3aWxsIGFsd2F5cwotICAgIC8vIHRy
aWdnZXIgdGhlIHNsb3cgcGF0aAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwot
Ci0gICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQg
b25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKLSAgICAvLyB0aGF0
IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgotICAgIGNhbGxMaW5rSW5mby5zZXRTdHViKFdURk1v
dmUoc3R1YlJvdXRpbmUpKTsKLSAgICAKLSAgICAvLyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9u
Z2VyIGhhcyBhIGNhbGwgY2FjaGUgYXBhcnQgZnJvbSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBo
aWMgY2FsbAotICAgIC8vIHN0dWIuCi0gICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQot
ICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgcmVzZXRHZXRCeShDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQg
a2luZCkKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFw
cHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwotICAgIHN3aXRjaCAoa2lu
ZCkgewotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlk
V2l0aFRoaXM6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgY2FzZSBHZXRCeUtp
bmQ6OkJ5SWREaXJlY3Q6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAg
IGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgcmVzZXRQdXRCeShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2lu
ZCkKLXsKLSAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9u
OwotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7Ci0gICAg
ICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNv
ZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAg
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUp
OwotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogewotICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBk
ZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0
aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5
cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7Ci0gICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKLSAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsRGVm
aW5lUHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7
Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlW
YWxTZXRQcml2YXRlRmllbGRHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKLSAgICAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0g
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6ZWRGdW5j
dGlvbik7Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6Ci0g
ICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKLSAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBEZWxCeUtpbmQ6
OkJ5SWQpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
b3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRp
bWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5n
SW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0SW5CeShD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2lu
ZCBraW5kKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
YXBwcm9wcmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICBpZiAoa2luZCA9
PSBJbkJ5S2luZDo6QnlJZCkKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJ
bkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICBlbHNlCi0gICAgICAgIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RV
c2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldElu
c3RhbmNlT2YoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQot
Ci12b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2
bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQotewotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBpZiAoIWNhbGxlZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qPih2bSwgY2FsbGVlKSkKLSAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+
anNDYWxsRW50cnlwb2ludCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVO
VVNFRF9QQVJBTShraW5kKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKLSNlbmRpZgotICAg
IHJldHVybiBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
Y2UzNzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYg
RU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRl
ICJDYWxsVmFyaWFudC5oIgotI2luY2x1ZGUgIlB1dEtpbmQuaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWVudW0gY2xhc3MgR2V0QnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotICAgIFRy
eUJ5SWQsCi0gICAgQnlJZFdpdGhUaGlzLAotICAgIEJ5SWREaXJlY3QsCi0gICAgUHJpdmF0ZU5h
bWUsCi0gICAgUHJpdmF0ZU5hbWVCeUlkLAotfTsKLQotZW51bSBjbGFzcyBQdXRCeUtpbmQgewot
ICAgIEJ5SWQsCi0gICAgQnlWYWwsCi19OwotCi1lbnVtIGNsYXNzIERlbEJ5S2luZCB7Ci0gICAg
QnlJZCwKLSAgICBCeVZhbAotfTsKLQotZW51bSBjbGFzcyBJbkJ5S2luZCB7Ci0gICAgQnlJZCwK
LSAgICBCeVZhbCwKLSAgICBQcml2YXRlTmFtZQotfTsKLQotdm9pZCByZXBhdGNoQXJyYXlHZXRC
eVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBp
bmRleCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2Jq
ZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJv
cGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNo
QXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwg
SlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Ci12
b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0
cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0
cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKLXZvaWQgcmVwYXRjaERlbGV0
ZUJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNW
YWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8m
LCBEZWxCeUtpbmQsIEVDTUFNb2RlKTsKLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91
bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwot
dm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJl
U3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0dsb2JhbE9iamVj
dCosIENvZGVCbG9jayosIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIGJvb2wgd2FzRm91bmQpOwotdm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKFZN
JiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxl
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua0RpcmVj
dENhbGwoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwg
Q2FsbExpbmtJbmZvJik7Ci12b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKLXZv
aWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxM
aW5rSW5mbyYsIENhbGxWYXJpYW50KTsKLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwotdm9pZCByZXNldERlbEJ5KENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKLXZvaWQgcmVzZXRJbkJ5KENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXNldEhhc1ByaXZh
dGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldEluc3Rh
bmNlT2YoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRDaGVja1By
aXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFNl
dFByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBmdGxU
aHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlv
bik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQ
dHIoVk0mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCogY2FsbGVlKTsKLQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRj
Y2Q1ZjdiNzg2NDExZDg1NWIyYTFkZTQ3Yy4uZGJkNWFiZDM3ODhkNzFiODAzMDViYjg1MWZiY2My
NzEzZTg3YjAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcApAQCAtMzQ0LDQ4ICszNDQsMjUgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGwoVk0mIHZtKQogICAg
IHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ2Fs
bCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZp
cnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0
dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0K
LQogc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRo
dW5rRm9yVGFpbENhbGwoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0s
IENhbGxNb2RlOjpUYWlsLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QoVk0m
IHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBD
b2RlRm9yQ29uc3RydWN0KTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbChWTSYgdm0pCi17Ci0gICAg
cmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNh
bGwpOwotfQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIHJldHVybiB2
aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3Qp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVua0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZt
LCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKLSAgICBhdXRvIG1vZGUgPSBjYWxsTGlua0luZm8uY2Fs
bE1vZGUoKTsKLSAgICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5k
KCk7CiAgICAgYXV0byBnZW5lcmF0b3IgPSBbJl0gKCkgLT4gVGh1bmtHZW5lcmF0b3IgewotICAg
ICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChjYWxsTW9kZSkgewogICAgICAg
ICBjYXNlIENhbGxNb2RlOjpSZWd1bGFyOgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZv
ckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxs
OwotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3Q7Cisg
ICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7CiAgICAgICAgIGNh
c2UgQ2FsbE1vZGU6OlRhaWw6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENhbGw7Ci0gICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdDsKKyAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29u
c3RydWN0OgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENhbGw7CiAgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29uc3RydWN0OwogICAgICAgICB9CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCAwZjlmNmUyZDM2ZjZkZDIzZTE4NzI2YWNlNjMx
NGEzMGEyMDFkYmNlLi5hYjdjZjY2YzQyMTUxZWUwMTk1OGMxYWIyMmYyOWZjZDhkZDcwMTRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTQ5LDcg
KzQ5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0
b3IoVk0mKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2
aXJ0dWFsVGh1bmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbE1vZGUpOwog
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0
b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29u
c3RydWN0R2VuZXJhdG9yKFZNJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuY3BwCmluZGV4IGU4ZGFmZjdkODhiMzBjNmJmODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQw
YjM3Mzg5MjFhNGYwMDE1MTJlN2RlZTNhODQ0M2M1MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBAIC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIg
dm9pZCB3YXNtX2VudHJ5KHZvaWQqLCB2b2lkKiwgdm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZt
RW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxD
YWxsSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0Vu
dHJ5U2xvd1BhdGhUcmFtcG9saW5lKHZvaWQpOworZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0
aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0
aW9uSGFuZGxlclRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxM
SW50VHJhbXBvbGluZSh2b2lkKTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5p
dGlhbGl6ZSgpCiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChj
cmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5j
b25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAg
Z19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFp
bENhbGxKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CkBAIC0xNjEsMTEgKzE2MiwxOSBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAg
ICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJ
VCgpKQotICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpT
RW50cnlTbG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3Jl
YXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+KCZ0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pz
Y0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2Fs
bEpTRW50cnlTbG93UGF0aFB0clRhZyldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICB9CisgICAgeworICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVm
OworICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBjb2RlUmVmLmNv
bnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkp
KTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oR2F0ZTo6dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQogICAgIHsKICAgICAgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMGM0
ODUzNGE4Mjk5ZjM2MDYyZWQ0YjQxMTg2MjdjNTc4NDYzN2E3OC4uNjZiOGRlOGY1YjkyZjYzNTNk
NWVjNWIwZDBjZGY5MTRjMDJjMmUwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMu
aCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5o
IgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
ICNpbmNsdWRlICJWTUlubGluZXMuaCIKQEAgLTU4Miw2ICs1ODMsMTcgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc3RhY2tfY2hlY2spCiAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbEZyYW1l
KTsKIH0KIAorZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENh
bGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFt
ZSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgY2FsbExpbmtJbmZvKTsK
K30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENh
bGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsSWdub3JlZDsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihqc0Nhc3Q8SlNH
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBjYWxsZWVGcmFtZSwgY2FsbExpbmtJbmZvLCBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworfQorCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmV3X29iamVjdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTgxOSw3ICsx
ODMxLDggQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJh
bWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIGNhbGxlZUZyYW1l
LT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5lbmNvZGVkSG9z
dENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxs
ZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmpl
Y3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQo
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAg
ICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBj
YWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBzbG93UGF0aExvZygiQ2FsbCBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIs
IGNhbGxlZSwgIlxuIik7CkBAIC0xODM4LDcgKzE4NTEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2Fs
bGVlLAogICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwog
ICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0
aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZy
YW1lKTsKICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBMTElOVF9DQUxM
X1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1
cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0
clRhZyk7CisgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFt
ZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2Jh
bE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2lu
dCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAg
ICAgCiAgICAgc2xvd1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlv
bjogIiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4NDcsNyArMTg2MSw3IEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1
ZSBjYWxsZWUsCiAgICAgTExJTlRfQ0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFD
b25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiB9CiAKLWlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlLCBMTEludENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gbnVsbHB0cikKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUg
c2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTg2MiwxNCArMTg3Niw5IEBAIGlu
bGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUs
IENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9u
ID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAg
ICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0KLSAgICAgICAgICAgIGlmICghTExJTlRfQUxXQVlT
X0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0
aW9uLCBjb2RlUHRyKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgYXNzZXJ0SXNUYWdn
ZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAg
ICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0
byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVyczsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVy
U1AsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAg
IH0KICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxs
KGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7CiAgICAgfQpAQCAtMTkwNCw3NCAr
MTkxMyw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSog
Y2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAgfQogCiAgICAgQVNTRVJUKCEh
Y29kZVB0cik7Ci0gICAgCi0gICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2Fs
bExpbmtJbmZvKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29k
ZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNhbGxlckNv
ZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsIGNhbGxMaW5rSW5m
byk7Ci0gICAgfQotCiAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRy
VGFnKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5U
eXBlIGdlbmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgT3AmJiBieXRlY29kZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBj
aGVja3BvaW50SW5kZXggPSAwKQotewotICAgIC8vIFRoaXMgbmVlZHMgdG86Ci0gICAgLy8gLSBT
ZXQgdXAgYSBjYWxsIGZyYW1lLgotICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5k
IGNvbXBpbGUgaXQgaWYgbmVjZXNzYXJ5LgotICAgIC8vIC0gSWYgcG9zc2libGUsIGxpbmsgdGhl
IGNhbGwncyBpbmxpbmUgY2FjaGUuCi0gICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5l
IGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCi0gICAg
SlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGNhbGxlZUZvcihi
eXRlY29kZSwgY2hlY2twb2ludEluZGV4KSk7Ci0gICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSA9IGNhbGxGcmFtZSAtIHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2Rl
LCBjaGVja3BvaW50SW5kZXgpOwotICAgIAotICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwg
Y2hlY2twb2ludEluZGV4KSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJl
Z2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxs
ZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICAKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHNldFVwQ2Fs
bChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSwgJmNhbGxMaW5rSW5mb0ZvcihtZXRh
ZGF0YSwgY2hlY2twb2ludEluZGV4KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9jYWxsKQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBn
ZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ2FsbD4oKSwgQ29kZUZv
ckNhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCkK
LXsKLSAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwo
Y29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcFRhaWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkp
OwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0KQotewotICAg
IExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxv
Y2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ29uc3RydWN0PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7
Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwp
Ci17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxv
Y2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JPcGVuPigpLCBDb2RlRm9yQ2FsbCwgT3BJ
dGVyYXRvck9wZW46OnN5bWJvbENhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVO
VVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRv
ck5leHQ+KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQpKTsKKyAg
ICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1As
IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKQpAQCAtMjA0
Myw4ICsxOTg3LDggQEAgZW51bSBjbGFzcyBTZXRBcmd1bWVudHNXaXRoIHsKICAgICBDdXJyZW50
QXJndW1lbnRzCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbiogcGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgU2V0QXJndW1lbnRzV2l0aCBz
ZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgU2V0QXJndW1lbnRzV2l0aCBzZXQ+CitpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKQogewogICAgIExMSU5U
X0JFR0lOX05PX1NFVF9QQygpOwogCkBAIC0yMDUzLDExICsxOTk3LDEyIEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJ
bnN0cnVjdGlvbioKICAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRy
ZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3A+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX2NhbGxlZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0g
dm0ubmV3Q2FsbEZyYW1lUmV0dXJuVmFsdWU7Ci0KLSAgICBpZiAoc2V0ID09IFNldEFyZ3VtZW50
c1dpdGg6Ok9iamVjdCkgeworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID0gdm0udmFyYXJnc0xlbmd0aCArIDE7CisgICAgaWYgY29uc3RleHByIChzZXQgPT0gU2V0QXJn
dW1lbnRzV2l0aDo6T2JqZWN0KSB7CiAgICAgICAgIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhp
cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29k
ZS5tX2FyZ3VtZW50cyksIGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgp
OwogICAgICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogICAg
IH0gZWxzZQpAQCAtMjA2NywyNyArMjAxMiwzMCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMo
cGMpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxs
ZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOworICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJ
bmZvLnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKTsKKworICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2Fs
bGVyU1ApOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdz
KQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBw
YywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZh
cmFyZ3NTZXR1cDxPcENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxG
cmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3RhaWxfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWls
Q2FsbFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRo
OjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNl
dEFyZ3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQog
CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVu
dHM+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50
QXJndW1lbnRzKTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzPihjYWxsRnJhbWUsIHBj
LCBDb2RlRm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25z
dHJ1Y3RfdmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFy
YXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6
T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncywgU2V0
QXJndW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0KTsK
IH0KIAogaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SlNFbnRyeVB0clRhZz4gcmV0dXJuUG9pbnQpCkBAIC0yMTEwLDcgKzIwNTgsOCBAQCBpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBJbnN0cnVjdGlvbgogICAgIAogICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVl
ID0gSlNWYWx1ZTo6ZW5jb2RlKGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNv
ZGUubV9lY21hTW9kZSkpOwogICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICBMTElOVF9D
QUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRy
eVB0clRhZyk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1l
QW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmpl
Y3QsIGNhbGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4
OGFhNmFhOTY0ZmI2ZTA5YjY2Li5kNDM4ZmNiMzM5ZGFmZTM3YTNjMTQxZGJlMjRhNmFkMjExMjli
YjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApA
QCAtMzgsNiArMzgsOCBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBsbGludF90cmFjZV9vcGVyYW5kKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0
aW9uKiwgaW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CiBl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUq
LCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSBSRUZFUkVOQ0VEX0ZST01fQVNNOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
bGxpbnRfbGlua19jYWxsKENhbGxGcmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2Vs
bCopOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENh
bGxGcmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOwogZXh0ZXJuICJDIiB2
b2lkIGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUqLCBKU0NlbGwqKSBSRUZFUkVO
Q0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIAogI2RlZmluZSBMTElOVF9TTE9XX1BBVEhfREVD
TChuYW1lKSBcCkBAIC0xMTksOSArMTIxLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMpOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuY19leHApOwogTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zZXRfZnVuY3Rpb25fbmFtZSk7Ci1MTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9jb25zdHJ1Y3QpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMpOwogTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMTMxLDggKzEz
MCw2IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0X3Zh
cmFyZ3MpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwp
OwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTE2
KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUz
Mik7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5f
Y2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25l
eHRfY2FsbCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RlYXJfb2Zm
X2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNh
dCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCA0NjJj
YmZiZTRlMzQ1Njg0NWUwNWFhOGJjMGM0ODExNTNjYmI4ZDBhLi4xNjAzYzJjNzg1NGM5OTliZTll
NmM1NzA1MzM2Y2ZmNzQyNzI5MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5jcHAKQEAgLTM0Niw5ICszNDYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiBwb2ludGVyLCBQ
dAogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdU
MywgdGFnKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRl
ciksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywgT3Bl
cmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUNSwgdGFnKTsKKyAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJl
Z1Q1KTsKKyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUNSwgT3BlcmF0aW9uUHRyVGFnKTsK
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkxMSW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUgdGh1
bmsiLCBuYW1lKTsKQEAgLTM2NiwxMyArMzY2LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCogcG9pbnRlciwK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnLCAiTExJbnQgJXMgd2FzbSBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRl
KFB0clRhZyB0YWcpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
PiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZywgYm9vbCB1bnRhZykKIHsKICAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCi0gICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwg
QVJNNjRSZWdpc3RlcnM6OmxyKTsKLSAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJl
Z2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmZhckp1bXAoR1BS
SW5mbzo6cmVnVDAsIHRhZyk7CisgICAgaWYgKHVudGFnKSB7CisgICAgICAgIGppdC51bnRhZ1B0
cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAgIGpp
dC52YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKKyAgICB9CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6YXJndW1lbnRHUFI3LCB0
YWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50IHRhaWwgY2FsbCBn
YXRlIHRodW5rIik7CkBAIC01NzMsOCArNTc1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpT
RW50cnlQdHJUYWc+IHJldHVybkxvY2F0aW9uVGh1bmsoT3Bjb2RlSUQgb3Bjb2RlSUQsIE9wY28K
ICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3Jfb3BlbikKICAgICBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3JfbmV4dCkKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJ
T04ob3BfY29uc3RydWN0KQotICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFy
Z3Nfc2xvdykKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nf
c2xvdykKKyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKQorICAgIExM
SU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfZ2V0X2J5X2lkKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9n
ZXRfYnlfdmFsKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCmluZGV4IGI4N2M0MjBjYmU0MDJh
MWYwY2YwODY4MTA3YjVhZmQ2ZGJjZjU0YWMuLjA1ZWM2MDFjMDE2NGNiOTU0YjczYTIxYzczNTFm
ZjAxMGZlYTcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5o
CkBAIC04OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+IGppdENhZ2VQdHJUaHVuaygpOwogI2lmIENQVShBUk02NEUpCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiwg
UHRyVGFnLCBjb25zdCBjaGFyKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIq
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRh
aWxDYWxsR2F0ZShQdHJUYWcpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZywgYm9vbCk7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBsb29wT1NSRW50cnlHYXRlVGh1bmsoKTsK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGVudHJ5T1NSRW50
cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+IHdhc21PU1JFbnRyeUdhdGVUaHVuaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGJiODhiNmZkYjA5OWI0OTlh
ZTZmZjRlODEwMTAxNTA0ZGFhNmQ0ZTMuLjNhMjUyMzMwN2I0Y2QwMGU5MjYwMWRmNjAwZDczNWJi
NGY4OTY3MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KQEAgLTU1MSw2ICs1NTEsNyBAQCBjb25zdCBTeW1ib2xUeXBlID0g
Y29uc3RleHByIFN5bWJvbFR5cGUKIGNvbnN0IE9iamVjdFR5cGUgPSBjb25zdGV4cHIgT2JqZWN0
VHlwZQogY29uc3QgRmluYWxPYmplY3RUeXBlID0gY29uc3RleHByIEZpbmFsT2JqZWN0VHlwZQog
Y29uc3QgSlNGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIgSlNGdW5jdGlvblR5cGUKK2NvbnN0IElu
dGVybmFsRnVuY3Rpb25UeXBlID0gY29uc3RleHByIEludGVybmFsRnVuY3Rpb25UeXBlCiBjb25z
dCBBcnJheVR5cGUgPSBjb25zdGV4cHIgQXJyYXlUeXBlCiBjb25zdCBEZXJpdmVkQXJyYXlUeXBl
ID0gY29uc3RleHByIERlcml2ZWRBcnJheVR5cGUKIGNvbnN0IFByb3h5T2JqZWN0VHlwZSA9IGNv
bnN0ZXhwciBQcm94eU9iamVjdFR5cGUKQEAgLTExNTEsMjcgKzExNTIsMjcgQEAgbWFjcm8gY2Fs
bFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmkKICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxsZWUKICAgICBl
bHNpZiBBUk02NEUKICAgICAgICAgbWFjcm8gY2FsbE5hcnJvdygpCi0gICAgICAgICAgICBsZWFw
IEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChj
b25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBq
bXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAg
bGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAg
KyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhNworICAgICAgICAg
ICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAg
ICAgIF9qc190cmFtcG9saW5lXyVvcGNvZGVOYW1lJToKLSAgICAgICAgICAgIGNhbGwgdDMsIGNh
bGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAK
ICAgICAgICAgbWFjcm8gY2FsbFdpZGUxNigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyAr
IGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0
ZTo6JW9wY29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFth
Ml0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAg
SlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNv
bnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGE3CisgICAgICAg
ICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAg
ICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUxNjoKLSAgICAgICAgICAgIGNh
bGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAg
ICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUzMigpCi0gICAgICAgICAgICBsZWFwIEpT
Q0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25z
dGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhMgotICAgICAgICAg
ICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAg
ICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRl
TWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0clNpemUsIGE3
CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRh
ZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUzMjoKLSAgICAg
ICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJU
YWcKICAgICAgICAgZW5kCiAKLSAgICAgICAgbW92ZSBjYWxsZWUsIHQzCisgICAgICAgIG1vdmUg
Y2FsbGVlLCB0NQogICAgICAgICBzaXplKGNhbGxOYXJyb3csIGNhbGxXaWRlMTYsIGNhbGxXaWRl
MzIsIG1hY3JvIChnZW4pIGdlbigpIGVuZCkKICAgICBlbHNlCiAgICAgICAgIGNhbGwgY2FsbGVl
LCBjYWxsUHRyVGFnCkBAIC0xMjA5LDEyICsxMjEwLDIzIEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5j
dGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRz
dFZpCiAgICAgZW5kCiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwg
dGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCi0gICAgYWRkcCBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSwgc3AKK21hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCh0ZW1wMSwgdGVt
cDIsIHRlbXAzLCB0ZW1wNCkKIGVuZAogCi0jIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lCi1t
YWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1w
NCwgY2FsbFB0clRhZykKK21hY3JvIGludm9rZUZvclJlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKKyAgICBjYWxsVGFyZ2V0
RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIGNhbGxQdHJUYWcpCitlbmQK
KworIyB0NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorZW5kCisKK21hY3JvIHByZXBh
cmVGb3JTbG93UmVndWxhckNhbGwoKQorZW5kCisKKyMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJh
bWUgKyBDYWxsZXJGcmFtZUFuZFBDU2l6ZQorIyBXZSBsZWF2ZSBjZnIgdGVtcDQgdG8gdXNlIGl0
IGZvciB1bnRhZ2dpbmcuCittYWNybyBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0
ZW1wMywgdGVtcDQpCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogCiAgICAg
bG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzW2Nmcl0sIHRl
bXAyCkBAIC0xMjMyLDE4ICsxMjQ0LDE3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxs
ZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIG1vdmUgY2Zy
LCB0ZW1wMQogICAgIGFkZHAgdGVtcDIsIHRlbXAxCiAKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0
ICsgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbc3BdLCB0ZW1wMgorICAgIGxvYWRpIFBheWxv
YWRPZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIENhbGxlckZyYW1lQW5kUENT
aXplW3NwXSwgdGVtcDIKICAgICAjIFdlIGFzc3VtZSA8IDJeMjggYXJndW1lbnRzCiAgICAgbXVs
aSBTbG90U2l6ZSwgdGVtcDIKICAgICBhZGRpIFN0YWNrQWxpZ25tZW50IC0gMSArIENhbGxGcmFt
ZUhlYWRlclNpemUsIHRlbXAyCiAgICAgYW5kaSB+U3RhY2tBbGlnbm1lbnRNYXNrLCB0ZW1wMgog
CiAgICAgaWYgQVJNdjcgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIENfTE9PUCBvciBDX0xPT1BfV0lO
IG9yIE1JUFMgb3IgUklTQ1Y2NAotICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBz
cAogICAgICAgICBzdWJpIENhbGxlckZyYW1lQW5kUENTaXplLCB0ZW1wMgogICAgICAgICBsb2Fk
cCBDYWxsZXJGcmFtZUFuZFBDOjpyZXR1cm5QQ1tjZnJdLCBscgogICAgIGVsc2UKLSAgICAgICAg
YWRkcCBQdHJTaXplLCBzcAorICAgICAgICBzdWJwIFB0clNpemUsIHNwCiAgICAgICAgIHN1Ymkg
UHRyU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgUHRyU2l6ZVtjZnJdLCB0ZW1wMwogICAgICAg
ICBzdG9yZXAgdGVtcDMsIFtzcF0KQEAgLTEyNzAsOSArMTI4MSwxMiBAQCBtYWNybyBwcmVwYXJl
Rm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRh
ZykKICAgICBlbmQKIAogICAgIG1vdmUgdGVtcDEsIHNwCitlbmQKKworbWFjcm8gaW52b2tlRm9y
VGFpbENhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxs
UHRyVGFnKQogICAgIGlmIEFSTTY0RQotICAgICAgICBtb3ZlIHRlbXA0LCBhMgotICAgICAgICBt
b3ZlIGNhbGxlZSwgYTAKKyAgICAgICAgbW92ZSBtYXliZU9sZENGUiwgYTIKKyAgICAgICAgbW92
ZSBjYWxsZWUsIGE3CiAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zm
c2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbCVjYWxsUHRy
VGFnJSkgKiBQdHJTaXplLCBhMQogICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnICMgJWNhbGxQdHJUYWclCiAgICAgZWxzZQpAQCAtMTI4MCw2ICsxMjk0LDIyIEBAIG1hY3Jv
IHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBj
YWxsUHRyVGFnKQogICAgIGVuZAogZW5kCiAKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHByZXBh
cmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwg
dmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbFB0clRh
ZykKKyAgICBpZiBBUk02NEUKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1
XSwgYTcKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpT
Q0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnRhaWxDYWxsV2l0aG91dFVudGFnJWNh
bGxQdHJUYWclKSAqIFB0clNpemUsIGExCisgICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyAlY2FsbFB0clRhZyUKKyAgICBlbHNlCisgICAgICAgIGxvYWRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0Nh
bGxEZXN0aW5hdGlvblt0NV0sIGExCisgICAgICAgIGptcCBhMSwgY2FsbFB0clRhZworICAgIGVu
ZAorZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93VGFpbENhbGwoKQorICAgIHJlc3RvcmVDYWxs
ZWVTYXZlc1VzZWRCeUxMSW50KCkKK2VuZAorCiBtYWNybyBzbG93UGF0aEZvckNvbW1vbkNhbGwo
b3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBh
cmVDYWxsKQogICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiBl
bmQKQEAgLTEyOTEsNyArMTMyMSw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1CiAgICAgICAg
IG1hY3JvIChjYWxsZWUsIGNhbGxlZUZyYW1lUHRyKQogICAgICAgICAgICAgYnRweiBjYWxsZWVG
cmFtZVB0ciwgLmRvbnRVcGRhdGVTUAogICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwg
c3AKLSAgICAgICAgICAgIHByZXBhcmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50
cnlTbG93UGF0aFB0clRhZykKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQx
KQogICAgICAgICAuZG9udFVwZGF0ZVNQOgogICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9u
KCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUs
IGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgSlNFbnRyeVNsb3dQYXRoUHRy
VGFnKQogICAgICAgICBlbmQpCkBAIC0xODIwLDEyICsxODUwLDE2IEBAIGlmIEFSTTY0RQogICAg
IGdsb2JhbCBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlU
cmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEw
LCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAgICAgZ2xv
YmFsIF90YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0Vu
dHJ5U2xvd1BhdGhUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAg
ICAgICAgam1wIGEwLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcKKyAgICAgICAgam1wIGE3LCBKU0Vu
dHJ5UHRyVGFnCisKKyAgICBnbG9iYWwgX3RhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1w
b2xpbmUKKyAgICBfdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZToKKyAgICAg
ICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX2V4Y2VwdGlvbkhhbmRsZXJU
cmFtcG9saW5lCiAgICAgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lOgpAQCAtMjMyNSwxNyAr
MjM1OSwxNyBAQCBlbmQpCiAKIAogIyB3ZSBjYW4ndCB1c2UgY2FsbE9wIGJlY2F1c2Ugd2UgY2Fu
J3QgcGFzcyBgY2FsbGAgYXMgdGhlIG9wY29kZSBuYW1lLCBzaW5jZSBpdCdzIGFuIGluc3RydWN0
aW9uIG5hbWUKLWNvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxpbnRfc2xvd19wYXRoX2NhbGwsIE9w
Q2FsbCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCitjb21t
b25DYWxsT3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVG
b3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhp
Y1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0
YWRhdGEpCiAgICAgYXJyYXlQcm9maWxlRm9yQ2FsbChPcENhbGwsIGdldHUpCiBlbmQpCiAKIAot
bWFjcm8gY2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGZuKQot
ICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9wY29k
ZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKK21hY3JvIGNhbGxPcChvcGNv
ZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9s
eW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCisgICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNv
ZGVOYW1lJSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgcHJl
cGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxs
LCBmbikKIGVuZAogCiAKLWNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JU
YWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY2FsbE9wKHRhaWxfY2FsbCwgT3BUYWls
Q2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBv
bHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwsIG1hY3JvIChnZXR1LCBt
ZXRhZGF0YSkKICAgICBhcnJheVByb2ZpbGVGb3JDYWxsKE9wVGFpbENhbGwsIGdldHUpCiAgICAg
Y2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIHJlbG9hZCBtZXRhZGF0YSBzaW5j
ZSBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKSBtaWdodCBoYXZlIHRyYXNoZWQgdDUKQEAg
LTIzNDMsNyArMjM3Nyw3IEBAIGNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVG
b3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogZW5kKQogCiAKLWNhbGxPcChjb25z
dHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBt
ZXRhZGF0YSkgZW5kKQorY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1Jl
Z3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRh
dGEpIGVuZCkKIAogCiBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCkBA
IC0yMzU0LDcgKzIzODgsNyBAQCBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJn
ZXQpCiAubm9FeGNlcHRpb246ICAgIAogZW5kCiAKLW1hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgZnJhbWVTbG93UGF0aCwgc2xvd1Bh
dGgsIHByZXBhcmVDYWxsKQorbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBn
ZXQsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCwg
aW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwpCiAgICAgY2Fs
bFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCiAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Ro
cm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQpA
QCAtMjM2OSwzMiArMjQwMyw3MCBAQCBtYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsbwogICAgICAgICAg
ICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAgICAgICAgIGVuZAogICAgIGVu
ZAotICAgIHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbENhbGxTbG93UGF0
aCgKKyAgICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhvc2UgYXJlIHIwIGFuZCByMQorICAg
ICAgICBtYWNybyAocmVzdG9yZWRQQ09yVGhyb3csIGNhbGxlZUZyYW1lUHRyKQorICAgICAgICAg
ICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAorICAgICAgICAgICAgcmVzdG9y
ZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAor
ICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MSkKKyAgICAgICAgICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUoc2l6ZSwgdDEsIHQwKQorICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisg
ICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
Lm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgICAgICAgICAgYnRweiB0MSwgKGNvbnN0
ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9ycGhp
YworICAgICAgICAgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1
cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNl
cGFyYXRlbHkuCisgICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9y
IHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9s
eW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNv
ZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxS
ZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAgICBqbXAgLmdvUG9s
eW1vcnBoaWMKKworICAgICAgICAubm90UG9seW1vcnBoaWM6CisgICAgICAgICAgICBicW5lcSB0
MCwgdDEsIC5vcENhbGxTbG93CisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0
MSkKKworICAgICAgICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0Nh
bGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVy
LCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisgICAgICAgIC5vcENhbGxTbG93
OgorICAgICAgICAgICAgIyB0MCBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMgQ2FsbExp
bmtJbmZvKgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAg
ICAgICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0
NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25b
dDVdLCB0NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgICAgICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAgICAgIHBy
ZXBhcmVTbG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5h
bWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5kb250VXBk
YXRlU1A6CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1w
b2xpbmUKKyAgICAgICAgZW5kKQogZW5kCiAKIAotbGxpbnRPcChvcF9jYWxsX3ZhcmFyZ3MsIE9w
Q2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZhcmFy
Z3Mob3BfY2FsbF92YXJhcmdzLCBzaXplLCBPcENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50
X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxf
dmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9j
YWxsX3ZhcmFyZ3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBzaXpl
LCBnZXQsIE9wQ2FsbFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19w
YXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFy
Q2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVn
dWxhckNhbGwpCiBlbmQpCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENh
bGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0YWRh
dGEob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBjaGVja1N3aXRjaFRvSklURm9y
RXBpbG9ndWUoKQogICAgICMgV2UgbGllIGFuZCBwZXJmb3JtIHRoZSB0YWlsIGNhbGwgaW5zdGVh
ZCBvZiBwcmVwYXJpbmcgaXQgc2luY2Ugd2UgY2FuJ3QKICAgICAjIHByZXBhcmUgdGhlIGZyYW1l
IGZvciBhIGNhbGwgb3Bjb2RlCi0gICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJn
cywgc2l6ZSwgT3BUYWlsQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3Np
emVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3Ms
IHByZXBhcmVGb3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92YXJh
cmdzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywg
X2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclRhaWxDYWxsLCBp
bnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVG
b3JTbG93VGFpbENhbGwpCiBlbmQpCiAKIAotbGxpbnRPcChvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkK
ICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJlcGFy
aW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBjYWxs
IG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
LCBzaXplLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgZGlzcGF0Y2gsIF9sbGludF9zbG93
X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3BhdGhf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwpCisgICAgZG9D
YWxsVmFyYXJncyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHNpemUsIGdldCwgT3BU
YWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJkX2FyZ3VtZW50cywg
X2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHByZXBhcmVGb3JU
YWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxs
LCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfY29uc3RydWN0
X3ZhcmFyZ3MsIE9wQ29uc3RydWN0VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gp
Ci0gICAgZG9DYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgc2l6ZSwgT3BDb25zdHJ1
Y3RWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJh
cmdzLCBfbGxpbnRfc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzLCBwcmVwYXJlRm9yUmVndWxh
ckNhbGwpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENvbnN0
cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIGdldCwgT3BD
b25zdHJ1Y3RWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9s
bGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9j
b25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFy
Q2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVn
dWxhckNhbGwpCiBlbmQpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGMwNGZmZDZiMGJjM2YyNmUxOTJmMDZmMmJi
Zjc0YjA2NGRjYjI3OWEuLjk4NzZlZjZlZjc0MmFjZWVkYWUyNjlhMmFiNDU0YzViNjJjZDUxNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5jcHAKQEAgLTEyOSw2ICsxMjksOCBAQCB1c2luZyBXZWJDb25maWc6OmdfY29uZmlnOwog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FsbExpbmtJbmZvOworCiAvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KIC8vIENMb29wUmVnaXN0ZXIgaXMgdGhlIHN0b3JhZ2UgZm9yIGFuIGVtdWxhdGVk
IENQVSByZWdpc3Rlci4KIC8vIEl0IGRlZmluZXMgdGhlIHBvbGljeSBvZiBob3cgaW50cyBzbWFs
bGVyIHRoYW4gaW50cHRyX3QgYXJlIHBhY2tlZCBpbnRvIHRoZQpAQCAtMTY2LDYgKzE2OCw3IEBA
IGNsYXNzIENMb29wUmVnaXN0ZXIgewogICAgIG9wZXJhdG9yIFByb3RvQ2FsbEZyYW1lKigpIHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxQcm90b0NhbGxGcmFtZSo+KG1fdmFsdWUpOyB9CiAgICAgb3Bl
cmF0b3IgUmVnaXN0ZXIqKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lzdGVyKj4obV92YWx1
ZSk7IH0KICAgICBvcGVyYXRvciBWTSooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Vk0qPihtX3Zh
bHVlKTsgfQorICAgIG9wZXJhdG9yIENhbGxMaW5rSW5mbyooKSB7IHJldHVybiBiaXR3aXNlX2Nh
c3Q8Q2FsbExpbmtJbmZvKj4obV92YWx1ZSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnRwdHJf
dCk+PgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcj0oVCB2YWx1ZSkgeyBtX3ZhbHVl
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4
IDkwM2U1YTQ1YjFiNjY4MmZkMjg3OGI5Nzk0ODUyYWVmZDY3NTFkNWUuLjg2ZTNlZWY3YTlkMGRi
Mzk5YWE3MjlkMjM4YWFkZjNjNTA1NDNmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMTgsNyAr
MTE4LDkgQEAgbWFjcm8gY0NhbGwyVm9pZChmdW5jdGlvbikKIGVuZAogCiBtYWNybyBjQ2FsbDQo
ZnVuY3Rpb24pCi0gICAgaWYgQVJNdjcgb3IgTUlQUworICAgIGlmIENfTE9PUCBvciBDX0xPT1Bf
V0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMK
KyAgICBlbHNpZiBBUk12NyBvciBNSVBTCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNp
ZiBYODYgb3IgWDg2X1dJTgogICAgICAgICBwdXNoIGEzCkBAIC0yMTUxLDEyICsyMTUzLDEyIEBA
IG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGJpbmVx
IFRoaXNBcmd1bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRv
bmUKICAgICBsb2FkaSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMs
IDhdLCB0MAogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3Rv
cmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQ
cm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDAsICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1
XQogLmRvbmU6CiBlbmQKIAorIyB0NSBob2xkcyBtZXRhZGF0YS4KIG1hY3JvIGNhbGxIZWxwZXIo
b3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KQotICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXRDYWxsZWUodDApCiAKICAgICBsb2FkcCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0W3Q1XSwgdDIKQEAgLTIxODgsNyArMjE5MCw3IEBAIG1hY3JvIGNv
bW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2Fs
bCwgcHJvbG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0
Q2FsbGVlKGRzdCkKLSAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgICAgZ2V0
KG1fY2FsbGVlLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGdldEFyZ3VtZW50
U3RhcnQoZHN0KQpAQCAtMjE5OSw2ICsyMjAxLDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29k
ZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAg
ICAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIGRzdCkKICAgICAgICAg
ZW5kCiAgICAgICAgIAorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRhCiAgICAgICAgIGNhbGxI
ZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2Rz
dCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRB
cmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVuZCkKIGVuZApAQCAtMjg2Niw2
ICsyODY5LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJh
dG9yT3BlbiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QK
ICAgICBlbmQKIAorICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBjYWxsSGVscGVyKG9wX2l0ZXJh
dG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9y
T3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2Fs
bCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRB
cmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQp
CiAKIC5nZXRCeUlkU3RhcnQ6CkBAIC0yOTI3LDYgKzI5MzEsNyBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0LCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1ZSBzbG90IGFzIGEgdG1wIHNpbmNl
IHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4KKyAgICBtZXRhZGF0YSh0NSwgdDAp
CiAgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJh
dG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFs
dWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBt
ZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4
IGE5MTMxNGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJlMmY1OWMwYTgzNzAuLjMzYmJkZDI2ODdlZDI5
ZmUxMjI3MmMyNzJiMGZiZTBiMDZjYzlkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0xNDMsNyArMTQzLDkg
QEAgZW5kCiAjIFRoaXMgYmFyZWx5IHdvcmtzLiBhcmczIGFuZCBhcmc0IHNob3VsZCBwcm9iYWJs
eSBiZSBpbW1lZGlhdGVzLgogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KHQ0LCAweGJhZDBjMDA0KQotICAgIGlmIFg4Nl82NCBvciBBUk02NCBv
ciBBUk02NEUgb3IgUklTQ1Y2NAorICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCisgICAgICAg
IGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMKKyAgICBlbHNpZiBY
ODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKICAgICAgICAgY2FsbCBmdW5jdGlv
bgogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBPbiBXaW42NCwgcmN4LCByZHgsIHI4
LCBhbmQgcjkgYXJlIHVzZWQgZm9yIHBhc3NpbmcgdGhlIGZpcnN0IGZvdXIgcGFyYW1ldGVycy4K
QEAgLTMwOSwxMiArMzExLDEyIEBAIG1hY3JvIG1ha2VKYXZhU2NyaXB0Q2FsbChlbnRyeSwgcHJv
dG9DYWxsRnJhbWUsIHRlbXAxLCB0ZW1wMikKICAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgog
ICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAgZWxzaWYgQVJNNjRFCi0gICAg
ICAgIG1vdmUgZW50cnksIHQzCi0gICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9K
YXZhU2NyaXB0KSAqIFB0clNpemUsIGEyCi0gICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisgICAgICAgIG1vdmUgZW50cnksIHQ1CisgICAgICAg
IGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFw
ICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGE3Cisg
ICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCiAg
ICAgICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUKICAgICAgICAgX3Zt
RW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lOgotICAgICAgICBjYWxsIHQzLCBKU0VudHJ5UHRy
VGFnCisgICAgICAgIGNhbGwgdDUsIEpTRW50cnlQdHJUYWcKICAgICBlbHNlCiAgICAgICAgIGNh
bGwgZW50cnksIEpTRW50cnlQdHJUYWcKICAgICBlbmQKQEAgLTIzNjAsNDEgKzIzNjIsNTggQEAg
bWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUpCiAgICAgbG9hZHEg
VGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGJ0cW56IHQwLCBub3RDZWxs
TWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MwotICAg
IHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2Fy
cmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3RvcmVpIHQzLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJ
RFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1Bh
dGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBw
cmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3Vt
ZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotICAgIG1ldGFkYXRhKHQ1
LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisjIHQ1IGhvbGRzIG1ldGFkYXRhLgorbWFjcm8gY2Fs
bEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJl
UG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KQorICAgIGdldENhbGxlZSh0MSkKIAotICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXRbdDVd
LCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQotICAgIGJxbmVx
IHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQx
LCB0MCkKIAorICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lCiAgICAgZ2V0
QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAgICAgbmVncCB0MwogICAgIGFk
ZHAgY2ZyLCB0MwotICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgIGdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKHQyKQotICAgIHN0b3JlUEMoKQogICAgIHN0b3JlaSB0MiwgQXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3QzXQorCisgICAgIyBTdG9yZSBs
b2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3VyZSBzcC4KKyAgICBzdG9yZVBD
KCkKKyAgICBzdG9yZXEgdDAsIENhbGxlZVt0M10KICAgICBtb3ZlIHQzLCBzcAotICAgIGlmIEFS
TTY0RQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAgICBwcmVwYXJlQ2FsbCh0MCwg
dDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQw
Ci0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQwLCBK
U0VudHJ5UHRyVGFnKQotICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIs
IHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQdHJUYWcpCi0gICAgZW5kCi0u
b3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBz
bG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXpl
LCBzcAogCi1tYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0
cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQxCisgICAg
YnRweiB0MSwgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayks
IC5ub3RQb2x5bW9ycGhpYworICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50
YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBv
bGluZSBzZXBhcmF0ZWx5LgorICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3Ig
cG9seW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5
bW9ycGhpYyB0aHVuayBzaWRlLgorICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rlciwg
ZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgam1wIC5nb1BvbHltb3JwaGljCisKKy5ub3RQ
b2x5bW9ycGhpYzoKKyAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93CisgICAgcHJlcGFyZUNh
bGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgorICAgIGxvYWRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0Nh
bGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBv
cGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0
Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworLm9wQ2FsbFNsb3c6CisgICAgIyB0MCBpcyBj
YWxsZWUKKyAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAjIHQzIGlzIGNhbGxlcidzIEpT
R2xvYmFsT2JqZWN0CisgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExp
bmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgbG9hZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
W3Q1XSwgdDUKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgIGNh
bGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRy
eVB0clRhZykKK2VuZAorCittYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgs
IG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhp
YywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIApAQCAtMjQwMyw3ICsyNDIy
LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1
Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5kLCBtZXRhZGF0YSkKIAogICAg
ICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkK
KyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAgICAgICBlbmQKIAogICAgICAgICBt
YWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTI0MTQsNyArMjQzMyw4IEBAIG1hY3JvIGNv
bW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2Fs
bCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdj
LCBkc3QpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xv
d1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIHNpemUs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1
bWVudENvdW50KQorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRhCisgICAgICAgIGNhbGxIZWxw
ZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwg
cHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dD
YWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFy
dCwgZ2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKIApAQCAtMjUzMyw2ICsyNTUzLDg4
IEBAIG9wKGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAg
am1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCiBlbmQpCiAKKyMgdDAg
aXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9i
YWxPYmplY3QKK21hY3JvIGxpbmtTbG93UGF0aEZvcihmdW5jdGlvbikKKyAgICBmdW5jdGlvblBy
b2xvZ3VlKCkKKyAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV92bVt0M10sIHQxCisgICAgc3Rv
cmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MV0KKyAgICBtb3ZlIHQyLCBhMgorICAgIG1vdmUg
dDMsIGExCisgICAgbW92ZSBjZnIsIGEwCisgICAgY0NhbGw0KGZ1bmN0aW9uKQorICAgIGZ1bmN0
aW9uRXBpbG9ndWUoKQorICAgIHVudGFnUmV0dXJuQWRkcmVzcyBzcAorICAgIGJ0cHogcjEsIC5k
b05vdFRyYXNoCisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKQorICAgIHBy
ZXBhcmVGb3JUYWlsQ2FsbCh0MSwgdDIsIHQzLCB0NCkKKyAgICB1bnRhZ1JldHVybkFkZHJlc3Mg
dDQKKy5kb05vdFRyYXNoOgorICAgICMgRklYTUU6IFVzZSBpbnZva2VGb3JUYWlsQ2FsbD8KKyAg
ICBqbXAgdDAsIEpTRW50cnlQdHJUYWcKK2VuZAorCisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBD
YWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CittYWNybyB2aXJ0
dWFsVGh1bmtGb3Iob2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2ssIGludGVybmFsRnVuY3Rp
b25UcmFtcG9saW5lLCBwcmVwYXJlQ2FsbCwgc2xvd0Nhc2UpCisgICAgYWRkaSAxLCBDYWxsTGlu
a0luZm86Om1fc2xvd1BhdGhDb3VudFt0Ml0KKyAgICBtb3ZlIE5vdENlbGxNYXNrLCB0MQorICAg
IGJ0cW56IHQwLCB0MSwgc2xvd0Nhc2UKKyAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEpT
RnVuY3Rpb25UeXBlLCAubm90SlNGdW5jdGlvbgorICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fZXhl
Y3V0YWJsZU9yUmFyZURhdGFbdDBdLCB0MQorICAgIGJ0cHogdDEsIChjb25zdGV4cHIgSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpLCAuaXNFeGVjdXRhYmxlCisgICAgbG9hZHAgKEZ1bmN0aW9uUmFy
ZURhdGE6Om1fZXhlY3V0YWJsZSAtIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
KVt0MV0sIHQxCisuaXNFeGVjdXRhYmxlOgorICAgIGxvYWRwIG9mZnNldE9mSklUQ29kZVdpdGhB
cml0eUNoZWNrW3QxXSwgdDEKKyAgICBidHB6IHQxLCBzbG93Q2FzZQorLmNhbGxDb2RlOgorICAg
IHByZXBhcmVDYWxsKHQ1LCB0MiwgdDMsIHQ0KQorICAgIGptcCB0MSwgSlNFbnRyeVB0clRhZwor
Lm5vdEpTRnVuY3Rpb246CisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBJbnRlcm5hbEZ1
bmN0aW9uVHlwZSwgc2xvd0Nhc2UKKyAgICBwcmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkKKyAg
ICBqbXAgaW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmUKK2VuZAorCisjIHQwIGlzIGNhbGxlZQor
IyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0Citv
cChsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICBsaW5rU2xvd1BhdGhG
b3IoX2xsaW50X2xpbmtfY2FsbCkKK2VuZCkKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2Fs
bExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmly
dHVhbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1
dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5h
bF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0
ZW1wNCkgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9s
bGludF92aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxM
aW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1
YWxfY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4
ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgX2xsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRl
bXAyLCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtT
bG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQorCisjIHQwIGlzIGNhbGxlZQor
IyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0Citv
cChsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1
YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
LCBfbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEs
IHRlbXAyLCB0ZW1wMywgdGVtcDQpCisgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbCh0ZW1wMSkKKyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKHRlbXAxLCB0ZW1wMiwgdGVt
cDMsIHRlbXA0KQorICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgdGVtcDQKKyAgICBlbmQsIC5z
bG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxf
Y2FsbCkKK2VuZCkKIAogbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZnNl
dFRvRnVuY3Rpb24pCiAgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCkBAIC0zMDQ2LDggKzMxNDgsOCBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRlcmF0b3JPcGVuLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRzdAogICAgIGVuZAog
Ci0KLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRl
cmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRl
cmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0
QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNh
bGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVu
X2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVyYXRvciwgcHJl
cGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHlt
b3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9H
ZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRp
bmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0QnlJZFN0
YXJ0OgogICAgIG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNoKHZhbHVlKQpAQCAtMzEwNCw3ICsz
MjA2LDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9y
TmV4dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1f
dmFsdWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0
ZXIuCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0
ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1f
dmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0
QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNh
bGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0
X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVw
YXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1v
cnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dl
dERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGlu
Z1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3Rh
cnQ6CiAgICAgbWFjcm8gc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCmluZGV4IGNhZDIxNWFlMzQzY2M4
NmIzYTEwYTVmYWY2NjI4NDI0YTljMDJmMjguLmM3MDE2NjRhYjJiZmZmMjA3ZDEyZTVlMjIyZjk2
NGNmYTkxMmEyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNt
L2Nsb29wLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJi
CkBAIC01NzIsNiArNTcyLDE0IEBAIGRlZiBjbG9vcEVtaXRDYWxsU2xvd1BhdGhWb2lkKG9wZXJh
bmRzKQogICAgICRhc20ucHV0YyAiI3tvcGVyYW5kc1swXS5jTGFiZWx9KCN7b3BlcmFuZHNbMV0u
Y2xEdW1wfSwgI3tvcGVyYW5kc1syXS5jbER1bXB9KTsiCiBlbmQKIAorZGVmIGNsb29wRW1pdENh
bGxTbG93UGF0aDQob3BlcmFuZHMpCisgICAgJGFzbS5wdXRjICJ7IgorICAgICRhc20ucHV0YyAi
ICAgIGNsb29wU3RhY2suc2V0Q3VycmVudFN0YWNrUG9pbnRlcihzcC52cCgpKTsiCisgICAgJGFz
bS5wdXRjICIgICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9ICN7b3BlcmFuZHNbMF0uY0xh
YmVsfSgje29wZXJhbmRzWzFdLmNsRHVtcH0sICN7b3BlcmFuZHNbMl0uY2xEdW1wfSwgI3tvcGVy
YW5kc1szXS5jbER1bXB9LCAje29wZXJhbmRzWzRdLmNsRHVtcH0pOyIKKyAgICAkYXNtLnB1dGMg
IiAgICBkZWNvZGVSZXN1bHQocmVzdWx0LCB0MCwgdDEpOyIKKyAgICAkYXNtLnB1dGMgIn0iCitl
bmQKKwogY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgY2Fz
ZSBvcGNvZGUKQEAgLTExNzUsNiArMTE4Myw5IEBAIGRlZiBsb3dlckNfTE9PUAogICAgICAgICB3
aGVuICJjbG9vcENhbGxTbG93UGF0aFZvaWQiCiAgICAgICAgICAgICBjbG9vcEVtaXRDYWxsU2xv
d1BhdGhWb2lkKG9wZXJhbmRzKQogCisgICAgICAgIHdoZW4gImNsb29wQ2FsbFNsb3dQYXRoNCIK
KyAgICAgICAgICAgIGNsb29wRW1pdENhbGxTbG93UGF0aDQob3BlcmFuZHMpCisKICAgICAgICAg
IyBGb3IgZGVidWdnaW5nIG9ubHkuIFRoaXMgaXMgdXNlZCB0byBpbnNlcnQgaW5zdHJ1bWVudGF0
aW9uIGludG8gdGhlCiAgICAgICAgICMgZ2VuZXJhdGVkIExMSW50QXNzZW1ibHkuaCBkdXJpbmcg
bGxpbnQgZGV2ZWxvcG1lbnQgb25seS4gRG8gbm90IHVzZQogICAgICAgICAjIGZvciBwcm9kdWN0
aW9uIGNvZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9p
bnN0cnVjdGlvbnMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVj
dGlvbnMucmIKaW5kZXggOWNiYTVkNjhmM2NhZDMxY2ZhMmQ5NmVhNGM5YmJhOGRmZTlkYTliMi4u
YzAwYjUxNmIzM2VjNWFkMTI5ZDU2YzNmZmQyM2U5ZjVlYzIwNWY3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgpAQCAtNDU5LDYgKzQ1
OSw3IEBACiAgICAgICJjbG9vcENhbGxOYXRpdmUiLCAgICAgICAgICMgb3BlcmFuZHM6IGNhbGxl
ZQogICAgICAiY2xvb3BDYWxsU2xvd1BhdGgiLCAgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0
LCBjdXJyZW50RnJhbWUsIGN1cnJlbnRQQwogICAgICAiY2xvb3BDYWxsU2xvd1BhdGhWb2lkIiwg
ICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBjdXJyZW50RnJhbWUsIGN1cnJlbnRQQworICAgICAi
Y2xvb3BDYWxsU2xvd1BhdGg0IiwgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBhMCwgYTEs
IGEyLCBhMwogCiAgICAgICMgRm9yIGRlYnVnZ2luZyBvbmx5OgogICAgICAjIFRha2VzIG5vIG9w
ZXJhbmRzIGJ1dCBzaW1wbHkgZW1pdHMgd2hhdGV2ZXIgZm9sbG93cyBpbiAvLyBjb21tZW50cyBh
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJh
c2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKaW5k
ZXggOTU4MTA1ZDMyNjZkZGZmODViZTVkNzZkODdjZGU1Y2IzMzEzMTRjMy4uNDhmZDkyZjhiNmE4
ZWQyOTQ0YTcyNDhiMTU3ZDJhZjcyNzczYzViNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIGlubGluZSBib29s
IGlzQ2FsbChDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAKIGNsYXNzIEV4ZWN1dGFibGVC
YXNlIDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7CiAK
IHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmgKaW5kZXggNWFhNTQyYTEyZjI3MWRiZGZmMDIwYjkxMGVkYmNjOWExMWM4
MzY1Ni4uMmU5YjUwNjYwNWNmYzZmMWM1ZWRkMjJkYWQ5NzNlNzNlYWE4ZjYxNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRF
eGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3gu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaAppbmRleCBmNmEwNWIwNjVlMzJkOGFl
Y2Q1NjdiZjZhYjc0YWFlNjM4OTk3Nzc4Li5lNDc3OTJiODc2NGU5MWQ1MDYxMGU0Y2RkYWUzMjMx
YzE0NTllMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCkBAIC0zMyw2ICsz
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoaml0Q2FnZVB0ciwgTm9QdHJUYWcpIFwKICAg
ICB2KHRhaWxDYWxsSlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KHRhaWxDYWxsSlNF
bnRyeVNsb3dQYXRoUHRyVGFnLCBOb1B0clRhZykgXAorICAgIHYodGFpbENhbGxXaXRob3V0VW50
YWdKU0VudHJ5UHRyVGFnLCBOb1B0clRhZykgXAogICAgIHYobG9vcE9TUkVudHJ5LCBOb1B0clRh
ZykgXAogICAgIHYoZW50cnlPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KHdhc21PU1JFbnRy
eSwgTm9QdHJUYWcpIFwKQEAgLTQ2LDIwICs0NywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2Rl
ZmluZSBKU0NfSlNfR0FURV9PUENPREVTKHYpIFwKICAgICB2KG9wX2NhbGwsIEpTRW50cnlQdHJU
YWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY29u
c3RydWN0LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9pdGVyYXRvcl9uZXh0LCBKU0VudHJ5
UHRyVGFnKSBcCiAgICAgdihvcF9pdGVyYXRvcl9vcGVuLCBKU0VudHJ5UHRyVGFnKSBcCi0gICAg
dihvcF9jYWxsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9j
YWxsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3Ns
b3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY2FsbF92YXJhcmdzX3Nsb3cs
IEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xv
dywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHNfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxf
dmFyYXJncywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3MsIEpT
RW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAg
IHYob3BfdGFpbF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVj
dF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9uZXh0X3Nsb3csIEpT
RW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRyeVB0clRh
ZykgXAorICAgIHYob3BfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2
KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihv
cF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9jYWxs
X2V2YWxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9pdGVyYXRvcl9u
ZXh0X3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3Jfb3Bl
bl9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDljZjVmZWEwMTk4NDlk
YjZlNjYwOTEwYmI5NDUxY2QyN2MyNWZiYzUuLmVjNDgyMmY1YTkwM2Q0ZmI4NWNiNDg0MWE0Y2Q2
OGYwYzEwYmZiZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEzOCw2
ICsxMzgsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJKU1dp
dGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50RXhjZXB0
aW9ucy5oIgogI2luY2x1ZGUgIk1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmgiCiAjaW5jbHVkZSAi
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlLmgiCkBAIC05MTAsNiArOTExLDQxIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kCiAgICAg
cmV0dXJuIExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2ludGVybmFsX2Z1
bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElMaW5rQ2FsbCgpCit7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiBnZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7
CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxp
bnRfbGlua19jYWxsX3RyYW1wb2xpbmUpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNF
bnRyeVB0clRhZz4gVk06OmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpCit7
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJl
dHVybiBnZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
dGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyNlbmRpZgorICAgIHJldHVybiBM
TEludDo6Y2FsbFRvVGhyb3coKnRoaXMpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gVk06
OmdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlIGNhbGxNb2RlKQoreworI2lmIEVOQUJMRShKSVQp
CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gdmlydHVhbFRodW5r
Rm9yKCp0aGlzLCBjYWxsTW9kZSk7CisjZW5kaWYKKyAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7Cisg
ICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSk7
CisgICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9s
aW5lKTsKKyAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBMTElu
dDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jb25zdHJ1
Y3RfdHJhbXBvbGluZSk7CisgICAgfQorICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworfQorCiBW
TTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKaW5kZXggMzg4MzgwNTRlMzczYWMwNzRmMjFmMGMyMWRkZDNhMGY1OGEzNjc3OS4uMDk2
NDVhYmRjNDNjY2VmM2MyMTViMTFiNzBkNjk4YzM0ODk0MzlkNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCkBAIC0xMDYsNiArMTA2LDggQEAgY2xhc3MgQmFzaWNCbG9ja0xvY2F0aW9u
OwogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK2NsYXNzIENhbGxMaW5rSW5mbzsKK2VudW0gY2xhc3Mg
Q2FsbE1vZGU7CiBzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2Rl
QmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CkBAIC05MDIsNiArOTA0LDkgQEAgY2xhc3MgVk0gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5v
ZGU8Vk0+IHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRCb3VuZEZ1bmN0aW9uKGJvb2wgaXNK
U0Z1bmN0aW9uLCBib29sIGNhbkNvbnN0cnVjdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IGdldENUSUxpbmtDYWxsKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gZ2V0Q1RJVmlydHVhbENh
bGwoQ2FsbE1vZGUpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBleGNlcHRpb25PZmZzZXQoKQog
ICAgIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggYjQzZmQ3NTllYjM3NTkwNTQ3YTM4ZGU4ZWMyMjE2YzgwMmIwMmFiNi4uNGMzMzg2OWRj
ZWEzNzQzMjYxMTE4YjlhYTY0NTBlYjJhMDkyNjVmZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMS0xMS0x
MSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFVz
ZSBDYWxsTGlua0luZm8gaW4gTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1h
d2FyZS1vZi1wcm94eS5qczoKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2Fz
bS1uYW1lLXNlY3Rpb24uanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9m
aWxlci52bS5pc1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9m
aWxlci13YXNtLmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIu
dm0uaXNXYXNtU3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIv
c2FtcGxpbmdQcm9maWxlci5qczoKKyAgICAgICAgKGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2UpOgor
ICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2Vj
dGlvbi5qczoKKwogMjAyMS0xMS0xMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNv
bT4KIAogICAgICAgICBJbmxpbmUgUmVnRXhwLnRlc3QgSklUIGNvZGUgaW4gREZHIGFuZCBGVEwK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1i
ZS1hd2FyZS1vZi1wcm94eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1u
ZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcwppbmRleCA1MGNhZWVkMTE0ODQyOWZkMWI1Y2Uw
YjBmZWFlNmJkZGRlNjcxMGI4Li45NGRhYjQ2ZDJkNzE4NGYzNWQ0M2UyZGI0YTJkZDU2NDE5OGJl
ZmY1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMt
dG8tYmUtYXdhcmUtb2YtcHJveHkuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUt
aW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCkBAIC0xLDQgKzEsNCBAQAotLy9A
IHJ1bkRlZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUgLS11c2VDb25jdXJyZW50SklUPWZh
bHNlIiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0x
MCIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xk
Rm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1p
emVTb29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQor
Ly9AIHJ1bkRlZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUiLCAiLS11c2VDb25jdXJyZW50
SklUPWZhbHNlIiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklU
U29vbj0xMCIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhy
ZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRM
T3B0aW1pemVTb29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRy
dWUiKQogCiBmdW5jdGlvbiBtYWluKCkgewogICAgIGxldCB2MTYyOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMgYi9KU1Rl
c3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwppbmRleCA2
ODlhMDA1YWI1NTVhMWZjNjAxYTU0ZTRlYmY5NGU5OWE2NjhmNzdlLi41YzIyMGZkNzZjZGM1YzQw
ZTU5Y2M2NmU1NzM0MmM3MmQ4YzdmM2FhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1w
bGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9z
YW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwpAQCAtNjksNSArNjksNSBAQAog
ICAgIHZhciB3YXNtRW50cnkgPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNl
LmV4cG9ydHMuX3BhcnJvdCgxKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9z
aWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNt
LWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNt
LWZ1bmN0aW9uW19wYXJyb3RdIiwgIndhc20tc3R1YiIsICIyNCIsICJ3YXNtRW50cnkiXSk7Cisg
ICAgcnVuVGVzdCh3YXNtRW50cnksIFsiX3NpbGx5IiwgIih1bmtub3duKSIsICI8Pz4ud2FzbS1m
dW5jdGlvbltfZWdnc10iLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXSIsICI8Pz4ud2FzbS1m
dW5jdGlvbltfc3BhbV0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF0iLCAiKHVua25vd24p
IiwgIndhc21FbnRyeSJdKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5n
LXByb2ZpbGVyLXdhc20uanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNt
LmpzCmluZGV4IGNkMjFmMjg4YzE0OGE0Yjc0MDViZjg2OGRlZjliNTQ1NzM0MDUwNDUuLjA2ZGYw
MTI0OTU5NjllMjg0MjE4Nzc4NjkwMTM1YmYwOTAxMGVjNmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
c3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItd2FzbS5qcwpAQCAtOCw1ICs4LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5
ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmxvb3AoMTAw
MDAwMDApOwogICAgIH07Ci0gICAgcnVuVGVzdCh3YXNtRW50cnksIFsiPD8+Lndhc20tZnVuY3Rp
b25bMF0iLCAid2FzbS1zdHViIiwgIjAiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2Fz
bUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnki
XSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1w
bGluZ1Byb2ZpbGVyLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxp
bmdQcm9maWxlci5qcwppbmRleCA5NjQyZGRjN2MxZTZmMDZlM2IxMzI3OWMwZTRhMDI1YjU0ZGNh
YmYxLi4xYjkyZTk0ODU0YWY2M2Y2N2QwOGY1NDg4N2M1MjE3OTE0ZWUyYmY1IDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCisr
KyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMK
QEAgLTcwLDExICs3MCwxMyBAQCBmdW5jdGlvbiBjaGVjayhub2RlKSB7CiAgICAgCiAgICAgbGV0
IG5vZGUgPSB0cmVlOwogICAgIGZvciAobGV0IGkgPSBzdGFja1RyYWNlLmxlbmd0aDsgaS0tOyAp
IHsKKyAgICAgICAgbGV0IHByZXYgPSBub2RlOwogICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJl
bltzdGFja1RyYWNlW2ldXTsKICAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICBpZiAo
VkVSQk9TRSkgewogICAgICAgICAgICAgICAgIHByaW50KCJmYWlsaW5nIG9uICIgKyBpICsgIiA6
ICIgKyBzdGFja1RyYWNlW2ldKTsKICAgICAgICAgICAgICAgICBwcmludChKU09OLnN0cmluZ2lm
eSh0cmVlKSk7CisgICAgICAgICAgICAgICAgcHJpbnQoT2JqZWN0LmtleXMocHJldi5jaGlsZHJl
bikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC0xMDgsNyArMTEwLDcgQEAgZnVuY3Rpb24gcnVuVGVzdChmdW5jLCBzdGFja1RyYWNlT3JT
dHJpbmcpIHsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUg
PCB0aW1lVG9GYWlsKTsKICAgICBwcmludChKU09OLnN0cmluZ2lmeShyb290LCB1bmRlZmluZWQs
IDIpKTsKLSAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2UsIHRydWUs
IHRydWUpOworICAgIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwgc3RhY2tUcmFjZU9yU3Ry
aW5nLCB0cnVlLCB0cnVlKTsKICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGFjayB0cmFjZSIp
OwogfQogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rp
b24uanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKaW5kZXgg
NjgwNWU2ODlmNWM4NzllMmNhNTA5Yzg4ZDNlN2IzNzZkZTA5ZmFhYS4uMzNjODZiZjFjZGU5YThk
YWIxMThlMGU0Y2IwYmFjZDU5Yjc0OTFlOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0
aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0
cy9uYW1lU2VjdGlvbi5qcwpAQCAtNjksNCArNjksNCBAQAogYXNzZXJ0LmVxKHN0YWNrdHJhY2Vb
M10sICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dQFt3YXNtIGNvZGVdIik7CiBhc3NlcnQuZXEo
c3RhY2t0cmFjZVs0XSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXUBbd2FzbSBjb2RlXSIpOwog
YXNzZXJ0LmVxKHN0YWNrdHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XUBbd2Fz
bSBjb2RlXSIpOwotYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW3dhc20gY29k
ZV0iKTsgLy8gd2FzbSBlbnRyeQorYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJA
W25hdGl2ZSBjb2RlXSIpOyAvLyB3YXNtIGVudHJ5Cg==
</data>
<flag name="commit-queue"
          id="468904"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444015</attachid>
            <date>2021-11-11 15:45:56 -0800</date>
            <delta_ts>2021-11-11 16:23:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111154555.patch</filename>
            <type>text/plain</type>
            <size>398675</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MjBmNmFkNjgyNzQ5ZmJhODUzOTc4ZDdlYmRiNTMzYjZhZmFjYjljLi5lZTQ1ZmUyMzBiNTY5MzQ1
ZTVjY2IyZWYxOGI2NmUwMjc1OWI0YzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTUgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oOgor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwOgor
ICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oOgorICAgICAgICAoSlNDOjpjYWxsTGlua0luZm9Gb3IpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJT
dHViKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZSk6
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnZpc2l0V2Vhayk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9TdHViKToKKyAgICAgICAgKiBieXRl
Y29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjppc0xpbmtl
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c3R1YiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRTbG93U3R1Yik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJTbG93U3R1Yik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGlu
ZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
ZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludE9y
QmFzZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hM
TEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9SZXBhdGNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAuCisgICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAg
ICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU93bmVy
KToKKyAgICAgICAgKEpTQzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OnJl
dmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6anNU
b1dhc21JQ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAg
IChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2gu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oLgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpo
YW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjp2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJl
ZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFi
aWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8pOgorICAgICAgICAoSlND
OjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpK
SVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6
CisgICAgICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
dmlydHVhbEZvcldpdGhGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgIChK
U0M6OnZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF9saW5rX2NhbGwpOgorICAgICAg
ICAoSlNDOjpMTEludDo6bGxpbnRfdmlydHVhbF9jYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAg
ICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwp
OgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOiBEZWxldGVkLgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAgICAgICAoSlND
OjpMTEludDo6Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVy
bkxvY2F0aW9uVGh1bmspOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wUmVnaXN0ZXI6Om9wZXJhdG9y
IENhbGxMaW5rSW5mbyopOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAg
ICAgKiBvZmZsaW5lYXNtL2Nsb29wLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rp
b25zLnJiOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2F0ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJTGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisKIDIwMjEtMTEtMTEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIERpc2FibGUgSklUIHJ1bnMgb2YgdGhlIEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3Qgd2hlbiAhRU5BQkxFKEpJVCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggMTJjNGE1YzgyNzdjYTc3MDFkODQ5ZWZmNjQ2N2JkODg3OTU5MDAwOC4uY2M0MWZjMDNkMGEw
ODZjYzc3Y2U0ZTdkMDAyZGUxN2M4NjQzMjAxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtNjU5LDcgKzY1OSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmgKICAgICBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAogICAgIGJ5dGVj
b2RlL0p1bXBUYWJsZS5oCi0gICAgYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAogICAgIGJ5
dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCiAg
ICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAogICAgIGJ5dGVjb2RlL0xpbmtU
aW1lQ29uc3RhbnQuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4OWM5YzE3NGJi
MjIzYjM2YzM5NmJhZmM0NmZlMTE2NmE2ODIwZjQzLi4zMTViNGYwZjk2ZTQxNzM3ZjM3YjAxMTlm
NzBjNmI2OTk3MTQ4OGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ3LDcg
KzE0Nyw2IEBACiAJCTBGMENBRUZDMUVDNERBNkIwMDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBDQUVGQTFFQzREQTYyMDA5NzBEMTIgLyogSlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENBRUZGMUVD
NERBODgwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAv
KiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0
SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYwRkM0NUExNEJE
MTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJ
bnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjEwRjFBMzFDNDIwQkYwMDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEwRjFBMjFDNDIwQkYw
MDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggKi87IH07CiAJCTBGMTJERTEwMTk3OUQ1RkQwMDA2RkY0
RSAvKiBFeGNlcHRpb25GdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTM2RDRE
MTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODYs
NyArMTg1LDYgQEAKIAkJMEYyNEU1NDQxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNGMTdFQTlG
NTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3
IC8qIFRlbXBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjRF
NTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRj
aC5oICovOyB9OwogCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1
NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IH07CkBAIC0xODkyLDYgKzE4OTAs
NyBAQAogCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzM0Y1MDg2MUI4NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVj
dG9yLmx1dC5oICovOyB9OwogCQlFMzQwMEVDMTIyQTFDQzdCMDA5REVENTQgLyogRnVuY3Rpb25F
eGVjdXRhYmxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM0MDBFQzAyMkExQ0M3ODAwOURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlu
bGluZXMuaCAqLzsgfTsKIAkJRTM0OUE3ODEyNDkxRjE2MTAwMUJBMzM2IC8qIERGR0NvZGVPcmln
aW5Qb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzQ5QTc4MDI0OTFGMTVBMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzREMUFFNTI3M0RDOTFG
MDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEQxQUU0MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5s
aW5lcy5oICovOyB9OwogCQlFMzRFNjU3NTIwNjY4RUFBMDBGQjgxQUMgLyogUGFyc2VIYXNoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRFNjU3MzIw
NjY4RThEMDBGQjgxQUMgLyogUGFyc2VIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM0RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1l
VHJhY2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM0RURCRjYxREI1RkZDMTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNEY5MzBFMjMyMkQ4ODIwMDJC
OERCNCAvKiBKU0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTM0RjkzMEMyMzIyRDg4MTAwMkI4REI0IC8qIEpTR2VuZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MDYsNiAr
MTkwNSw3IEBACiAJCUUzNUEwQjlEMjIwQUQ4N0EwMEFDNDQ3NCAvKiBFeGVjdXRhYmxlQmFzZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NUEwQjlDMjIwQUQ4N0EwMEFDNDQ3NCAvKiBFeGVjdXRhYmxlQmFzZUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVDQTE1NDFEQkMz
QTVDMDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklU
SGVhcFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTM1Q0ExNTYxREJDM0E1RjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTAxREJD
M0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNUUzNjNFMjczREM4QzYwMERCMjRDQyAv
KiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICovOyB9OwogCQlFMzVFODlG
RDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTg5RkIyNUM1MEY4NjAwNzFFRTFFIC8qIEJp
Z0ludDY0QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMzVFODlGRTI1QzUwRjg3MDA3MUVFMUUgLyogQmlnVWludDY0QXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUU4OUZDMjVDNTBG
ODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5r
VGltZUNvbnN0YW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzkxLDcgKzIz
OTEsNiBAQAogCQkwRjBDQUVGRTFFQzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxi
YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBGaW5hbGl6ZXJDYWxs
YmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMDE1RjFBNjA0MDAz
MkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0
IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTBG
MUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQ3VzdG9tLmg7IHBhdGggPSBiMy9haXIvQWlyQ3VzdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNl
cHRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2Vw
dGlvbkZ1enouY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEyREUwRTE5NzlE
NUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFeGNlcHRpb25GdXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NDU0LDggKzI0NTMsNiBAQAogCQkwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NDYxN0VFMjc0OTAw
QUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0
ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRlbXBSZWdpc3RlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1MzE3
RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUNhbGxGcmFtZVNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxs
RnJhbWVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQ2FsbEZy
YW1lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjA3LDYgKzUyMDQsNyBA
QAogCQlFMzQwMEVDMDIyQTFDQzc4MDA5REVENTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNDlBNzdGMjQ5MUYxNTkwMDFCQTMzNiAvKiBERkdDb2Rl
T3JpZ2luUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb2RlT3JpZ2luUG9vbC5jcHA7
IHBhdGggPSBkZmcvREZHQ29kZU9yaWdpblBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzQ5QTc4MDI0OTFGMTVBMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ29kZU9yaWdpblBvb2wuaDsgcGF0aCA9IGRmZy9ERkdDb2RlT3Jp
Z2luUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzREMUFFNDI3M0RDOTFG
MDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVwYXRjaElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0
RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8qIFBhcnNlSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYXJzZUhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM0RTY1NzQyMDY2OEU4RTAwRkI4MUFDIC8qIFBhcnNlSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZUhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMzRFREJGNjFEQjVGRkMxMDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lVHJhY2Vycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTIyOSw2ICs1MjI3LDggQEAKIAkJRTM1Q0ExNTAxREJDM0E1
NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01KSVRBYnN0cmFjdEhlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTM1Q0ExNTExREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyog
RE9NSklUSGVhcFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJ
VEhlYXBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzVFMzYzQzI3M0RD
OEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNUUzNjNEMjczREM4
QzYwMERCMjRDQyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFODlG
QjI1QzUwRjg2MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCaWdJbnQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNUU4OUZDMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWdVaW50NjRBcnJheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25z
dGFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDU4LDggKzY0NTgsNiBAQAogCQkJ
CTYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oICovLAogCQkJCTBGQzMx
NDE0MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAx
ODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggKi8sCi0JCQkJMEYyNEU1NDkxN0VFMjc0
OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLAotCQkJCTBGMjRFNTRBMTdFRTI3NDkwMEFCQjIx
NyAvKiBSZXBhdGNoLmggKi8sCiAJCQkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3
IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCTBGRUU5ODQyMUE4OTIyNzUw
MDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgKi8sCkBAIC04ODE1LDcgKzg4MTMsNiBA
QAogCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oICovLAogCQkJCUUzNjM3RUU4MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50
LmNwcCAqLywKIAkJCQlFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFu
dC5oICovLAotCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5m
by5oICovLAogCQkJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAogCQkJCTUzRkEyQUUwMUNGMzdG
M0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCAqLywKIAkJCQkxNEY3OUY2RTIxNkVBRDUwMDAwNDZEMzkgLyogTWV0YWRhdGFUYWJsZS5j
cHAgKi8sCkBAIC04ODYyLDYgKzg4NTksOSBAQAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3
MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8sCiAJCQkJMEZGNjBBQkYxNjc0MEY4MTAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICovLAogCQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3
OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8sCisJCQkJRTM1RTM2M0QyNzNEQzhDNjAwREIyNEND
IC8qIFJlcGF0Y2guY3BwICovLAorCQkJCUUzNUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBh
dGNoLmggKi8sCisJCQkJRTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJbmxpbmVz
LmggKi8sCiAJCQkJODY1REEwQzkyNUI4OTYyQTAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0
YXR1cy5jcHAgKi8sCiAJCQkJODY1REEwQzcyNUI4OTYwQzAwODc1NzcyIC8qIFNldFByaXZhdGVC
cmFuZFN0YXR1cy5oICovLAogCQkJCTg2NURBMEM2MjVCODk1OUUwMDg3NTc3MiAvKiBTZXRQcml2
YXRlQnJhbmRWYXJpYW50LmNwcCAqLywKQEAgLTk3NDcsNiArOTc0Nyw3IEBACiAJCQkJRkVBMDg2
MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTlGQTdDNTI3M0M4QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUz
NDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBEZWZlcnJlZFdvcmtUaW1lci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDMyMyw4ICsxMDMyNCw2IEBACiAJCQkJQTM4RDI1MEUyNTgwMEQ0NDAwNDJCRkRE
IC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZ
YXJySklULmggaW4gSGVhZGVycyAqLywKLQkJCQk2NTNCQzQzRjI2RDAxM0E2MDBEOEJFMjAgLyog
WWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAw
OTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlERDdGNTIz
QzFCQkI1MDA5MDVGMTMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTEwNTI2LDcgKzEwNTI1LDYgQEAKIAkJCQlFMzYzN0VFOTIzNkU1NkIwMDA5NkJEMEEg
LyogTGlua1RpbWVDb25zdGFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVBNkIwRkI0NjBD
RjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwREU5QTA5
MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJbnRDb21tb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAvKiBMTEludERhdGEu
aCBpbiBIZWFkZXJzICovLApAQCAtMTA3MjYsNyArMTA3MjQsOCBAQAogCQkJCUE1QkExNUU4MTgy
MzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk5MkY1NkI3MUU0RTg0QjIwMDM1OTUzQiAvKiBSZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI0RTU1MTE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1RTM2M0UyNzNEQzhDNjAw
REIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCUUzNEQxQUU1MjczREM5MUYw
MDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RjNGQjky
NjEzQzc4OTAwNjlFODlGIC8qIFJlc291cmNlRXhoYXVzdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFM0I2NDJGMjVENkZCNEQwMDFBRERCNCAvKiBSb290TWFya1JlYXNvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMDc4NCw3ICsxMDc4Myw2IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAw
QjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEy
RUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlGRTlGQTdDNTI3M0M4QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RTE1
RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTEwNTIsNiArMTEwNTAsOCBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYw
MEVEQUY3MSAvKiBZYXJyRXJyb3JDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIy
MzQ3NDkxMDBCMUE5QUIgLyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzRjBGQzk1MjZBMTFCNEEwMDk5RkZBMCAvKiBZYXJyTWF0Y2hpbmdDb250
ZXh0SG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0Ig
LyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA3OTNmNDZmN2JjNThlNTA4Y2RhNmNiOTAxNWFhMDkyZThjOTg2MGQ5Li5iNjk1
NTU3YWZlNjBmMTQ3NTEwMDliMWI1MDVmNTUxMzM0MDViOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CkBAIC0yNzMsNiArMjczLDcgQEAgYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCiBi
eXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAog
Ynl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKK2J5dGVjb2RlL1JlcGF0Y2guY3BwCiBieXRl
Y29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRW
YXJpYW50LmNwcAogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCkBAIC02NzYsNyArNjc3LDYg
QEAgaml0L1JlZy5jcHAKIGppdC9SZWdpc3RlckF0T2Zmc2V0LmNwcAogaml0L1JlZ2lzdGVyQXRP
ZmZzZXRMaXN0LmNwcAogaml0L1JlZ2lzdGVyU2V0LmNwcAotaml0L1JlcGF0Y2guY3BwCiBqaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAog
aml0L1Nsb3dQYXRoQ2FsbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0NvZGVMb2NhdGlvbi5oCmluZGV4IGE2Y2E1YzgxYzUxMDk1ZjgxOThkOWI4MmRiMTRhNTgxYTI1
Y2U2MDkuLjA3NTA0YmEwNGU1OWI2ZDFkY2EyMzU4OGJlZmI1NGRmMTkxODVhMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaApAQCAtMjcsOCAr
MjcsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKLSNpZiBFTkFC
TEUoQVNTRU1CTEVSKQotCiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBjbGFzcyBOZWFyQ2FsbE1v
ZGUgOiB1aW50OF90IHsgUmVndWxhciwgVGFpbCB9OwpAQCAtMjY5LDUgKzI2NywzIEBAIGlubGlu
ZSBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21t
b248dGFnPjo6Y29udmVydGliCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwCmluZGV4IDA2MjQwZTg3NDM2Mzg3M2I5ZGYyY2M5ZjM3ZjM4MjkxOGZlN2Uy
OWUuLmZmOTMwNTg5ZGIyNzExODBkMDk5ZTIzNTZjOTk3ZGM1OWIzNTZlNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcApAQCAtMzIsNyArMzIs
NiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNp
bmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgogCiAj
aWYgT1MoTElOVVgpCiAjaW5jbHVkZSAiUGVyZkxvZy5oIgpAQCAtNDMsMjkgKzQyLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBzaXplX3QgTGlua0J1ZmZlcjo6c19wcm9maWxlQ3VtbXVsYXRpdmVMaW5r
ZWRTaXplc1tMaW5rQnVmZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIHNpemVfdCBMaW5rQnVmZmVy
OjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZENvdW50c1tMaW5rQnVmZmVyOjpudW1iZXJPZlBy
b2ZpbGVzXTsKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCi17Ci0gICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCk7Ci19Ci0KLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9u
TW9kZSBtb2RlKQotewotICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFdh
c206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1
bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdN
b2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU6
Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHkoKTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBMaW5r
QnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29k
ZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKaW5kZXggNWEz
ZjAwZjA1YzY4NTgyOTU3NzI2NjdmYzIyMzU2N2Y2OGU5MmI4Ny4uMjg1ZGYwZDFhMTgwOWRiMjBi
NDc5NGNkMzEyMDU5ZWZjNmVlMDBlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmgKQEAgLTQzLDEyICs0Myw2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1uYW1lc3BhY2UgV2FzbSB7Ci1lbnVtIGNsYXNzIENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3Q7
Ci19Ci0KLWNsYXNzIENvZGVCbG9jazsKLQogLy8gTGlua0J1ZmZlcjoKIC8vCiAvLyBUaGlzIGNs
YXNzIGFzc2lzdHMgaW4gbGlua2luZyBjb2RlIGdlbmVyYXRlZCBieSB0aGUgbWFjcm8gYXNzZW1i
bGVyLCBvbmNlIGNvZGUgZ2VuZXJhdGlvbgpAQCAtNDQ2LDggKzQ0MCw2IEBAIGNsYXNzIExpbmtC
dWZmZXIgewogICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRo
b3V0RGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFnPigpKQogI2VuZGlmCiAKLWJvb2wgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwotCiAjZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9S
KGNvZGVCbG9jaywgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCAuLi4pICBcCiAg
ICAgRklOQUxJWkVfQ09ERV9JRigoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNvZGVCbG9jaykg
fHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVz
dWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApAQCAtNDc2LDggKzQ2OCw2IEBAIGJvb2wgc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwogI2RlZmluZSBGSU5BTElaRV9SRUdFWFBf
Q09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIGRhdGFMb2dGQXJndW1lbnRz
Rm9ySGVhZGluZykgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKEpTQzo6T3B0aW9uczo6YXN5bmNE
aXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0
clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKQogCi1ib29sIHNob3VsZER1bXBEaXNh
c3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwotCiAjZGVmaW5lIEZJTkFMSVpFX1dB
U01fQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIC4uLikgIFwKICAgICBG
SU5BTElaRV9DT0RFX0lGKChKU0M6Ok9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBKU0M6
Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1i
bHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgX19WQV9BUkdTX18pCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmNwcAppbmRleCA1ZDU2NzQxZWZlNjY0MjZlZmNhMjA1MmFjMjUwOTgzMjIw
MjM3N2QwLi43MGRiMGQwMzllYTdlZDYxMWM4YTZlNWQ4MDg5MTNmMGFkNWJkNTU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuY3BwCkBAIC0yNiw4ICsyNiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1
ZGUgIkpTQ1B0clRhZy5oIgorI2luY2x1ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKICNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC02Myw1
ICs2NiwyOCBAQCBDU3RyaW5nIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OmRpc2Fzc2VtYmx5
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseQogICAgIHJldHVybiBvdXQudG9DU3Ry
aW5nKCk7CiB9CiAKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpOworfQorCitib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlv
bk1vZGUgbW9kZSkKK3sKKyAgICBpZiAoT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHko
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBX
YXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGU6CisgICAgICAgIHJldHVybiBPcHRpb25zOjpk
dW1wQkJRRGlzYXNzZW1ibHkoKTsKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01H
TW9kZToKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2Rl
OgorICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IDkyNTU5MThiMWJhMTc1YTFmNDlk
YzMwMjVlYzZmY2E4ODkzOWQzNjQuLjFlYTMyNDU0MTVhYjA4YTQ1YzdkM2U1OTU5NjBjNDQ1YjE5
ZmY3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAtNTQsNiArNTQsMTEgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2VudW0gY2xhc3MgQ29tcGlsYXRpb25Nb2RlIDogdWlu
dDhfdDsKK30gLy8gbmFtZXNwYWNlIFdhc20KKworY2xhc3MgQ29kZUJsb2NrOwogdGVtcGxhdGU8
UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiAKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKQEAgLTM3Nyw3ICszODIsMTAgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlIHsKIAogICAgIHZvaWQgZHVtcFdp
dGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgICAgIGlmIChtX3Zh
bHVlKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1l
KGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5h
bWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKICAgICB9CiAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOyB9
CkBAIC01MzcsNiArNTQ1LDkgQEAgaW5saW5lIEZ1bmN0aW9uUHRyPHRhZz46OkZ1bmN0aW9uUHRy
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IHB0cikKIHsKIH0KIAorYm9vbCBzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7Citib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihXYXNtOjpDb21waWxhdGlvbk1vZGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNw
YWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5yYgppbmRleCBiZTJlOGM4MTFkNmRkZDBjMTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyLi4wMTM4
NjBiNjZjMmIxOWE4Y2JiNTk1M2E1ZDBlNDRkZDI3N2ZiZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI2LDYgKzI2LDcgQEAKIAog
ICAgIDpCYXNpY0Jsb2NrTG9jYXRpb24sCiAgICAgOkJvdW5kTGFiZWwsCisgICAgOkNhbGxMaW5r
SW5mbywKICAgICA6RGVidWdIb29rVHlwZSwKICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlw
ZVdpdGhFeHRlbnNpb24sCkBAIC00NCw3ICs0NSw2IEBACiAgICAgOkpTU2NvcGUsCiAgICAgOkpT
VHlwZSwKICAgICA6SlNWYWx1ZSwKLSAgICA6TExJbnRDYWxsTGlua0luZm8sCiAgICAgOlJlc3Vs
dFR5cGUsCiAgICAgOk9wZXJhbmRUeXBlcywKICAgICA6UHJpdmF0ZUZpZWxkUHV0S2luZCwKQEAg
LTg0MCw3ICs4NDAsOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAg
ICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAt
ODUyLDcgKzg1Myw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAg
ICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04
NjUsNyArODY3LDggQEAKICAgICAgICAgZWNtYU1vZGU6IEVDTUFNb2RlLAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAg
ICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBA
IC04NzksNiArODgyLDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAogICAgIH0sCkBAIC05MDAsNiArOTA0LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGlu
dCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExp
bmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MjEsNiArOTI2LDcgQEAKICAgICAgICAg
Zmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxM
aW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KQEAgLTkzMyw3ICs5Mzks
OCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5r
SW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwK
ICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtOTQ3LDYgKzk1NCw3
IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewor
ICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApA
QCAtMTI0OSw3ICsxMjU3LDggQEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25N
ZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6
IFZhbHVlUHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywK
KyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmls
ZTogQXJyYXlQcm9maWxlLAogICAgICAgICBpdGVyYXRvclByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
ICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBuZXh0
UHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTI3Miw3ICsxMjgxLDggQEAKICAgICBtZXRhZGF0
YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAog
ICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJ
bmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0lu
Zm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBuZXh0UmVz
dWx0UHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgICAgICBkb25lTW9kZU1ldGFkYXRhOiBHZXRC
eUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBkb25lUHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAt
MTM5Myw2ICsxNDAzLDkgQEAKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDQK
IG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDUKIG9wIDpsbGludF9jbG9vcF9k
aWRfcmV0dXJuX2Zyb21fanNfNDYKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNf
NDcKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDgKK29wIDpsbGludF9jbG9v
cF9kaWRfcmV0dXJuX2Zyb21fanNfNDkKIAogZW5kX3NlY3Rpb24gOkNMb29wSGVscGVycwogCkBA
IC0xNDE1LDYgKzE0MjgsMTAgQEAKIG9wIDpsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xp
bmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGlu
dF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X2xpbmtf
Y2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUKK29wIDps
bGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF90YWls
X2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2Nh
bGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOm5v
cm1hbF9vc3JfZXhpdF90cmFtcG9saW5lCkBAIC0xNDIzLDYgKzE0NDAsOCBAQAogb3AgOmxsaW50
X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24KIG9wIDpvcF9jYWxsX3JldHVybl9sb2NhdGlvbgog
b3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9jYWxsX3ZhcmFyZ3NfcmV0
dXJuX2xvY2F0aW9uCitvcCA6b3BfY29uc3RydWN0X3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uCiBv
cCA6b3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0
X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9nZXRfYnlfaWRfcmV0dXJuX2xv
Y2F0aW9uCkBAIC0xNDM4LDE1ICsxNDU3LDE1IEBACiBvcCA6b3BfY29uc3RydWN0X3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbgog
b3AgOm9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb24KLW9wIDpvcF90YWlsX2Nh
bGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
CiBvcCA6b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
CiBvcCA6b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9j
YWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb24KIAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2Fs
bAotb3AgOmpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsCiBvcCA6anNfdHJhbXBvbGluZV9vcF9j
b25zdHJ1Y3QKK29wIDpqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJncworb3AgOmpzX3RyYW1w
b2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3MKIG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9y
X25leHQKIG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW4KIG9wIDpqc190cmFtcG9s
aW5lX29wX2NhbGxfc2xvdwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAppbmRleCA0ZjQ3Yzhi
Y2NmOGU1NzQ4YWE5YjBmMzZlNmYzNjMwNWFkYzMwMDExLi4yNzBjZDZmMWQwMmY0NGQ1M2RiM2U2
YWE2M2FmZmExNWUwYzA5MjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaApAQCAtMTgw
LDcgKzE4MCw3IEBAIHB0cmRpZmZfdCBzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHVuc2lnbmVkIGNoZWNrCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlTWV0YWRhdGE+Ci1MTEludENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvRm9y
KEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCitD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwg
dW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewogICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50
SW5kZXgpOwogICAgIHJldHVybiBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mbzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKaW5kZXggM2I4MDNiMzhh
Nzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBhNTU4YS4uYTFhZmNmOTM4YTUxZjJiYzE3MmYwZmQy
MDI3MTMyZTY3MmVlZDk3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJUaHVua0dlbmVy
YXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAotI2lmIEVOQUJMRShKSVQpCiBu
YW1lc3BhY2UgSlNDIHsKIAogQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBDYWxsTGlua0luZm86OmNh
bGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKQpAQCAtODIsMTEgKzgxLDEzIEBAIENhbGxMaW5r
SW5mbzo6fkNhbGxMaW5rSW5mbygpCiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhclN0dWIoKQog
eworI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCFzdHViKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fc3R1Yi0+Y2xlYXJDYWxsTm9kZXNGb3IodGhpcyk7CiAgICAgbV9zdHViID0gbnVsbHB0
cjsKKyNlbmRpZgogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKQEAgLTEx
MywxOSArMTE0LDE5IEBAIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxM
aW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKICAgICByZXR1cm4gbV9kb25lTG9jYXRpb247CiB9CiAK
LXN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7Ci0K
IHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBS
RUxFQVNFX0FTU0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSkgJiBwb2x5bW9y
cGhpY0NhbGxlZU1hc2spKTsKICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLnNldCh2bSwgb3duZXIs
IGNhbGxlZSk7CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgCisgICAgaWYgKGlzRGF0YUlDKCkpCiAg
ICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOwog
ICAgIGVsc2UgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIGNhbGxlZSk7CisjZW5kaWYKICAgICB9
CiB9CiAKQEAgLTEzNSw4ICsxMzYsMTEgQEAgdm9pZCBDYWxsTGlua0luZm86OmNsZWFyQ2FsbGVl
KCkKICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLmNsZWFyKCk7CiAgICAgaWYgKGlzRGF0YUlDKCkp
CiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRy
OwotICAgIGVsc2UgaWYgKCFjbGVhcmVkQnlKZXR0aXNvbigpKQorICAgIGVsc2UgaWYgKCFjbGVh
cmVkQnlKZXR0aXNvbigpKSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIG51bGxwdHIpOwor
I2VuZGlmCisgICAgfQogfQogCiBKU09iamVjdCogQ2FsbExpbmtJbmZvOjpjYWxsZWUoKQpAQCAt
MjI0LDYgKzIyOCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAg
IAogICAgIGlmIChpc0xpbmtlZCgpKSB7CiAgICAgICAgIGlmIChzdHViKCkpIHsKKyNpZiBFTkFC
TEUoSklUKQogICAgICAgICAgICAgaWYgKCFzdHViKCktPnZpc2l0V2Vhayh2bSkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkgewogICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKApAQCAtMjM0LDYgKzIzOSw3IEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgICAgICAgICAgICAgIHVubGluayh2bSk7CiAgICAg
ICAgICAgICAgICAgbV9jbGVhcmVkQnlHQyA9IHRydWU7CiAgICAgICAgICAgICB9CisjZW5kaWYK
ICAgICAgICAgfSBlbHNlIGlmICghdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZU9yQ29kZUJsb2Nr
LmdldCgpKSkgewogICAgICAgICAgICAgaWYgKGlzRGlyZWN0KCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkgewpAQCAtMjgwLDEzICsyODYs
MTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgfQogfQogCisj
aWYgRU5BQkxFKEpJVCkKIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGNv
bnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJiBzaHVmZmxlRGF0YSkKIHsKICAgICBtX2ZyYW1lU2h1
ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0YSk7
CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxs
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwg
U2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIApAQCAtMzQ1LDcgKzM1Miw3IEBAIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsCiAgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBj
YWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51bGxw
dHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWls
Q2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogICAgIHNldFVzZXNE
YXRhSUNzKFVzZURhdGFJQzo6Tm8pOwpAQCAtMzU4LDcgKzM2NSw3IEBAIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSCiAgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxs
ZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENh
bGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpOwogICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BS
LCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVG
b3JUYWlsQ2FsbCkpOwpAQCAtMzY2LDcgKzM3Myw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYK
IAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0KQogewotICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkpOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSUxpbmtDYWxsKCku
Y29kZSgpKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyks
IEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQ
dHJUYWcpOwogfQpAQCAtMzc2LDIxICszODMsMzEgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
YXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmYK
ICAgICBqaXQubW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQorI2VuZGlmCiAKLXZvaWQg
Q2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxsTGlua0lu
Zm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSKQordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBD
YWxsVHlwZSBjYWxsVHlwZSwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0YSkKIHsKLSAgICBtX2NvZGVPcmlnaW4gPSBDb2Rl
T3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOwotICAgIHNldFVwQ2Fs
bCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKLSAgICBtX2RvbmVM
b2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKLSAgICBpZiAodW5s
aW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgIFVOVVNFRF9QQVJBTShm
cmFtZVNodWZmbGVEYXRhKTsKKyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKGJ5dGVjb2Rl
SW5kZXgpOworICAgIG1fY2FsbFR5cGUgPSBjYWxsVHlwZTsKKyNpZiBFTkFCTEUoSklUKQorICAg
IEdQUlJlZyBjYWxsZWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSID0gR1BSSW5mbzo6cmVnVDI7CisgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7Cisg
ICAgaWYgKGZyYW1lU2h1ZmZsZURhdGEpIHsKICAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUgbmlj
ZSBpZiB0aGlzIHdlcmUgYSByZWZjb3VudGVkIGRhdGEgc3RydWN0dXJlLgotICAgICAgICBtX2Zy
YW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5r
ZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSk7CisgICAgICAgIG1fZnJhbWVTaHVmZmxl
RGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCpmcmFtZVNodWZmbGVEYXRh
KTsKICAgICB9Ci0gICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOwogICAgIHUuZGF0
YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOwotICAgIHNldFNsb3dQYXRo
Q2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVt
cGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworI2VuZGlmCisgICAgc2V0VXNl
c0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
KHZtLmdldENUSUxpbmtDYWxsKCkuY29kZSgpKTsKKyAgICAvLyBJZiBKSVQgaXMgZGlzYWJsZWQs
IHdlIHNob3VsZCBub3Qgc3VwcG9ydCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY2FsbCBJQy4KKyAg
ICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBkaXNhbGxvd1N0dWJzKCk7CiB9CiAK
KyNpZiBFTkFCTEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsK
QEAgLTQwNiw3ICs0MjMsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0KQogICAgIH0pOwogfQogCi12b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVj
dFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFNjb3BlZExhbWJkYTx2b2lkKCk+
JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwo
KSk7CiAKQEAgLTQ2Miw2ICs0NzksNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RGlyZWN0Q2Fs
bFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiB0YXJnZXQpCiAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCB0
YXJnZXQpOwogfQorI2VuZGlmCiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
IHsKQEAgLTQ4MywxMSArNTAxLDE0IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9T
dHViKCkKICAgICAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5jbGVhcigpOwogICAgICAgICB1LmRh
dGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gbnVsbHB0cjsKICAgICB9IGVsc2Ug
eworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIENDYWxsSGVscGVyczo6cmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0
YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRp
b24pLCBjYWxsZWVHUFIoKSwgbnVsbHB0cik7CisjZW5kaWYKICAgICB9CiB9CiAKKyNpZiBFTkFC
TEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86OnNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lPiYmIG5ld1N0dWIpCiB7CiAgICAgY2xlYXJTdHViKCk7CkBAIC01MDQsNyArNTI1
LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lPiYmIG5ld1N0dWIpCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zdHViLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgfQogfQorI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAppbmRleCBlNWY3N2NmMzdi
ZjI2NmY0YjljOTNjNTBjZjk5NmQyMWM2NjhjZTQ1Li5iMmQzYWZhNmNmNjBkMTViZTdhNWQ0OWQ4
NjJjYzQ1Y2Y4YjU4YTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCkBAIC0yOCwyNSArMjgsMjkgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVm
ZmxlRGF0YS5oIgogI2luY2x1ZGUgIkNhbGxNb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9u
LmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKEpJVCkKLQogY2xhc3MgQ0NhbGxIZWxw
ZXJzOworY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNs
YXNzIEpTRnVuY3Rpb247CitjbGFzcyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTsKIGVudW0g
T3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAorc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogc3Ry
dWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOwogCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMg
UGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgorICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKICAgICBlbnVtIENhbGxUeXBlIDogdWlu
dDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIENhbGwsCkBAIC01OSw2ICs2Myw4IEBAIGNs
YXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJ
bmZvPiB7CiAgICAgICAgIERpcmVjdENvbnN0cnVjdCwKICAgICAgICAgRGlyZWN0VGFpbENhbGwK
ICAgICB9OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxs
ZWVNYXNrID0gMTsKICAgICAKICAgICBzdGF0aWMgQ2FsbFR5cGUgY2FsbFR5cGVGb3IoT3Bjb2Rl
SUQgb3Bjb2RlSUQpOwogCkBAIC0xNzQsMzUgKzE4MCw0MyBAQCBjbGFzcyBDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBy
ZXR1cm4gaXNWYXJhcmdzQ2FsbFR5cGUoc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUp
KTsKICAgICB9CiAKLSAgICBib29sIGlzTGlua2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdHViIHx8
IG1fY2FsbGVlT3JDb2RlQmxvY2s7IH0KKyAgICBib29sIGlzTGlua2VkKCkgY29uc3QgeyByZXR1
cm4gc3R1YigpIHx8IG1fY2FsbGVlT3JDb2RlQmxvY2s7IH0KICAgICB2b2lkIHVubGluayhWTSYp
OwogCisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHNldFVwQ2FsbChDYWxsVHlwZSBjYWxsVHlw
ZSwgR1BSUmVnIGNhbGxlZUdQUikKICAgICB7CiAgICAgICAgIG1fY2FsbFR5cGUgPSBjYWxsVHlw
ZTsKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCi0gICAgdm9pZCBp
bml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKLQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQorI2VuZGlmCisKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBDYWxsVHlwZSwgQnl0ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEqKTsKICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewogICAgICAg
ICBZZXMsCiAgICAgICAgIE5vCiAgICAgfTsKIAorI2lmIEVOQUJMRShKSVQpCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRV
Uk47Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgU2NvcGVkTGFt
YmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKLSAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOworICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENh
bGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CiAgICAgc3Rh
dGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUik7CisKKyAgICB2b2lkIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAg
dm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
KTsKKyNlbmRpZgorCiAgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CiAKICAgICBib29sIGlz
RGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3VzZURhdGFJ
QykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIxNyw3ICsyMzEsNiBAQCBjbGFzcyBDYWxsTGlu
a0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAg
ICAgICBtX2RvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICB9CiAKLSAgICB2b2lkIGlu
aXRpYWxpemVEaXJlY3RDYWxsKCk7CiAKICAgICBib29sIGFsbG93U3R1YnMoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG93U3R1YnM7IH0KIApAQCAtMjM3LDcgKzI1MCw2IEBAIGNsYXNzIENhbGxMaW5r
SW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAg
dm9pZCBzZXRDb2RlQmxvY2soVk0mLCBKU0NlbGwqLCBGdW5jdGlvbkNvZGVCbG9jayopOwogICAg
IHZvaWQgY2xlYXJDb2RlQmxvY2soKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
KCk7Ci0gICAgdm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KTsKIAogICAgIHZvaWQgc2V0TGFzdFNlZW5DYWxsZWUoVk0mLCBjb25zdCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlKTsKICAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxs
ZWUoKTsKQEAgLTI0NywyMiArMjU5LDE4IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQ
YWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgdm9pZCBzZXRFeGVjdXRh
YmxlRHVyaW5nQ29tcGlsYXRpb24oRXhlY3V0YWJsZUJhc2UqKTsKICAgICBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSgpOwogICAgIAorI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXRTdHVi
KFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJik7CisjZW5kaWYKICAgICB2b2lkIGNs
ZWFyU3R1YigpOwogCiAgICAgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIoKSBjb25z
dAogICAgIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICByZXR1cm4gbV9zdHViLmdldCgpOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0U2xvd1N0dWIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIG5ld1Ns
b3dTdHViKQotICAgIHsKLSAgICAgICAgbV9zbG93U3R1YiA9IFdURk1vdmUobmV3U2xvd1N0dWIp
OwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJTbG93U3R1YigpCi0gICAgewotICAgICAgICBtX3Ns
b3dTdHViID0gbnVsbHB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlm
CiAgICAgfQogCiAgICAgYm9vbCBzZWVuT25jZSgpCkBAIC0zMzAsMTkgKzMzOCwxNyBAQCBjbGFz
cyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4gewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OwotICAgIH0KLSNlbmRpZgotCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXModW5zaWduZWQpOworICAgIHZvaWQgdXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXModW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgeworICAgICAg
ICBpZiAobV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKQorICAgICAgICAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTbG93UGF0aENvdW50KCkKICAgICB7CkBAIC0zNjQsMTAgKzM3MCwxMiBAQCBj
bGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5r
SW5mbz4gewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9z
bG93UGF0aENhbGxEZXN0aW5hdGlvbik7CiAgICAgfQogCisjaWYgRU5BQkxFKEpJVCkKICAgICBH
UFJSZWcgY2FsbGVlR1BSKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NhbGxlZUdQUjsKICAg
ICB9CisjZW5kaWYKIAogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQoKQogICAgIHsKQEAgLTM4
Myw5ICszOTEsMTEgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRp
bmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNMaW5rZWQo
KSkgewotICAgICAgICAgICAgaWYgKHN0dWIoKSkKKyAgICAgICAgICAgIGlmIChzdHViKCkpIHsK
KyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgICAgIHN0dWIoKS0+Zm9yRWFjaERlcGVuZGVu
dENlbGwoZnVuY3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKKyNlbmRpZgorICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBmdW5jdG9yKG1fY2FsbGVlT3JDb2RlQmxvY2suZ2V0
KCkpOwogICAgICAgICAgICAgICAgIGlmIChpc0RpcmVjdCgpKQogICAgICAgICAgICAgICAgICAg
ICBmdW5jdG9yKG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGUuZ2V0KCkpOwpAQCAtMzk3LDI2
ICs0MDcsMzUgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAgIHZvaWQgdmlzaXRXZWFrKFZNJik7CiAKKyNpZiBF
TkFCTEUoSklUKQogICAgIHZvaWQgc2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSYpOwogCiAgICAgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1lU2h1
ZmZsZURhdGEoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZnJhbWVTaHVmZmxlRGF0YS5nZXQo
KTsKICAgICB9CisjZW5kaWYKIAogcHJpdmF0ZToKIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKIAorICAgIHVpbnQzMl90IG1fbWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmls
ZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9m
IHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVu
aW9uIFVuaW9uVHlwZSB7CiAgICAgICAgIFVuaW9uVHlwZSgpIAorI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgICAgICA6IGRhdGFJQyB7IG51bGxwdHIsIEludmFsaWRHUFJSZWcgfQorI2Vsc2UKKyAg
ICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciB9CisjZW5kaWYKICAgICAgICAgeyB9CiAgICAg
ICAgIHN0cnVjdCBEYXRhSUMgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IG1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb247CisjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgICAgIEdQUlJlZyBtX2NhbGxMaW5rSW5mb0dQUjsKKyNlbmRpZgogICAgICAg
ICB9IGRhdGFJQzsKIAogICAgICAgICBzdHJ1Y3QgewpAQCAtNDI5LDkgKzQ0OCwxMCBAQCBjbGFz
cyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4gewogCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOworI2lm
IEVOQUJMRShKSVQpCiAgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0
dWI7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3Nsb3dTdHViOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gbV9mcmFtZVNodWZmbGVEYXRhOworI2VuZGlm
CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgYm9vbCBtX2hhc1NlZW5TaG91bGRS
ZXBhdGNoIDogMTsKICAgICBib29sIG1faGFzU2VlbkNsb3N1cmUgOiAxOwpAQCAtNDQxLDkgKzQ2
MSwxMCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogICAgIGJvb2wgbV9jbGVhcmVkQnlKZXR0aXNvbiA6IDE7CiAgICAg
dW5zaWduZWQgbV9jYWxsVHlwZSA6IDQ7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgbV91c2VE
YXRhSUMgOiAxOyAvLyBVc2VEYXRhSUMKKyNpZiBFTkFCTEUoSklUKQogICAgIEdQUlJlZyBtX2Nh
bGxlZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyNlbmRpZgogICAgIHVpbnQzMl90IG1fc2xvd1Bh
dGhDb3VudCB7IDAgfTsKLSAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9m
IGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0
ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5m
b0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCkBAIC00NTMsMTEgKzQ3NCw3
IEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pCiAKIHN0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CiAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBi
YXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgotICAg
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
RnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKIH07CiAKLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCmluZGV4IGY3YWZiMmIwZjI4ZmQ5ZTVmZmM1
YzM0YjZhM2E4NTZhZTM3MzAyZjUuLmYyZGRhMGVlZGFhYjk2NDRhMDNiZWI2ZTUzZmVhMTcyMjNh
MGNhZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRl
ICJMTEludENhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIApAQCAtNjMsMzQgKzYyLDcgQEAgQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQ29kZUIKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICB9CiAjZW5k
aWYKLQotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICBPcGNvZGVJRCBvcCA9IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpOwotCi0gICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsK
LSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYWxsTGlua0lu
Zm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5t
X2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkubWV0
YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Ugb3BfdGFpbF9jYWxsOgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24t
PmFzPE9wVGFpbENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjoKLSAgICAgICAgY2Fs
bExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKS5tZXRhZGF0YShw
cm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBv
cF9pdGVyYXRvcl9uZXh0OgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZv
OwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxsTGlu
a1N0YXR1cygpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMo
Y2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZSgpKTsKKyAgICByZXR1cm4gQ2FsbExpbmtTdGF0
dXMoKTsKIH0KIAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDc3Y2Fh
OGU1N2U5NGFkNzMyYTg3MDNiNzEwZmQ0ODBmNzE4MTNhZTYuLmNiMDE2MjVkNWY4ZDNmYmZhZGJj
NTQyOTVhODc1NDAxNTE2NGM0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCkBAIC00NDksMTQgKzQ0OSwxNyBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGluawogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEodGhpcyk7IFwKICAg
ICBuZXcgKCZtZXRhZGF0YSkgX19vcDo6TWV0YWRhdGEgeyBieXRlY29kZSB9OyBcCiAKLSNkZWZp
bmUgQ0FTRShfX29wKSBjYXNlIF9fb3A6Om9wY29kZUlECi0KLSNkZWZpbmUgTElOSyguLi4pIFwK
LSAgICBDQVNFKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSk6IHsgXAorI2RlZmluZSBMSU5L
X0lNUEwoLi4uKSBcCiAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoV1RGX0xBWllfRklSU1Qo
X19WQV9BUkdTX18pKSBcCiAgICAgICAgIFdURl9MQVpZX0hBU19SRVNUKF9fVkFfQVJHU19fKSh7
IFwKICAgICAgICAgICAgIFdURl9MQVpZX0ZPUl9FQUNIX1RFUk0oTElOS19GSUVMRCwgIFdURl9M
QVpZX1JFU1RfKF9fVkFfQVJHU19fKSkgXAogICAgICAgICB9KSBcCisKKyNkZWZpbmUgQ0FTRShf
X29wKSBjYXNlIF9fb3A6Om9wY29kZUlECisKKyNkZWZpbmUgTElOSyguLi4pIFwKKyAgICBDQVNF
KFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSk6IHsgXAorICAgICAgICBMSU5LX0lNUEwoX19W
QV9BUkdTX18pIFwKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKQEAgLTQ2NSwxMCArNDY4LDYg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29kZUNvc3QgKz0gb3Bjb2Rl
TGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAg
TElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGxWYXJh
cmdzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBw
cm9maWxlKQotICAgICAgICBMSU5LKE9wQ29uc3RydWN0VmFyYXJncywgcHJvZmlsZSkKICAgICAg
ICAgTElOSyhPcEdldEJ5VmFsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0UHJpdmF0ZU5h
bWUsIHByb2ZpbGUpCiAKQEAgLTQ5OCwxMSArNDk3LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmsKICAgICAgICAgTElOSyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSkKICAgICAgICAgTElO
SyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgcHJvZmlsZSkKIAotICAgICAgICBMSU5LKE9wQ2FsbCwg
cHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxDYWxsLCBwcm9maWxlKQotICAgICAgICBMSU5L
KE9wQ2FsbEV2YWwsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BDb25zdHJ1Y3QsIHByb2ZpbGUp
Ci0KICAgICAgICAgTElOSyhPcEluQnlWYWwpCiAgICAgICAgIExJTksoT3BQdXRCeVZhbCkKICAg
ICAgICAgTElOSyhPcFB1dEJ5VmFsRGlyZWN0KQpAQCAtNTI3LDEzICs1MjEsOTMgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElOSyhPcENhdGNoKQogICAgICAgICBMSU5LKE9w
UHJvZmlsZUNvbnRyb2xGbG93KQogCisgICAgICAgIGNhc2Ugb3BfY2FsbDogeworICAgICAgICAg
ICAgTElOS19JTVBMKE9wQ2FsbCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2Fs
bExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6IHsKKyAgICAgICAg
ICAgIExJTktfSU1QTChPcFRhaWxDYWxsLCBwcm9maWxlKQorI2lmIEVOQUJMRShKSVQpCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVK
U1IgeyBHUFJJbmZvOjpyZWdUMCB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDAgfTsKKyNlbmRpZgorICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEg
c2h1ZmZsZURhdGE7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0
ZWNvZGUubV9hcmdjOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG51
bVBhcmFtZXRlcnMoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2h1ZmZsZURh
dGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyNlbmRp
ZgorICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gYnl0ZWNvZGUubV9hcmd2IC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgICAgICAgICAgICAgVmFsdWVS
ZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2
LAorICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIH0K
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFs
dWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgRGF0YUZvcm1hdEpTKTsK
KyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUg
PSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5
bG9hZEdQUigpKTsKKyNlbmRpZgorICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwg
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCks
ICZzaHVmZmxlRGF0YSk7CisjZWxzZQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0lu
Zm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworI2VuZGlmCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAg
ICAgICBMSU5LX0lNUEwoT3BDYWxsRXZhbCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5
cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAg
ICAgICAgICAgIExJTktfSU1QTChPcENvbnN0cnVjdCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1l
dGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6
Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9v
cGVuOiB7Ci0gICAgICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JPcGVuKQor
ICAgICAgICAgICAgTElOS19JTVBMKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgbWV0YWRh
dGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6
IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BJdGVyYXRvck5leHQpCisgICAg
ICAgICAgICBMSU5LX0lNUEwoT3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBtZXRhZGF0YS5t
X2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBl
Rm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7Cisg
ICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAgICAg
IG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWlsX2Nh
bGxfdmFyYXJnczogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxWYXJhcmdzLCBw
cm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURh
dGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9u
LmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czogeworICAgICAgICAgICAg
TElOS19JTVBMKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQorICAgICAgICAg
ICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0
cnVjdF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDb25zdHJ1Y3RWYXJhcmdz
LCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6
ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0
aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtNzgzLDIxICs4NTcsMTggQEAgdm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFz
ZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKICAgICAgICAgaml0
RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2Nv
bnN0YW50UG9vbC5zaXplKCkpOwogICAgICAgICBqaXREYXRhLm1fc3R1YkluZm9zID0gRml4ZWRW
ZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+KGppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3Muc2l6
ZSgpKTsKLSAgICAgICAgaml0RGF0YS5tX2NhbGxMaW5rSW5mb3MgPSBGaXhlZFZlY3RvcjxDYWxs
TGlua0luZm8+KGppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIHVubGlua2VkQ2FsbExpbmtJbmZvIDogaml0Q29kZS0+bV91bmxpbmtlZENhbGxzKSB7
CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGdldENhbGxMaW5rSW5m
b0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCB1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8pOworICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKHsgfSwgdW5saW5rZWRDYWxsTGlua0luZm8uZG9u
ZUxvY2F0aW9uKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKICAgICAgICAgICAgIHN3aXRj
aCAoZW50cnkudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6R2xvYmFsT2JqZWN0OgogICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVu
dHJ5LnBvaW50ZXIoKSk7Ci0gICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVu
bGlua2VkQ2FsbExpbmtJbmZvID0gaml0Q29kZS0+bV91bmxpbmtlZENhbGxzW2luZGV4XTsKLSAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxs
TGlua0luZm9zW2luZGV4XTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6
ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OnJlZ1QyKTsKLSAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ld
ID0gJmNhbGxMaW5rSW5mbzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bzogewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oZW50cnkucG9pbnRlcigpKTsKICAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0gaml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZv
c1tpbmRleF07CkBAIC0xNTY3LDE1ICsxNjM4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
TExJbnRJbmxpbmVDYWNoZXMoKQogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQot
ICAgIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhbJl0oTExJbnRDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykgewotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzTGlua2VkKCkgJiYgIXZtLmhl
YXAuaXNNYXJrZWQoY2FsbExpbmtJbmZvLmNhbGxlZSgpKSkgewotICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ2xlYXJpbmcgTExJbnQgY2FsbCBmcm9tICIs
ICp0aGlzKTsKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby51bmxpbmsoKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlKCkgJiYgIXZtLmhlYXAuaXNN
YXJrZWQoY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlKCkpKQotICAgICAgICAgICAgY2FsbExp
bmtJbmZvLmNsZWFyTGFzdFNlZW5DYWxsZWUoKTsKLSAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShK
SVQpCkBAIC0xNTkzLDggKzE2NTUsNiBAQCBDb2RlQmxvY2s6OkpJVERhdGEmIENvZGVCbG9jazo6
ZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpCiB7CiAgICAgaWYgKGF1dG8qIGppdERhdGEg
PSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBq
aXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8udmlzaXRX
ZWFrKHZtKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHVi
SW5mb3MpIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgbG9ja2VyKE5vTG9j
a2luZ05lY2Vzc2FyeSk7CiAgICAgICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2Vz
KGxvY2tlciwgdGhpcyk7CkBAIC0xNjEyLDE5ICsxNjcyLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCkKICAgICAgICAgfQogICAgIH0KICNlbmRpZgotCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSB7Ci0gICAgICAgIC8vIFZlcmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNp
bmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KLSAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQo
KSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKLSAgICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLT5pc0xpbmtlZCgpKTsKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVu
ZGVudENlbGwoW10gKEpTQ2VsbCopIHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICB9Ci0jZW5kaWYKIH0KICNl
bmRpZgogCkBAIC0xNjM3LDYgKzE2ODQsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJiB2bSkKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAorICAg
IGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKSB7CisgICAgICAgIGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0pOworICAgIH0p
OworCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCiAgICAgICAgIGZpbmFs
aXplSklUSW5saW5lQ2FjaGVzKCk7CkBAIC0xNzAwLDEyICsxNzUxLDEzIEBAIHZvaWQgQ29kZUJs
b2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHZvaWQgQ29kZUJsb2NrOjpnZXRJQ1N0YXR1c01h
cChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBJQ1N0YXR1c01hcCYgcmVzdWx0KQogewogI2lm
IEVOQUJMRShKSVQpCisgICAgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhbJl0o
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlu
a0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJ
bmZvID0gJmNhbGxMaW5rSW5mbzsKKyAgICB9KTsKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0
VHlwZSgpKSkgewogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
ewogICAgICAgICAgICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9z
KQogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8uY29kZU9yaWdpbiwgSUNTdGF0
dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1
cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNhbGxMaW5rSW5mbzsKICAgICAg
ICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKQEAgLTE3NjAsMTUgKzE4MTIsMjIgQEAgU3RydWN0dXJlU3R1
YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxM
aW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKK0NhbGxMaW5rSW5m
byogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXggaW5kZXgpCiB7Ci0gICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRh
LmdldCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9j
YWxsTGlua0luZm9zKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KSA9PSBDb2RlT3JpZ2luKGluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gJmNhbGxMaW5r
SW5mbzsKLSAgICAgICAgfQorICAgIGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoaW5kZXgpOworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyNkZWZp
bmUgQ0FTRShPcCkgXAorICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCisgICAgICAgIHJldHVybiAm
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJbmZvOyBcCisg
ICAgICAgIGJyZWFrOworCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5L
X0lORk8oQ0FTRSkKKworI3VuZGVmIENBU0UKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
ICAgICB9CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24g
PSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjEzNSwxMyArMjE5NCw2IEBAIHZvaWQgQ29k
ZUJsb2NrOjpzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTaHJpbmtNb2Rl
IHNocmlua01vZGUpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OmxpbmtJ
bmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWlu
ZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9p
bmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCiB2b2lkIENvZGVCbG9jazo6bGlua0lu
Y29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGlj
Q2FsbE5vZGUqIGluY29taW5nKQogewogICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFt
ZSk7CkBAIC0yMTUyLDEwICsyMjA0LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQ
b2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDCiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwo
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKK3sKKyAgICBu
b3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOworICAgIG1faW5jb21pbmdDYWxscy5wdXNo
KGluY29taW5nKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQog
ewotICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdM
TEludENhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51
bmxpbmsoKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWlu
Z0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZt
KCkpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgSklURGF0YSogaml0RGF0YSA9IG51bGxwdHI7CiAg
ICAgewpAQCAtMjE2MywyMCArMjIyMSwxMiBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21p
bmdDYWxscygpCiAgICAgICAgIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCk7CiAgICAgfQogICAg
IGlmIChqaXREYXRhKSB7Ci0gICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29taW5nQ2FsbHMu
YmVnaW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAgICAgICAgICBq
aXREYXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgICAgICB3
aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBqaXRE
YXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKICAgICAgICAgICAgIGppdERh
dGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgpKTsKICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNv
bWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qIGluY29t
aW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgbV9pbmNv
bWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIENvZGVCbG9jayogQ29kZUJsb2Nr
OjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5uZXdS
ZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yMzI5LDEz
ICsyMzc5LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25S
ZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZtLmhlYXAuY3Vy
cmVudFRocmVhZElzRG9pbmdHQ1dvcmsoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1
dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKSVQpCiAgICAgewogICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGlmIChKSVRE
YXRhKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAgfQorICAgICAg
ICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykgeworICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeUpldHRp
c29uKCk7CisgICAgICAgIH0pOworCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICAgICAgREZHOjpD
b21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjM0NCw3
ICsyMzkzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJl
YXNvbiByZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSBtb2QKICAgICAgICAgfQogI2VuZGlmCiAg
ICAgfQotI2VuZGlmCiAKICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMikuCiAgICAgb3duZXJF
eGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKHZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBz
cGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yODQ3LDE5ICsyODk1LDEzIEBAIEFycmF5UHJvZmls
ZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Qnl0ZWNvZGVJbmRlCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0
KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsK
LSNkZWZpbmUgQ0FTRTEoT3ApIFwKKyNkZWZpbmUgQ0FTRShPcCkgXAogICAgIGNhc2UgT3A6Om9w
Y29kZUlEOiBcCiAgICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJyYXlQcm9maWxlOwogCi0jZGVmaW5lIENBU0UyKE9wKSBcCi0gICAgY2FzZSBP
cDo6b3Bjb2RlSUQ6IFwKLSAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0
YWRhdGEodGhpcykubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGU7Ci0KLSAgICBGT1JfRUFD
SF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENBU0UxKQotICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENBU0UyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRI
X0FSUkFZX1BST0ZJTEUoQ0FTRSkKIAotI3VuZGVmIENBU0UxCi0jdW5kZWYgQ0FTRTIKKyN1bmRl
ZiBDQVNFCiAKICAgICBjYXNlIE9wR2V0QnlJZDo6b3Bjb2RlSUQ6IHsKICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CkBAIC0zMDI5LDE3ICszMDcx
LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlCiAgICAgICAgIH0KICAgICB9KTsKIAotI2Rl
ZmluZSBWSVNJVDEoX19vcCkgXAorI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgbV9tZXRhZGF0
YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEu
bV9hcnJheVByb2ZpbGUpOyB9KTsKIAotI2RlZmluZSBWSVNJVDIoX19vcCkgXAotICAgIG1fbWV0
YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFk
YXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlKTsgfSk7Ci0KLSAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUMSkKLSAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJVDIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
QVJSQVlfUFJPRklMRShWSVNJVCkKIAotI3VuZGVmIFZJU0lUMQotI3VuZGVmIFZJU0lUMgorI3Vu
ZGVmIFZJU0lUCiAKICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JOZXh0PihbJl0g
KGF1dG8mIG1ldGFkYXRhKSB7CiAgICAgICAgIHByb2Nlc3MobWV0YWRhdGEubV9pdGVyYWJsZVBy
b2ZpbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4
IDY0ZjlmNWFiY2ZlMmFlNzA1ZDFkYTY1YWE5ZjgzMTk3Yjk2YzZkMzEuLmI3YWVhMjY3N2Y1ZTk0
OTA4YWIzNTVmOTZiMGQyM2MzNzgyNDIwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgotI2lu
Y2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaCIKICNpbmNsdWRlICJNZXRhZGF0YVRhYmxlLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuaCIKQEAgLTI2MSw4ICsyNjAsNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKIAogICAgICAgICBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7
Ci0gICAgICAgIEZpeGVkVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwotICAg
ICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtl
ZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3Jw
aGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKICAgICAgICAgYm9vbCBt
X2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9OwogICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CkBAIC0yOTEsNyArMjg4LDcgQEAgY2xhc3Mg
Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rp
b24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2Fz
ZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlv
dSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAgICAgLy8gbG9va2luZyBmb3IgYSBD
YWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAg
IENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUlu
ZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgY29u
c3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCkBAIC0zMDksMTQgKzMwNiwxMSBAQCBjbGFz
cyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAg
ICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0KLSNpZiBFTkFCTEUoSklUKQogICAgIHZv
aWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8q
KTsKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxs
KENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCi0gICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2Fs
bGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7Ci0KICAgICBjb25zdCBJbnN0cnVjdGlvbiog
b3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpOwogICAgIGludCBvdXRP
ZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogICAgIHsK
QEAgLTQ1Myw3ICs0NDcsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29u
c3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0
IEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hM
TEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKGNvbnN0IEZ1
bmN0b3ImKTsKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYmluYXJ5QXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogdW5h
cnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwpAQCAtOTU5LDcg
Kzk1Myw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIFZNKiBtX3Zt
OwogCiAgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyIHsgbnVsbHB0ciB9
OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CisgICAg
U2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENh
bGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFw
IG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRD
b2RlOwogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0lubGluZXMuaAppbmRleCAxZDU5NGFiODM1Mjg5N2VjOGE3NDVlYTI0OTNm
OGQyZGEwMThiOTYyLi45MmRhOTlhMGJhMmFjYzFmY2RiNmE5NzM1ZmNkZGUyM2VmYzkzM2Q4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVz
LmgKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJiBmdW5jKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgotdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBG
dW5jdG9yJiBmdW5jKQordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxs
TGlua0luZm8oY29uc3QgRnVuY3RvciYgZnVuYykKIHsKICAgICBpZiAobV9tZXRhZGF0YSkgewog
I2RlZmluZSBWSVNJVChfX29wKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MTEludENhbGxMaW5rSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
MDU4ZmZjZDkxN2RkMmM1MDE2MmUxMzU1YjNkNThiMThlNmEwNzI2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MTEludENhbGxMaW5rSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiSlNDUHRyVGFnLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2luY2x1ZGUgPHd0Zi9TZW50
aW5lbExpbmtlZExpc3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBJbnN0cnVjdGlv
bjsKLQotY2xhc3MgTExJbnRDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPExMSW50Q2FsbExpbmtJbmZvPiB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHVubGlu
a2VkQml0ID0gMHgxOwotCi0gICAgTExJbnRDYWxsTGlua0luZm8oKSA9IGRlZmF1bHQ7Ci0gICAg
Ci0gICAgfkxMSW50Q2FsbExpbmtJbmZvKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgp
KQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNMaW5rZWQo
KSBjb25zdCB7IHJldHVybiAhKG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYg
dW5saW5rZWRCaXQpOyB9Ci0gICAgCi0KLSAgICB2b2lkIGxpbmsoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0cikKLSAgICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAg
cmVtb3ZlKCk7Ci0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKTsKLSAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIob3duZXIsIGNhbGxlZSk7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQgPSBjb2Rl
UHRyOwotICAgIH0KLQotICAgIHZvaWQgdW5saW5rKCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2Ug
bGluayBpbnZhbGlkYXRlZC4gSXQgd29ya3MgYmVjYXVzZSBMTEludCB0ZXN0cyB0aGUgZ2l2ZW4g
Y2FsbGVlIHdpdGggdGhpcyBwb2ludGVyLiBCdXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMgbGFzdFNl
ZW5DYWxsZWUhCi0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHw9
IHVubGlua2VkQml0OwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAg
ICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIWlzTGlua2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JM
YXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0KTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogbGFzdFNl
ZW5DYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09i
amVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYgfnVubGlua2VkQml0
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKQotICAgIHsKLSAgICAg
ICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1bmxpbmtlZEJpdDsKLSAg
ICB9Ci0KLSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTElu
dENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludHB0
cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZVRh
cmdldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oCmluZGV4IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFhYzgzOWJk
MzYuLjFjYmM2NmY4NDk5NTQ5OTdlZjdjNTBkNDkzODQzMDJmMzVjNjI5ZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTEyNiwxMSArMTI2LDE5IEBAIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6Omdl
dE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNybyhPcEdl
dFByaXZhdGVOYW1lKSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJP
RklMRShtYWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJ
TktfSU5GTyhtYWNybykgXAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9wVGFpbENh
bGwpIFwKKyAgICBtYWNybyhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwK
KyAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBc
CiAgICAgbWFjcm8oT3BDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxWYXJhcmdz
KSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBtYWNybyhP
cENvbnN0cnVjdFZhcmFyZ3MpIFwKKworI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJB
WV9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9w
SW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKQEAgLTEzOSw2ICsxNDcsNyBAQCBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RG
OjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBc
CiAgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRv
ckhhc093blByb3BlcnR5KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9M
SU5LX0lORk8obWFjcm8pIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9B
TExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCkBAIC0x
NDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhP
cGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAjZGVmaW5lIEZPUl9FQUNI
X09QQ09ERV9XSVRIX09CSkVDVF9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNy
byhPcE5ld09iamVjdCkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NB
TExfTElOS19JTkZPKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BDYWxsKSBcCi0gICAgbWFjcm8oT3BU
YWlsQ2FsbCkgXAotICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBtYWNybyhPcENvbnN0cnVj
dCkgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck5l
eHQpIFwKLQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShtYWNybykgXAogICAgIG1hY3JvKE9wQWRkKSBcCiAgICAgbWFjcm8oT3BNdWwpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzNjMzdk
ZDcyYTVhYTg2Njk5MGZkZjFhOTM5N2FlZTI5ZjAyMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guY3BwCkBAIC0wLDAgKzEsMjAzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisKKyNpbmNsdWRlICJCaW5h
cnlTd2l0Y2guaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisj
aW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgi
CisjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiRlRM
VGh1bmtzLmgiCisjaW5jbHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGdW5jdGlv
bkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1
ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIK
KyNpbmNsdWRlICJJQ1N0YXRzLmgiCisjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVk
ZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlLmgiCisjaW5jbHVkZSAiSklULmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9k
dWxlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFj
ZUFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUg
IlNjb3BlZEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURh
dGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVy
LmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlG
dW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz4gY29kZVJlZikKK3sKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRp
b24oY29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7Cit9
CisKKyNpZiBFTkFCTEUoSklUKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorewor
ICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJh
dG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Cit9CisjZW5kaWYKKworc3Rh
dGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
K3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsK
KyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworfQor
CitzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQoreworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAvLyBFYWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNo
YXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0
aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVyLgorICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJB
c3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjYWxsZWUp
OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorfQorCit2b2lkIGxpbmtNb25vbW9ycGhp
Y0NhbGwoCisgICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAorICAgIEpTT2JqZWN0KiBj
YWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQorewor
ICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxsZXIgbXVz
dCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJv
bSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxl
ckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+
IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25l
ciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/
IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxl
ckNvZGVCbG9jazsKKyAgICBBU1NFUlQob3duZXIpOworCisgICAgQVNTRVJUKCFjYWxsTGlua0lu
Zm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZt
LCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5D
YWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoc2hv
dWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCisgICAgICAgIGRhdGFMb2co
IkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxM
aW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9j
ayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CisjZW5kaWYKKworICAgIGlm
IChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5n
Q2FsbChjYWxsZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CisKKyNpZiBFTkFCTEUoSklUKQorICAg
IGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYg
Y2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSkgeworICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwg
Y2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgCisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxM
aW5rSW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBjb2RlUmVmKQoreworICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgeworI2lm
IEVOQUJMRShKSVQpCisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOworICAg
ICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisjZW5kaWYKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7CisgICAg
ICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKworICAg
ICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsKKyAgICAgICAgfQorICAgICAgICBjYWxsTGlua0lu
Zm8uY2xlYXJDYWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJv
dGggZm9yIGRhdGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgorICAgIH0KKyAgICBjYWxsTGlua0lu
Zm8uY2xlYXJTZWVuKCk7CisgICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOworICAgIGlmIChj
YWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwor
fQorCit2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
K3sKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2lu
ZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOworICAgIAorICAg
IHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dl
ZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisgICAgaWYgKCFjYWxsZWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChraW5k
ICE9IENvZGVGb3JDYWxsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byog
d2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNh
bGxlZSkpCisgICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworI2lmIEVOQUJMRShKSVQpCisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PiBvcGVyYXRpb24pCit7CisgICAgSlNDX1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9W
QUxJREFUSU9OKG9wZXJhdGlvbik7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJ
bnRlcm5hbFB0clRhZz4gY2FsbCkKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFS
R0VUX1dJVEhfVkFMSURBVElPTihjYWxsKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKQorICAgICAgICByZXR1cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5m
by5tX3Nsb3dPcGVyYXRpb24pOworICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4gY2FsbCA9IHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb247CisjaWYgRU5BQkxFKEZU
TF9KSVQpCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkg
eworICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJn
ZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldp
dGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2Fs
bFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGNvZGVCbG9jayk7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmV0dXJuIHJl
dGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKGNhbGwpOworfQorCit2b2lkIGZ0bFRodW5rQXdh
cmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKQoreworI2lmIEVOQUJMRShGVExfSklUKQorICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKKyAgICAgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOworICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKKyAg
ICAgICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVy
OjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CisgICAgICAgIGF1dG8gc2xv
d1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxU
aHVuayhzbG93UGF0aFRodW5rKTsKKyAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5l
d0NhbGxlZUZ1bmN0aW9uKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNh
bGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1
bmsodm0sIGtleSkuY29kZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvLyBF
TkFCTEUoRlRMX0pJVCkKKyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3
Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKK30KKworc3RhdGlj
IHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAg
IHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbiA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9w
ZXJhdGlvblB0clRhZz4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9u
LCBuZXdDYWxsZWVGdW5jdGlvbik7Cit9CisKK2VudW0gSW5saW5lQ2FjaGVBY3Rpb24geworICAg
IEdpdmVVcE9uQ2FjaGUsCisgICAgUmV0cnlDYWNoZUxhdGVyLAorICAgIEF0dGVtcHRUb0NhY2hl
Cit9OworCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVy
ZSh2bSk7CisKKyAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsK
KyAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCisgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVm
b3JlKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgLy8gRmxh
dHRlbmluZyBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZv
ciBhbm90aGVyIHRyeS4KKyAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5
T2JqZWN0KHZtKTsKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICB9CisgICAg
CisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7
Cit9CisKK3N0YXRpYyBib29sIGZvcmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKK3sKKyAg
ICByZXR1cm4gT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKTsKK30KKworQUxXQVlTX0lOTElORSBz
dGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1
YkFuZEZpcmVXYXRjaHBvaW50cygpKSB7CisgICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHMo
dm0pOworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0
KGxvY2tlciwgY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaW5saW5lIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlv
bihHZXRCeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5
S2luZDo6QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAg
ICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Cisg
ICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5SWREaXJlY3Q6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgIGNh
c2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZUJ5SWRPcHRpbWl6ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBw
cm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9u
R2V0QnlJZDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1
cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzOworICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlk
OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZDsKKyAgICBjYXNlIEdldEJ5S2lu
ZDo6QnlJZERpcmVjdDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7Cisg
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlW
YWxHZW5lcmljOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRl
TmFtZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7
CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGds
b2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMu
CisgICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxs
KCk7CisgICAgICAgIGNvbnN0IGJvb2wgaXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lIHx8IGtpbmQgPT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7CisKKyAgICAg
ICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc0pTQXJy
YXkoYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgp
ID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VDZWxsCisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXND
YWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+
KGJhc2VDZWxsKSkpIHsKKworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHVi
SW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdH
ZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRBcnJheUxlbmd0aChsb2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAg
ICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ss
IHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0
aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRz
KiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2Vs
bCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3
ZSBjYW4gaGFuZGxlIHRoaXMgYXMgYSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKKyAg
ICAgICAgICAgICAgICAvLyB0aGlzIHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRk
IGFuIElDIGNhc2UgZm9yIHRoYXQgbG9hZCBpZiBuZWVkZWQuCisgICAgICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0
QXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChT
Y29wZWRBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRz
Kj4odm0sIGJhc2VDZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIERpdHRvLgorICAgICAgICAg
ICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQorICAgICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nh
c2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFz
ZUNlbGwtPmluaGVyaXRzPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNV
bnNldCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xv
dC5tb2R1bGVOYW1lc3BhY2VTbG90KCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUs
IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNw
YWNlU2xvdC0+ZW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNj
b3BlT2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2FzZSkg
eworICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgICAg
ICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChiYXNl
Q2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzUHJpdmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2Vs
bCktPnRhcmdldCgpOworICAgICAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2Vs
bCgpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0p
OworICAgICAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JD
ZWxsKHZtLCBiYXNlQ2VsbCk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0Nh
Y2hlKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9w
dGltaXplIHNlbGYgYWNjZXNzLgorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgp
ID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKQorICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUK
KyAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAg
ICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgeworICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQp
KTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworCisgICAgICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hl
ZE9mZnNldCgpOworCisgICAgICAgICAgICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxm
IGN1c3RvbXMsIHdlIG11c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKKyAgICAg
ICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5
IHNpbmNlIHdlIGNhY2hlIHRoZQorICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9u
IHBvaW50ZXIuCisKKyAgICAgICAgICAgICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmco
Z2xvYmFsT2JqZWN0LCBzbG90LnNsb3RCYXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1
ZSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9y
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0s
IGpzQ2FzdDxKU09iamVjdCo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7IC8vIFdlIG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0
cy4KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworCisgICAgICAgICAgICAgICAgLy8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERp
cmVjdCBvciBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3Rp
Z2F0ZSBwcm90b3R5cGUgY2hhaW5zIGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgLy8gQ2FjaGVh
YmlsaXR5IGp1c3QgZGVwZW5kcyBvbiB0aGUgaGVhZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAg
ICAgaWYgKGtpbmQgIT0gR2V0QnlLaW5kOjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hp
bmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERp
Y3Rpb25hcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMg
bWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8gZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2Vz
UG9seVByb3RvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2Vs
bCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0No
YWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3Ry
dWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2Ug
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3Vs
ZCBiZSBpbnNpZGUgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlCbGFoLgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NTIxNQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xv
dC5zbG90QmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWUudWlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9mZnNldCgpID09IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUu
dWlkKCksIHNsb3QuYXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBKU0Z1bmN0aW9uKiBnZXR0ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWND
YXN0PEpTRnVuY3Rpb24qPih2bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOworCisg
ICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJp
YnV0ZTsKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5k
b21BdHRyaWJ1dGUoKSkKKyAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0
dHJpYnV0ZSgpOworCisgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQp
IHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAg
ICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90
LmlzVW5zZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0R2V0dGVyOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQo
KSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgfSBlbHNlIGlm
ICghbG9hZFRhcmdldEZyb21Qcm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNz
Q2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUp
KQorICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgZ2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0No
YWluKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRl
KSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3ND
YXNlOjpMb2FkLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29k
ZUJsb2NrLCBzbG90LmlzVW5zZXQoKSA/IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpM
b2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRT
ZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nh
c2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRo
aXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRy
aWJ1dGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3Jl
YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVy
dHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVBy
b3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihz
bG90LmN1c3RvbUdldHRlcigpKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/
IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBkb21B
dHRyaWJ1dGUsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJv
cGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBs
YWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5j
b2RlKCkpOworICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIEdl
dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6
CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgICAgIGNhc2Ug
R2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lQnlJZDoKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICAgICAgY2FzZSBHZXRC
eUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9Cisg
ICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBh
dGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdl
dEJ5S2luZCBraW5kKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKKyAgICAKKyAgICBpZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBH
aXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlvbihraW5kKSk7Cit9CisKKworc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2VW
YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAo
IWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBKU0Nl
bGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFy
Z3VtZW50c1R5cGUpCisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZERpcmVjdEFyZ3VtZW50c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBT
Y29wZWRBcmd1bWVudHNUeXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRTY29wZWRBcmd1bWVudHNMb2FkOworICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBl
KCkgPT0gU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkU3RyaW5nTG9hZDsKKyAgICAgICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xh
c3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNo
IChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUludDE2TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMK
KyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmln
VWludDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVN
YXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBj
YXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRJbnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkRG91YmxlTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkQ29udGlndW91c0xvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0Lmdl
bmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlS
ZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVy
KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1Yklu
Zm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNo
QXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZz
bG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgc3dpdGNo
IChwdXRCeUtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
RGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1
dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxE
ZWZpbmVQcml2YXRlRmllbGRHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVy
aWM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAvLyBNYWtl
IHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sK
KyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAg
ICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQg
Y29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21V
aWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkp
OworCisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2VWYWx1
ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAK
KyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSAmJiAhc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQorICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8g
c29tZXRoaW5nIHNtYXJ0ZXIgaGVyZS4uLgorICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRT
dHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICAvLyBXZSBjYW4ndCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUg
cHJvdG90eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBvd24gcHJvcGVydGllcy4KKyAgICAgICAgQVNT
RVJUKCFpc0NvcHlPbldyaXRlKHNsb3QuYmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOworCisgICAg
ICAgIGlmICghb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBKU0NlbGwqIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNl
OworICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlw
ZSkgeworICAgICAgICAgICAgYmFzZUNlbGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+
dGFyZ2V0KCk7CisgICAgICAgICAgICBiYXNlVmFsdWUgPSBiYXNlQ2VsbDsKKyAgICAgICAgICAg
IGlzUHJveHkgPSB0cnVlOworCisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNo
ZSBSZXBsYWNlIGFuZCBKUy9DdXN0b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAorICAg
ICAgICAgICAgLy8gY2FjaGUgdHJhbnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxs
IG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICAgICAgLy8gaW4gb3VyIGN1
cnJlbnQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkg
PSAoc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6RXhpc3RpbmdQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxl
U2V0dGVyKCkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Cisg
ICAgICAgICAgICBpZiAoIWlzQ2FjaGVhYmxlUHJveHkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAg
ICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkp
IHsKKyAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0
aW5nUHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRj
aCBidWdzIGlmIHdlIGFjY2lkZW50YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCisgICAg
ICAgICAgICAgICAgLy8gd2hlbiB3ZSB0cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3Rp
bmcgcHJvcGVydHkuIFRoaXMgaXMgY29tbW9uIGFtb25nCisgICAgICAgICAgICAgICAgLy8gcGF0
aHMgdGhhdCByZWlmeSBsYXp5IHByb3BlcnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0
eSBhbmQgZm9yZ2V0CisgICAgICAgICAgICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBt
YXkgY29tZSBkb3duIHRoaXMgcGF0aC4gVGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKKyAgICAgICAg
ICAgICAgICAvLyBrbm93IGhvdyB0byBtb2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbnMgKG9yIGFueSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9u
IGZvciB0aGF0IG1hdHRlcikuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG9sZFN0cnVjdHVyZSk7CisKKyAgICAgICAg
ICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3R1
YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAg
ICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAm
JiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAg
ICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5
RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlh
YmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2Us
IHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCgpLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xk
IHN0cnVjdHVyZSBpcyBkaWN0aW9uYXJ5LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9u
ZSBiZXR3ZWVuIGFuIG9iamVjdCBhbmQgYSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8g
SWYgdGhpcyBpcyBOZXdQcm9wZXJ0eSBvcGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMg
ZG9lcyBub3Qgb2ZmZXIgYW55IGJlbmVmaXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIg
aGFwcGVucyBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKwor
ICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBp
cyBvdmVycmlkZGVuIGJ5IFVzZXJPYmplY3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRl
LWVmZmVjdCBvbiBKU09iamVjdDo6cHV0LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0
UHJvcGVydHlTbG90IGFzIG5vbi1jYWNoYWVibGUsCisgICAgICAgICAgICAgICAgLy8gdGhlbiBh
cmJpdHJhcnkgc3RydWN0dXJlIHRyYW5zaXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQg
b3BlcmF0aW9uLCBhbmQgdGhpcyBnZW5lcmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlv
biBoZXJlIGFzIGlmIG9sZFN0cnVjdHVyZSAtPiBuZXdTdHJ1Y3R1cmUuCisgICAgICAgICAgICAg
ICAgLy8gSW4gcmVhbGl0eSwgdGhlIHRyYW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0
aGluZyB1bmtub3duIHN0cnVjdHVyZXMgLT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgorICAgICAg
ICAgICAgICAgIC8vIFRvIGd1YXJkIGFnYWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkg
aW5jb3JyZWN0IFVzZXJPYmplY3Q6OnB1dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNr
IGZvciB0aGlzIGNvbmRpdGlvbiBhbmQgaWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcg
dGhlIHB1dC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUodm0pID09IG5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSAhPSBuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluOworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJl
Y3QpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFp
bkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMt
PnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vz
c0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJh
c2VDZWxsLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGREZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50
LmlzUHJpdmF0ZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVy
dHlOYW1lLCBvZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBzdHViSW5mbyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgeworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHBy
b3RvdHlwZUFjY2Vzc0NoYWluOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0
aGlzIGV2ZW4gaWYgd2UncmUgYSBzZWxmIGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBk
aWN0aW9uYXJpZXMKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5m
b3JtZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50
CisgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24gcG9pbnRlci4KKyAgICAgICAgICAgICAgICBh
dXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJh
c2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAg
ICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRl
KGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNl
KCksIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpOb25lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vz
c0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0
ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICBpbnZh
bGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBp
c1Byb3h5LCBzbG90LmN1c3RvbVNldHRlcigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFn
PigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hl
YWJsZVNldHRlcigpKTsKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0No
YWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCisgICAgICAgICAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hl
U3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBz
bG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0
ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3Rv
dHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVy
ZSh2bSkpLT5nZXQodm0sIGlkZW50LmltcGwoKSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50
LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNv
bmRpdGlvbigpLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVy
LCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1v
dmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRT
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7
CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tl
ciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9k
ZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShu
ZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Cisg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwor
CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRz
QW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisK
KyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZVB1
dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5k
KSk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEpT
Q2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFz
c0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50
MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZs
b2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJ
QworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNl
IFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCBnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3Qo
KSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUs
IG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsK
KyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVh
clN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGlu
ZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsK
K30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5
U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAg
IHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUo
Z2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAg
ICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOworICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVj
dCgpIHx8ICFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBv
bGRTdHJ1Y3R1cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZURlbGV0ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAoYmFzZVZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAganNDYXN0PEpTT2Jq
ZWN0Kj4oYmFzZVZhbHVlKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbGRT
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBp
ZiAoc2xvdC5pc0RlbGV0ZUhpdCgpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdP
ZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVj
dHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zm
c2V0KTsKKyAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBB
U1NFUlQobmV3T2Zmc2V0ID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNT
RVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25L
aW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PmlzT2JqZWN0KCkpOworICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0
KSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBj
b2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgbmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHBy
b3BlcnR5TmFtZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUo
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZh
bGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7CisKKyAgICAgICAgcmVzdWx0
ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBlY21hTW9kZSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBp
ZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJl
cGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xl
YXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2Fj
aGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtp
bmQga2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KworICAgIGlmICh0cnlDYWNoZURlbGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90
LCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwg
ZWNtYU1vZGUpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpE
ZWxCeVJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxP
YmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KSk7CisgICAgICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJ
ZEdlbmVyaWMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7CisgICAg
fQorfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9w
dGltaXppbmdJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5C
eUlkT3B0aW1pemU7CisgICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtp
bmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluQnlLaW5kOjpCeUlk
OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkR2VuZXJpYzsKKyAgICBjYXNlIEluQnlL
aW5kOjpCeVZhbDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOworICAg
IGNhc2UgSW5CeUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVHZW5lcmljOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAorICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVj
dCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCisgICAgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEluQnlLaW5kIGtpbmQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworCisgICAgewor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCB2bSk7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2Ut
PnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0Zv
dW5kICYmICFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
Rm9yQWJzZW5jZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAKKyAgICAgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNo
ZWFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBw
cm90b3R5cGVBY2Nlc3NDaGFpbjsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OworICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIElubGlu
ZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICAg
ICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
YWN0aW9uOworCisgICAgICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAg
ICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICAgICAmJiBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9p
bnRTZXQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
eworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwor
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihs
b2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNsb3Quc2xv
dEJhc2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHBy
ZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERp
Y3Rpb25hcnkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisK
KyAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFp
bjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFz
ZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90
QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwg
YmFzZSwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBz
bG90KTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cygKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRB
Y2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OmNyZWF0ZSgKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNz
Q2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQg
PyBzbG90LmNhY2hlZE9mZnNldCgpIDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRp
b25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKworICAgICAgICByZXN1bHQg
PSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKwor
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5k
OjpCeUlkKQorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmly
ZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ss
IHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdp
dmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEluQnkoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEluQnlLaW5kIGtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlm
ICh0cnlDYWNoZUluQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3Bl
cnR5TmFtZSwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hl
KSB7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VP
YmplY3QtPmNsYXNzSW5mbyhnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZh
dGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNG
b3VuZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7
CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVj
dCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2Fj
aGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChh
Y3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisg
ICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFz
ZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6
IEFjY2Vzc0Nhc2U6OkluTWlzcywgYnJhbmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7
IH0sIHsgfSk7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2Nr
ZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQs
IFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5l
QWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRz
QW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisK
KyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1
YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisK
K3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAorICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09i
amVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgeworICAgICAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7
CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9
IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRU
b0NhY2hlKQorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICBib29sIGlzQmFz
ZVByb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVC
cmFuZEFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQ
cm9wZXJ0eSkpOworCisgICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlQ2hlY2tQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0
dXJlKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RG
TW92ZShuZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgp
KSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFj
ZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJl
V2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywg
cmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVC
cmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKKworICAgIGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0g
R2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMpOworfQorCitzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNl
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwor
CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrLCB2bSk7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3Qp
KQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBB
U1NFUlQob2xkU3RydWN0dXJlKTsKKworICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAg
SW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAg
ICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0
aW9uOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6OnNldEJyYW5kVHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShv
bGRTdHJ1Y3R1cmUsIGJyYW5kSUQudWlkKCkpOworICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkK
KyAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIGlmIChuZXdTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1
cmUpOworICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRy
YW5zaXRpb25LaW5kOjpTZXRCcmFuZCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7
CisgICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwg
b2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAg
ICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2
YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1
cmUpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZN
b3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkp
IHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdp
dGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8s
IGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBh
dGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
KworICAgIGlmICh0cnlDYWNoZVNldFByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVV
cE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUluc3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1
ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wg
d2FzRm91bmQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVl
VmFsdWUuaXNDZWxsKCkpOyAvLyBzaG91bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2Vs
bHMuCisgICAgCisgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgIAorICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAKKyAg
ICAgICAgSlNDZWxsKiB2YWx1ZSA9IHZhbHVlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdmFsdWUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIFJlZlB0cjxB
Y2Nlc3NDYXNlPiBuZXdDYXNlOworICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5h
bWljQ2FzdDxKU09iamVjdCo+KHZtLCBwcm90b3R5cGVWYWx1ZSk7CisgICAgICAgIGlmIChwcm90
b3R5cGUpIHsKKyAgICAgICAgICAgIGlmICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6
OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
SW5zdGFuY2VPZk1pc3MsIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwK
KyAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
c3RydWN0dXJlLT5wcm90b3R5cGVRdWVyaWVzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGVhY2ggdGhpcyB0byBkbyBwb2x5IHByb3RvLgorICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKKyAg
ICAgICAgICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUs
IHdhc0ZvdW5kID8gcHJvdG90eXBlIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
SW5zdGFuY2VPZigKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZSwgd2FzRm91bmQpOworCisgICAgICAgICAgICAgICAg
aWYgKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nl
c3NDYXNlOjpJbnN0YW5jZU9mSGl0IDogQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbmV3Q2FzZSkKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hl
YWJsZUlkZW50aWZpZXIoKSk7CisgICAgICAgIAorICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Oklu
c3RhbmNlT2ZBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVy
KCkpKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
bG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxs
cHRyLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQuZ2Vu
ZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5j
ZU9mUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRH
aXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQg
cmVwYXRjaEluc3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQpCit7
CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIGlm
ICh0cnlDYWNoZUluc3RhbmNlT2YoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUs
IHByb3RvdHlwZVZhbHVlLCBzdHViSW5mbywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCisg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9u
SW5zdGFuY2VPZkdlbmVyaWMpOworfQorCit2b2lkIGxpbmtEaXJlY3RDYWxsKAorICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBj
YWxsZWVDb2RlQmxvY2ssCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHIpCit7CisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKyAgICAKKyAg
ICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisK
KyAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgQVNTRVJUKCFj
YWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldENvZGVCbG9jayh2
bSwgY2FsbGVyQ29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjYWxsZWVDb2Rl
QmxvY2spKTsKKyAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9j
aykpCisgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihj
YWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50
ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxu
Iik7CisKKyAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25M
YWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CisKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2Nr
KQorICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAm
Y2FsbExpbmtJbmZvKTsKK30KKwordm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZN
JiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwg
Y2FsbExpbmtJbmZvKTsKK30KKworc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAg
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKwor
ICAgIGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2sp
LAorICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2Fs
bGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7CisKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdl
dENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CisgICAgY2FsbExpbmtJbmZvLnNldENs
ZWFyZWRCeVZpcnR1YWwoKTsKK30KKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRy
IHsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKK307Cit9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNl
CisKK3ZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENhbGxW
YXJpYW50IG5ld1ZhcmlhbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLmFs
bG93U3R1YnMoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIC8v
IER1cmluZyBleGVjdXRpb24gb2YgbGlua1BvbHltb3JwaGljQ2FsbCwgd2Ugc3Ryb25nbHkgYXNz
dW1lIHRoYXQgd2UgbmV2ZXIgZG8gR0MuCisgICAgLy8gR0MgamV0dGlzb25zIENvZGVCbG9ja3Ms
IGNoYW5nZXMgQ2FsbExpbmtJbmZvIGV0Yy4gYW5kIGJyZWFrcyBhc3N1bXB0aW9uIGRvbmUgYmVm
b3JlIGFuZCBhZnRlciB0aGlzIGNhbGwuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDRm9y
QVdoaWxlKHZtKTsKKyAgICAKKyAgICBpZiAoIW5ld1ZhcmlhbnQpIHsKKyAgICAgICAgbGlua1Zp
cnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxs
ZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNh
bGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwo
KSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNh
bGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSk7CisKKyAgICAvLyBXZWJBc3NlbWJseSAtPiBK
UyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgorICAgIEpTQ2VsbCogb3duZXIg
PSBpc1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCku
YXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOworICAgIEFTU0VSVChvd25lcik7CisKKyAgICBD
YWxsVmFyaWFudExpc3QgbGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUq
IHN0dWIgPSBjYWxsTGlua0luZm8uc3R1YigpKQorICAgICAgICBsaXN0ID0gc3R1Yi0+dmFyaWFu
dHMoKTsKKyAgICBlbHNlIGlmIChKU09iamVjdCogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNh
bGxlZSgpKQorICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZhcmlhbnQob2xk
Q2FsbGVlKSB9OworICAgIAorICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3Qs
IG5ld1ZhcmlhbnQpOworCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNhbGxzIHRo
ZW4gaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBjYWxscy4K
KyAgICAvLyBUaGlzIG1ha2VzIHN3aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQgYWxzbyBw
cm9kdWNlcyBwcm9maWxpbmcgdGhhdCdzIGVhc2llciBvbiB0aGUgREZHOworICAgIC8vIHRoZSBE
RkcgZG9lc24ndCByZWFsbHkgd2FudCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBvZiBjbG9z
dXJlIGFuZCBub24tY2xvc3VyZSBjYWxsZWVzLgorICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZh
bHNlOworICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpICB7CisgICAgICAgIGlm
ICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICAgICAgbGlzdCA9IGRlc3BlY2lm
aWVkVmFyaWFudExpc3QobGlzdCk7CisgICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChpc0Ns
b3N1cmVDYWxsKQorICAgICAgICBjYWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1cmUoKTsKKyAg
ICAKKyAgICBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOworICAgIFZlY3Rv
cjxpbnQ2NF90PiBjYXNlVmFsdWVzOworICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIg
Y2FzZXMgYXJlLgorICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpIHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAodmFyaWFudC5l
eGVjdXRhYmxlKCkgJiYgIXZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7
CisgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHZhcmlhbnQuZXhlY3V0
YWJsZSgpOworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICAvLyBJZiB3
ZSBjYW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEg
Q29kZUJsb2NrIG9yIGJlY2F1c2UgYXJpdHkgbWlzbWF0Y2gsCisgICAgICAgICAgICAvLyBhc3N1
bWUgdGhhdCBpdCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhIHZpcnR1YWwg
Y2FsbC4KKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAg
ICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50
NjRfdCBuZXdDYXNlVmFsdWUgPSAwOworICAgICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAg
ICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmV4
ZWN1dGFibGUoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBw
YXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTMxMQorICAgICAg
ICAgICAgaWYgKCFuZXdDYXNlVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb24gPSB2YXJpYW50LmZ1
bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGlu
dHB0cl90PihmdW5jdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3
Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmludGVybmFsRnVuY3Rp
b24oKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAg
ICAgICAgIGlmIChjYXNlVmFsdWVzLmNvbnRhaW5zKG5ld0Nhc2VWYWx1ZSkpIHsKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJFUlJPUjogQXR0ZW1wdCB0byBhZGQgZHVwbGljYXRlIGNhc2UgdmFs
dWUuXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeGlzdGluZyBjYXNlIHZhbHVlczog
Iik7CisgICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgdmFsdWUgOiBjYXNlVmFsdWVzKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKGNvbW1hLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFkZDogIiwgbmV3Q2FzZVZhbHVlLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJWYXJpYW50IGxpc3Q6ICIsIGxpc3REdW1w
KGNhbGxDYXNlcyksICJcbiIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjYWxsQ2FzZXMu
YXBwZW5kKFBvbHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7CisgICAgICAg
IGNhc2VWYWx1ZXMuYXBwZW5kKG5ld0Nhc2VWYWx1ZSk7CisgICAgfQorICAgIEFTU0VSVChjYWxs
Q2FzZXMuc2l6ZSgpID09IGNhc2VWYWx1ZXMuc2l6ZSgpKTsKKworICAgIC8vIElmIHdlIGFyZSBv
dmVyIHRoZSBsaW1pdCwganVzdCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgorICAgIHVuc2ln
bmVkIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZTsKKyAgICBpZiAoaXNXZWJBc3Nl
bWJseSkKKyAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0gT3B0aW9u
czo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9yV2ViQXNzZW1ibHlUb0pTKCk7
CisgICAgZWxzZSBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6dG9w
VGllckpJVCgpKQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBP
cHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVyKCk7Cisg
ICAgZWxzZQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRp
b25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsKKworICAgIC8vIFdlIHVz
ZSBsaXN0LnNpemUoKSBpbnN0ZWFkIG9mIGNhbGxDYXNlcy5zaXplKCkgYmVjYXVzZSB3ZSByZXNw
ZWN0IENhbGxWYXJpYW50IHNpemUgZm9yIG5vdy4KKyAgICBpZiAobGlzdC5zaXplKCkgPiBtYXhQ
b2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Io
dm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFZlY3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBV
bmlxdWVBcnJheTx1aW50MzJfdD4gZmFzdENvdW50czsKKworICAgIGlmICghaXNXZWJBc3NlbWJs
eSAmJiBjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkp
IHsKKyAgICAgICAgZmFzdENvdW50cyA9IG1ha2VVbmlxdWVBcnJheTx1aW50MzJfdD4oY2FsbENh
c2VzLnNpemUoKSk7CisgICAgICAgIG1lbXNldChmYXN0Q291bnRzLmdldCgpLCAwLCBjYWxsQ2Fz
ZXMuc2l6ZSgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBj
YWxsZWVHUFIgPSBjYWxsTGlua0luZm8uY2FsbGVlR1BSKCk7CisKKyAgICBib29sIGlzRGF0YUlD
ID0gY2FsbExpbmtJbmZvLmlzRGF0YUlDKCk7CisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoY2Fs
bGVyQ29kZUJsb2NrKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4g
ZnJhbWVTaHVmZmxlcjsKKyAgICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkg
eworICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7CisgICAgICAgIGZy
YW1lU2h1ZmZsZXIgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2Fs
bExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlz
IGEgY2VsbCwgYW5kIHdlIGNhbgorICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0
ZXIgdGhpcyBidXlzIHVzLgorICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0Nl
bGwoKTsKKyNlbmRpZgorICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7
CisgICAgfQorCisgICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKKyAgICBpZiAoaXNDbG9z
dXJlQ2FsbCkgeworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAgIGNvbXBh
cmlzb25WYWx1ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxl
Y3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGNvbXBhcmlzb25W
YWx1ZUdQUiA9IGNhbGxlZUdQUjsKKworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUjsKKyAg
ICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPSBmcmFtZVNo
dWZmbGVyLT5hY3F1aXJlR1BSKCk7CisgICAgZWxzZSB7CisgICAgICAgIGZhc3RDb3VudHNCYXNl
R1BSID0KKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxs
ZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIH0KKyAgICBz
dHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3VudHMuZ2V0KCkp
LCBmYXN0Q291bnRzQmFzZUdQUik7CisKKyAgICBpZiAoIWZyYW1lU2h1ZmZsZXIgJiYgY2FsbExp
bmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhh
dCBjYWxsZWVHUFIgaXMgbm90IGEgY2FsbGVlIHNhdmUgcmVnaXN0ZXIgaW4gdGhlIHNsb3cgcGF0
aC4KKyAgICAgICAgQVNTRVJUKCFjYWxsZXJDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KS0+ZmluZChjYWxsZWVHUFIpKTsKKyAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAg
ICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEg
ZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2hHUFIuCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpCisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BS
LCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUikpOworI2Vsc2UK
KyAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVl
IGlzIGEgY2VsbC4KKyNlbmRpZgorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFz
dCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICBz
bG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOwor
CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BS
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBjb21wYXJpc29u
VmFsdWVHUFIpOworICAgICAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBzdHViSml0LmJyYW5jaFRl
c3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBjb21wYXJpc29uVmFsdWVHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIHN0dWJK
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29tcGFyaXNvblZhbHVlR1BSLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSwgY29tcGFyaXNvblZhbHVlR1BSKTsKKyAgICAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZz
dHViSml0KTsKKyAgICB9CisKKyAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlz
b25WYWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uo
c3R1YkppdCkpIHsKKyAgICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRjaC5jYXNl
SW5kZXgoKTsKKyAgICAgICAgCisgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxsQ2Fz
ZXNbY2FzZUluZGV4XS52YXJpYW50KCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhl
Y3V0YWJsZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhh
c0pJVENvZGVGb3JDYWxsKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb2RlUHRyID0g
anNUb1dhc21JQ0NvZGVQdHIodm0sIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSwg
dmFyaWFudC5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAg
ICAgICAgICBjb2RlUHRyID0gdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkp
OworICAgICAgICAgICAgY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9s
aW5lRm9yKENvZGVGb3JDYWxsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZh
c3RDb3VudHMpIHsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkMzIoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2YodWludDMy
X3QpKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG5lZWRzRG9uZUp1bXAgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKHN0dWJKaXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOworICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFp
bENhbGwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7
CisgICAgICAgICAgICBzdHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAg
ICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNEYXRhSUMpCisgICAgICAgICAgICAgICAg
Y2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJK
aXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBuZWVkc0RvbmVKdW1wID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIg
PSBjb2RlUHRyOworICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkgeworICAgICAgICAgICAgQVNT
RVJUKCFpc0RhdGFJQyk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7Cisg
ICAgYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkubGluaygmc3R1YkppdCk7CisKKyAgICBpZiAo
ZnJhbWVTaHVmZmxlcikgeworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxl
ZUdQUik7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVl
R1BSKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQ
Uik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2Fs
bGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KSk7CisjZWxzZQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZs
ZXItPnByZXBhcmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQu
bW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0KKyAgICBzdHViSml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxs
TGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0
YUlDLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAg
Ly8gMi4gSWYgaXQgaXMgdGFpbC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRo
ZSBkb25lTG9jYXRpb24gZm9yIHNsb3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0
byBwdXQgaXQgZm9yIHRoZSBzbG93LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7Cisg
ICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86
OnJlZ1Q0KTsKKyAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihHUFJJbmZvOjpyZWdUNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlD
KTsKKyAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihK
SVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJs
ZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsK
KyAgICAgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Cisg
ICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgbGlua1Zp
cnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxz
LnNpemUoKSk7CisgICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykg
eworI2lmIENQVShBUk1fVEhVTUIyKQorICAgICAgICAvLyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNp
bmcgZW5zdXJlcyBwcm9wZXIgbGlua2luZyBvbiBBUk0gVGh1bWIyLCB3aGVyZSBhIHRhaWwgY2Fs
bCBqdW1wcyB0byBhbiBhZGRyZXNzCisgICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJv
dHRvbSBiaXQgYnV0IGEgbm9ybWFsIGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3Jh
dGVkIGJvdHRvbSBiaXQuCisgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIu
Y2FsbC5pc0ZsYWdTZXQoQ0NhbGxIZWxwZXJzOjpDYWxsOjpUYWlsKTsKKyAgICAgICAgdm9pZCog
dGFyZ2V0ID0gaXNUYWlsQ2FsbCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24o
KSA6IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0
clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOworI2Vsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0Nv
ZGVQdHIuY29kZVB0cikpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKCFkb25lLmVtcHR5KCkp
IHsKKyAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
ZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKKyAgICB9CisgICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJ
U3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIAor
ICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKKyAgICAgICAgICAgIGNhbGxlckNv
ZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAorICAgICAgICAgICAg
IlBvbHltb3JwaGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAl
cyIsCisgICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NT
dHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9u
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1
bXAoY2FsbENhc2VzKSkuZGF0YSgpKSwKKyAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNh
bGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAorICAgICAgICBXVEZNb3ZlKGZh
c3RDb3VudHMpKSk7CisKKyAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hh
YmxlIG9uIDY0LWJpdHMsIGJ1dCBzdGlsbAorICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNp
bmNlIGEgbm9uLWNlbGwgY2FsbGVlIHdpbGwgYWx3YXlzCisgICAgLy8gdHJpZ2dlciB0aGUgc2xv
dyBwYXRoCisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisKKyAgICAvLyBJZiB0
aGVyZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUg
YXMgc29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcworICAgIC8vIHRoYXQgaXQncyBubyBsb25n
ZXIgb24gc3RhY2suCisgICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGlu
ZSkpOworICAgIAorICAgIC8vIFRoZSBjYWxsIGxpbmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2Fs
bCBjYWNoZSBhcGFydCBmcm9tIHRoZSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsCisgICAg
Ly8gc3R1Yi4KKyAgICBpZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCisgICAgICAgIGNhbGxM
aW5rSW5mby5yZW1vdmUoKTsKK30KKwordm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRp
bWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2Fz
ZSBHZXRCeUtpbmQ6OkJ5SWQ6CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKKyAg
ICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVj
dDoKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgY2FzZSBHZXRCeUtp
bmQ6OlByaXZhdGVOYW1lOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQoreworICAgIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNo
IChraW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVu
Y3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6
ZSk7CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHVi
SW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAg
ICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRT
dHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERl
ZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0
aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElD
Q2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RH
ZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVG
aWVsZEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNl
dFByaXZhdGVGaWVsZE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5l
QWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCByZXNldERl
bEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERl
bEJ5S2luZCBraW5kKQoreworICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUpOworICAgIGVsc2UKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKKyAgICBJ
bmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCit7Cisg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdJbkJ5RnVuY3Rpb24oa2luZCkpOworICAgIGlmIChraW5kID09IEluQnlLaW5kOjpC
eUlkKQorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8pOworICAgIGVsc2UKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8p
OworfQorCit2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Cisg
ICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VP
Zk9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRD
aGVja1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNjZXNz
OjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8pOworfQorCit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRp
bWl6ZSk7CisgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5n
SW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCisjZW5kaWYKKworfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45M2EwMzY1MzI2YWJmYmVkZWUwNTc1ODljNDU0MDliMmViMzY1ODk1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApAQCAt
MCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKworZW51bSBjbGFzcyBHZXRC
eUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCisgICAgVHJ5QnlJZCwKKyAgICBCeUlkV2l0
aFRoaXMsCisgICAgQnlJZERpcmVjdCwKKyAgICBQcml2YXRlTmFtZSwKKyAgICBQcml2YXRlTmFt
ZUJ5SWQsCit9OworCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZh
bCwKK307CisKK2VudW0gY2xhc3MgRGVsQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsCit9
OworCitlbnVtIGNsYXNzIEluQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorICAgIFBy
aXZhdGVOYW1lCit9OworCit2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwordm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U1ZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
dXRCeUtpbmQsIFB1dEtpbmQpOwordm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1v
ZGUpOwordm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2Jq
ZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hIYXNQcml2
YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJs
ZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCBy
ZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09i
amVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJl
cGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVj
dCosIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7
Cit2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNW
YWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3
YXNGb3VuZCk7Cit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBD
YWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4pOwordm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKK3Zv
aWQgdW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5mbyYpOwordm9pZCBsaW5rUG9seW1vcnBoaWND
YWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlh
bnQpOwordm9pZCByZXNldEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0
QnlLaW5kKTsKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IFB1dEJ5S2luZCk7Cit2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBEZWxCeUtpbmQpOwordm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBJbkJ5S2luZCk7Cit2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChDb2RlQmxvY2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQsIEpTT2JqZWN0KiBjYWxsZWUpOworCisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZWZlN2IxYjMzNzY0YmRmNDJiMmU0ZjAyZDRkZjBjZDllODFjNDllCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVz
LmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlcGF0Y2guaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1
ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBjYWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOworCisgICAgaWYg
KGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKKyAg
ICAgICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOworICAgICAgICBB
U1NFUlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgICAgIGlm
IChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKKyAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAg
ICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAgICAg
ICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
bihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAg
ICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dCgKKyAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgIExMSW50
OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLAorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5r
SW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVw
VGhlRnJhbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlID09
IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUp
KTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgIHZtLmdldENUSVRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
LAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Cisg
ICAgfQorCisgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0g
Q29kZUZvckNvbnN0cnVjdCk7CisKKyAgICBhdXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1
Y3REYXRhKHZtLCBjYWxsZWUpOworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgIT0gQ2Fs
bERhdGE6OlR5cGU6OkpTKTsKKworICAgIGlmIChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERh
dGE6OlR5cGU6Ok5hdGl2ZSkgeworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsZWVGcmFtZSk7CisgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmpl
Y3QoY2FsbGVlKSk7CisgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0
KHZtKSwgY2FsbGVlRnJhbWUpOworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVy
biBlbmNvZGVSZXN1bHQoCisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZh
bHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY29uc3RydWN0
RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmpl
Y3QsIGNhbGxlZSkpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgIHZtLmdldENU
SVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLAorICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKK30K
KworQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNh
bGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbykKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIFJF
TEVBU0VfQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOworCisgICAgSlNWYWx1ZSBj
YWxsZWVBc1ZhbHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7Cisg
ICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNW
YWx1ZSk7CisgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkgeworICAgICAgICBpZiAoYXV0
byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZt
LCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihraW5kKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CisKKyAg
ICAgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBu
dWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKKworICAgICAgICAgICAgdm9pZCog
bGlua2VkVGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJh
bWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwg
Y2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiog
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAg
SlNTY29wZSogc2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKKworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbnVsbHB0cjsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkg
eworICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7
CisgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxl
LT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworCisgICAgICAgIGF1dG8gaGFuZGxl
VGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgeworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQg
PSB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJn
ZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9Owor
CisgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3Ry
dWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgeworICAg
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICAgICAg
cmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2Rl
QmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygp
OworICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rp
b25FeGVjdXRhYmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0
aW9uKCkpOworCisgICAgICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OworICAgICAgICBB
U1NFUlQoY29kZUJsb2NrKTsKKworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKKyAgICAg
ICAgaWYgKGNhbGxlZUZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZv
LT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAg
ICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFy
aXR5KTsKKyAgICB9CisKKyAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBsaW5rTW9ub21v
cnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxs
ZWUsIGNvZGVQdHIpOworCisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1v
ZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsK
K30KKworQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5j
dGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1l
LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNl
bGwpCit7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJh
bWUoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGNh
bGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAg
ICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKKyAgICAgICAgaWYgKGpz
RHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2
bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAg
IEFTU0VSVCghIWNvZGVQdHIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5r
SW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVw
VGhlRnJhbWUpKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNW
YWx1ZSwgY2FsbExpbmtJbmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3Bl
KiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOworICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5MSUtFTFko
IWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9
IFsmXSAoKSB7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFp
c0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0g
Q29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4
Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVy
cm9yKGdsb2JhbE9iamVjdCwgZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVU
aHJvd0V4Y2VwdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgQ29kZUJsb2NrKiogY29kZUJs
b2NrU2xvdCA9IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKKyAgICAgICAgZnVu
Y3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4o
dm0sIGZ1bmN0aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOworICAg
IH0KKyAgICAvLyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoCisgICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5
KS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXgg
MGQxOWUyNzkwNTZlNWYzN2U3NzFjNWM0OWEyZGIwZTZjMmQ4NDhkNy4uYWM1NzEyN2JjZjg5MDcy
YmUwMzg0MTZkYTEzOWI0MWYxNjRhZTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC00MDMsNyArNDAzLDYgQEAg
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyh1bnNpZ25lZCBu
dW1CaW5hcnlBcml0aFByb2ZpbGVzLAogCiAjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJy
YXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCi0gICAgICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAg
ICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9w
SXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDQwMzk0YTk0Mzk5Mjk5M2Y1
NDVhMmFjNjJjZjZlZGMwOWRmNTU1ZmEuLjFjNTkwNDJlMGQwYzM4MTFiM2M5YmUyMTU4Y2RjNTRj
MDFkYmI4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCkBAIC03NSw3ICs3NSw2IEBAIGNsYXNzIENhY2hlZENvZGVCbG9jazsK
IAogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBl
ZGVmIHVuc2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci10eXBlZGVmIHVu
c2lnbmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87CiAKIHN0cnVjdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA1YzcyMDU4ZGNmMjE5NjBk
Y2Y4NTNlMGE5MmMyN2U4OWEyZDU2YmVlLi41ZTMyZDJkMjRmMWIzZWQ4NzBjMzMwZjJlZjIzZDg1
ZTRlY2U0ODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwCkBAIC0zMTUsNiArMzE1LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2
ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAg
Y2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9p
bnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5h
bF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2xpbmtfY2Fs
bF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2dldF9ob3N0
X2NhbGxfcmV0dXJuX3ZhbHVlOgogICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2Vw
dGlvbjoKICAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJh
bXBvbGluZToKQEAgLTMyNSw2ICszMjksOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxl
dmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAg
IGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxs
X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0
aW9uOgpAQCAtMzM1LDcgKzM0MSw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwo
T3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRv
cl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9z
bG93X3JldHVybl9sb2NhdGlvbjoKLSAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRp
b246CiAgICAgY2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb246CiAg
ICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKQEAgLTM0
Myw4ICszNDgsOSBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugd2FzbV9mdW5j
dGlvbl9wcm9sb2d1ZToKICAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgog
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsOgotICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF90YWlsX2NhbGw6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0
b3JfbmV4dDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKICAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGI0NTFjZGI2
MWY3YTExYjMzMDJjMTg1YzY2YmZmMTdhOWZkYmUwOWYuLmU3MjJmOWViZGFjYzg5MzY5MDY1NmQ1
YjYzZTlmNjI0NDQ2MTVmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTE2NiwxMCArMTY2LDEwIEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMo
Q29kZUJsb2NrKiBiYXNlbGluZUNvCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVU
VVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdl
dCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0
cnVjdFZhcmFyZ3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRhcmdldCA9
IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsKICAg
ICAgICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlfaWQp
CkBAIC0yMDEsMTAgKzIwMSwxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogICAgICAgICBj
YXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgogICAgICAgICBjYXNlIElubGluZUNhbGxG
cmFtZTo6Q2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1
Y3RWYXJhcmdzOiB7Ci0gICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9Ci0g
ICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5m
b0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gPSBudWxscHRyOworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPm1fbG9jayk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBj
YWxsQnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm8pOwotCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJ
bmZvLT5kb25lTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDk1NmQ2OTQwZTdkMjBiODIwMmYyNTUz
ZWM1ZmU3MGI3ZThlOWU2MGEuLmU2MWY4OTRiZTEwOGNjYmZhMTJkYjIwODkyOWVjZGUyYzNkZjBm
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcApAQCAtODQ3LDEwICs4NDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1p
dFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGluZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAg
ICAgaW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2
b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNo
dWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9KSk7CiAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1f
aml0LmxhYmVsKCk7CiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAg
ICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIHNj
b3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRh
aWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVm
ZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTkwMCw3ICs5MDAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJl
Rm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aCht
X2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKaW5kZXggMGZlN2E3OTA5MTVhNzI0ZjRlMWZmYmQ5NmJhMTRlN2E4NWNi
OGM3OS4uNzcwNzNmMzRhZmJmZGY5NWZlNTgyNWEzYzg5ODljMzIyM2RkYWE1YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC05
MzgsMTAgKzkzOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2Rl
KQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwo
KTsKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwog
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBbJl0geworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxG
YXN0UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwogICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7
CkBAIC05ODEsNyArOTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZSkKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBp
ZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBzY29w
ZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWls
Q2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTk4OSw3ICs5ODksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAg
IG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAg
ICAgICB9KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+
ZW1pdEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBlMWM4MmRmODgzNDE0OTE5ODRiMDk4MzgxYjgwZDVlYTM2NzJkNmViLi4wMThhMmY4NThm
NDIxMWQzODdiNDJiNjkyZTI1YjUxODYxYmU0Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMDQwMywxMCArMTA0MDMsMTAgQEAgSUdO
T1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0
VGFpbENhbGxGYXN0UGF0aChqaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBzY29wZWRMYW1iZGE8dm9pZCgp
PihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1
ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJl
dHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA1NTksMTAgKzEw
NTU5LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkQ2FsbExp
bmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAg
ICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KSk7CiAKICAgICAg
ICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGF1dG8gc2xv
d1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwpAQCAtMTA5MDIsMTAgKzEwOTAyLDEwIEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86
OnJlZ1QwLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRh
PHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9
KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZh
bGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAg
ICAgICBkb25lID0gaml0Lmp1bXAoKTsKQEAgLTExMTgzLDEwICsxMTE4MywxMCBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2
b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGppdC5qdW1wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAKaW5kZXggYzhjYmJlZTA2YmY3ZDY2NjJjMTlhNGE0YThhMThjMjFjZWZk
M2Y3Mi4uZTY0NTg1MzFlYmM5MDRkZTVkZDA0Y2UzYWJhNTNjNWJkM2M3MGIwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNzQ1LDE4ICs3
NDUsMTggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1AKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
TGlua0luZm8qIGluZm8pCiB7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCks
IEdQUkluZm86OnJlZ1QzKTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KHZtLCBpbmZvKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZt
LCBHUFJJbmZvOjpyZWdUMiwgaW5mby0+Y2FsbE1vZGUoKSk7CiB9CiAKLXZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwg
Q2FsbExpbmtJbmZvKiBpbmZvKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2Fs
bFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBtb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIp
OwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7
CiAgICAgICAgIGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soWz0sICZ2
bV0gKCkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKLSAgICAg
ICAgICAgIGluZm8tPnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZt
LCB2aXJ0dWFsVGh1bmspKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2Fs
bE1vZGUpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxs
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFs
VGh1bmsuY29kZSgpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggNjVkZDhlZGVmNzQ3OTk2ZDVmNmQ4ZjE5
MjQ2ZTZhZDkzMzZkNDczOC4uYTQ0YWE1Y2Y5NTRmMmMxNjU0NzllYzJkY2Q5MjNkNWZmNGYzZDFm
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0x
NzUyLDcgKzE3NTIsNyBAQCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3Nl
bWJsZXIgewogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7Ci0gICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRo
b3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0
VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgQ2FsbE1vZGUpOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCmluZGV4IDE1ODk2MDNmMTQ5YzI3
NmMzNTllN2JiMjZkNjRmNGQ4NTcyN2YxNTAuLjMwMDNiMDczNTAxODhlNWY3M2ZjYzk2NzIwZDZh
OWU3NDFmOGJjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENv
ZGUuaApAQCAtNjIsNyArNjIsNiBAQCBjbGFzcyBKSVRDb25zdGFudFBvb2wgewogCiAgICAgZW51
bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CiAgICAgICAgIEdsb2JhbE9iamVjdCwKLSAgICAgICAg
Q2FsbExpbmtJbmZvLAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKICAgICAgICAgRnVuY3Rp
b25EZWNsLAogICAgICAgICBGdW5jdGlvbkV4cHIsCkBAIC05Myw3ICs5Miw2IEBAIGNsYXNzIEJh
c2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVy
IHsKICAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CiAgICAgUENUb0NvZGVPcmlnaW5N
YXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdp
bk1hcC5nZXQoKTsgfQogCi0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZv
czsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxz
OwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CiAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggOTI5NDI0NjA3MzQwMDkxMWI2
YzM1N2M3OGE0YTBjNmE3NGU5YWFkNC4uMjhhZTZmNzcwZGRhY2Q3MWM2ZjE4MmM5ZDE3OWZkMWNj
ZWI4ZGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMTAxLDEyICsxMDEsOSBA
QCBzdGQ6OnR1cGxlPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qLCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50PiBKSVQ6OmFkZFVubGluawogICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgc3R1Yklu
Zm8sIHN0dWJJbmZvSW5kZXggfTsKIH0KIAotc3RkOjp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5m
byosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0lu
Zm8oKQorVW5saW5rZWRDYWxsTGlua0luZm8qIEpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8o
KQogewotICAgIHZvaWQqIHVubGlua2VkQ2FsbExpbmtJbmZvSW5kZXggPSBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV91bmxpbmtlZENhbGxzLnNpemUoKSkpOwot
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gJm1fdW5saW5rZWRDYWxscy5hbGxvYygp
OwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvSW5kZXggPSBhZGRU
b0NvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgdW5saW5r
ZWRDYWxsTGlua0luZm9JbmRleCk7Ci0gICAgcmV0dXJuIHN0ZDo6dHVwbGUgeyBpbmZvLCBjYWxs
TGlua0luZm9JbmRleCB9OworICAgIHJldHVybiAmbV91bmxpbmtlZENhbGxzLmFsbG9jKCk7CiB9
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTEwMTAsNyArMTAwNyw2IEBAIHZvaWQgSklUOjps
aW5rKCkKICAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IEZpeGVkVmVjdG9yPFVubGlu
a2VkQ2FsbExpbmtJbmZvPihtX3VubGlua2VkQ2FsbHMuc2l6ZSgpKTsKICAgICBpZiAobV9qaXRD
b2RlLT5tX3VubGlua2VkQ2FsbHMuc2l6ZSgpKQogICAgICAgICBzdGQ6Om1vdmUobV91bmxpbmtl
ZENhbGxzLmJlZ2luKCksIG1fdW5saW5rZWRDYWxscy5lbmQoKSwgbV9qaXRDb2RlLT5tX3VubGlu
a2VkQ2FsbHMuYmVnaW4oKSk7Ci0gICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0g
V1RGTW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKICAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRT
dHViSW5mb3MgPSBGaXhlZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPihtX3VubGlu
a2VkU3R1YkluZm9zLnNpemUoKSk7CiAgICAgaWYgKG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJ
bmZvcy5zaXplKCkpCiAgICAgICAgIHN0ZDo6bW92ZShtX3VubGlua2VkU3R1YkluZm9zLmJlZ2lu
KCksIG1fdW5saW5rZWRTdHViSW5mb3MuZW5kKCksIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJ
bmZvcy5iZWdpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGRlMmM1Y2U3NzBiYmQ1
OTNiN2FlNWZkMWE2NTI2NzM4OTQzZGQ5YTEuLjY3YjQzZDhmYTMwYjcyY2JkNDk0NDYyMjhjNjQy
OTY0ZjNkMzM1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMTUzLDcgKzE1Myw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKICAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOwotICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKQEAgLTI5NCwxNiArMjkzLDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAg
T3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyAgICAgICAgLCB2b2lk
PiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAg
ICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
ICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJ
bmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2Fs
bExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsK
ICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTcwNiw2ICs3MDUsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJv
ZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgogICAgICAgICB2b2lkIGVt
aXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBjb25zdCBJbnN0cnVjdGlv
biosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVu
Y3Rpb24pOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiByZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKTsKKwor
ICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIC8vIFRo
dW5rIGdlbmVyYXRvcnMuCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7
CkBAIC03MjEsNyArNzI0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxl
ckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3JldF9oYW5kbGVy
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSkKQEAgLTk1OCw3ICs5NjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGFkZFRvQ29uc3RhbnRQb29sKEpJVENv
bnN0YW50UG9vbDo6VHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpOwogICAgICAgICBzdGQ6
OnR1cGxlPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50PiBhZGRVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKCk7Ci0gICAgICAgIHN0ZDo6dHVwbGU8
VW5saW5rZWRDYWxsTGlua0luZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBhZGRVbmxp
bmtlZENhbGxMaW5rSW5mbygpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogYWRkVW5s
aW5rZWRDYWxsTGlua0luZm8oKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRl
cjsKIApAQCAtMTAyOSw3ICsxMDMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgVmVj
dG9yPEpJVENvbnN0YW50UG9vbDo6VmFsdWU+IG1fY29uc3RhbnRQb29sOwogICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKLSAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4g
bV9ldmFsQ2FsbExpbmtJbmZvczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFVubGlua2VkQ2Fs
bExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOwogICAgICAgICBGaXhl
ZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDA5MTk5MTU4NDY4YzBmZTEwMmI1ZGZiZmEyYmU0
ZmUxNzMxOTdlMmIuLjgxNTFmZmRlNmE5ZjJlYjBjMzI0NzVkNWJmZGRhYWVkYTEwMDAzODAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTksMTcgKzU5LDIxIEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1cm5WYWx1
ZUdQUjIvcmV0dXJuVmFsdWVHUFIgb24gMzItYml0KS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlSlNSKTsKLQotI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIHJl
dCgpOwotI2Vsc2UKLSAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIob3BfcmV0
X2hhbmRsZXJHZW5lcmF0b3IpLmNvZGUoKSk7Ci0jZW5kaWYKKyAgICBlbWl0TmFrZWROZWFySnVt
cCh2bSgpLmdldENUSVN0dWIocmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5jb2RlKCkpOwog
fQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6cmV0dXJuRnJv
bUJhc2VsaW5lR2VuZXJhdG9yKFZNJikKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAg
aml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQu
cmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfcmV0X2hh
bmRsZXIiKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQpAQCAtODQsNyArODgsNyBAQCBzdGQ6OmVuYWJs
ZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKQEAgLTk3
LDcgKzEwMSw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXRJbmNsdWRpbmdUaGlzKDApKSwgdG1wSlNSKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNo
SWZOb3RDZWxsKHRtcEpTUik7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHRtcEpTUi5wYXlsb2Fk
R1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHRtcEdQUik7Ci0gICAgICAgIHN0
b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNl
dE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAg
ICAgICBzdG9yZTMyVG9NZXRhZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVu
U3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTEx
MCw3ICsxMTQsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNh
bGxMaW5rSW5mb0NvbnN0YW50KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3Vt
ZW50czsKQEAgLTE2MCw3ICsxNjQsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZgogCiAgICAg
Ly8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDUs
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9h
ZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExp
bmtJbmZvKCksIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZv
OjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CiAgICAg
SnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CiAgICAgc3Rv
cmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKQEAgLTIwMyw2NCArMjA3LDU5IEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0lu
Zm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsK
LQogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CiAKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBsb2FkVmFsdWUoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6
ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSksIGNhbGxlZUpTUik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAg
ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ2FsbEV2YWw6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOworICAgIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGNhbGxMaW5rSW5mb0dQUiwgQ2Fs
bE1vZGU6OlJlZ3VsYXIpOwogICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0
KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRh
aWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0Nv
bnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
IHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRh
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKLSAgICBzaHVmZmxlRGF0YS0+
bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS0+bnVtUGFy
YW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BUYWlsQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9m
Q2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhz
ID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVl
SlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihb
Jl17CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhIHsgfTsKKyAgICAg
ICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdS
ZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgICAgICBzaHVmZmxlRGF0
YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwogI2VuZGlm
Ci0gICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9Ci0gICAgICAgIGJ5dGVjb2RlLm1fYXJndiAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZs
ZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLT5h
cmdzW2ldID0KLSAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygK
LSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMo
aSkgLSBieXRlY29kZS5tX2FyZ3YsCi0gICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKLSAg
ICB9CisgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgICAgICAgICBieXRlY29k
ZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKKyAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAorICAgICAg
ICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOworICAgICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVl
SlNSLnBheWxvYWRHUFIoKSwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgc2h1ZmZsZURhdGEuY2Fs
bGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgRGF0YUZv
cm1hdEpTKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgc2h1ZmZsZURhdGEtPmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5w
YXlsb2FkR1BSKCkpOworICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5
OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpKTsKICNl
bmRpZgotICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVy
QXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLQotICAg
IGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENvbnN0
YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOwotICAgIEp1bXBMaXN0
IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZdIHsKLSAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2h1ZmZsZXIgeyAqdGhpcywgKnNodWZmbGVEYXRhIH07Cisg
ICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9m
ZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCBzaHVmZmxlRGF0YSB9OwogICAgICAg
ICBzaHVmZmxlci5sb2NrR1BSKGNhbGxMaW5rSW5mb0dQUik7CiAgICAgICAgIHNodWZmbGVyLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgIH0pOworICAgIH0pKTsKICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aHMpOwogCi0gICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7Ci0gICAgaW5mby0+
ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOwotCiAgICAgYXV0byBkb25l
TG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjg4LDE3ICsy
ODcsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICAqLwogCiAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCkgewotICAgICAgICBzdGQ6OnRpZShpbmZvLCBpbmZvQ29uc3RhbnQpID0gYWRkVW5saW5r
ZWRDYWxsTGlua0luZm8oKTsKKyAgICAgICAgaW5mbyA9IGFkZFVubGlua2VkQ2FsbExpbmtJbmZv
KCk7CiAgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAg
ICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7
CiAgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5r
SW5mb0luZGV4KTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29t
cGlsYXRpb25JbmZvKCkpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKLSAgICAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGlu
Zm9Db25zdGFudDsKICAgICB9Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9D
b25zdGFudCk7CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUpOwogCiAgICAgLy8gU1Ag
aG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3Vt
ZW50Q291bnQgaW5pdGlhbGl6ZWQuCiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKQEAgLTMxNiwxNiArMzEyLDE2IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGNh
bGxlZUpTUikpOwogI2VuZGlmCiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBp
bmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKKyAgICBpZiAoY29tcGlsZVRh
aWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAg
bG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZD
YWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFp
bENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExp
bmtJbmZvR1BSLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCks
IGNhbGxMaW5rSW5mb0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxs
U2xvdyhjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxh
YmVsKCk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
ZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwpAQCAtMzQ0LDE1ICszNDAsMTYgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmQKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5z
aWduZWQpCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CisgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBBU1NFUlQob3Bjb2RlSUQg
IT0gb3BfY2FsbF9ldmFsKTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRh
OjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwpAQCAtMzY2LDcgKzM2Myw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFCiAKICAgICByZXNldFNQKCk7CiAKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4
MDM5ODM2Y2VlNmM3YjM0ZmQyYzMwNC4uMmZlMjNjNDlmZDBmOTQwOTFmNjg2MDViNzU3YWUyY2Uz
MjIwMTRhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0z
NzAsMjEgKzM3MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKLXsK
LSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBqaXQuZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRy
YUNUSVRodW5rKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJCYXNlbGluZTogb3BfcmV0X2hhbmRsZXIiKTsKLX0KLSNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGYxNWQyZTE3M2JlNWZiNzlh
OGE1YWQ1NjgyOTFhOWFkOWMyMTk5NzUuLjQzMjcxNWZiODdhZjQ4YTM2OTdlMzMzZGFhZGM0NTBk
ZTQ4MDkxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cApAQCAtNjAsNyArNjAsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiUmVwYXRjaC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2hh
ZG93Q2hpY2tlbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAi
U3VwZXJTYW1wbGVyLmgiCkBAIC0xNDQ2LDE4NiArMTQ0Niw5IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCogZ2xvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1zdGF0aWMg
U2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgY2FsbGVlRnJh
bWUtPnNldENvZGVCbG9jayhudWxscHRyKTsKLQotICAgIGlmIChjYWxsTGlua0luZm8tPnNwZWNp
YWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIGF1dG8gY2FsbERhdGEg
PSBnZXRDYWxsRGF0YSh2bSwgY2FsbGVlKTsKLSAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUg
IT0gQ2FsbERhdGE6OlR5cGU6OkpTKTsKLQotICAgICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBD
YWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0
Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+
Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUpOwotICAgICAgICAgICAgRGlzYWxsb3dHQyBk
aXNhbGxvd0dDOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAg
ICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAg
ICAgICAgICAgICBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVz
ZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgQVNT
RVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwotICAgICAgICB0aHJv
d0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihn
bG9iYWxPYmplY3QsIGNhbGxlZSkpOwotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAg
ICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCks
Ci0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKLQotICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVj
dERhdGEodm0sIGNhbGxlZSk7Ci0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxs
RGF0YTo6VHlwZTo6SlMpOwotCi0gICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0
YTo6VHlwZTo6TmF0aXZlKSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVj
dChjYWxsZWUpKTsKLSAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qo
dm0pLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwotICAgIH0KLQotICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6
OlR5cGU6Ok5vbmUpOwotICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgcmV0
dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBU
aGVGcmFtZSkpOwotfQotCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0Nh
bGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKSkKIHsKLSAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9
IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCgh
Y2FsbExpbmtJbmZvLT5pc0RpcmVjdCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFs
dWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBKU0NlbGwq
IGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKLSAg
ICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7Ci0gICAgICAgIGlmIChhdXRvKiBpbnRlcm5h
bEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFz
VmFsdWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKLQotICAgICAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRTZWVuKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua01v
bm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGlu
dGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwotCi0gICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJn
ZXQgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJ
bmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBU
aGVGcmFtZSkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1Zh
bHVlLCBjYWxsTGlua0luZm8pKTsKLSAgICB9Ci0KLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU1Njb3BlKiBz
Y29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBu
dWxscHRyOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAg
IGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKLSAgICAgICAg
aWYgKCFjb2RlUHRyKQotICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2Vw
dGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2Vl
cFRoZUZyYW1lKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYg
ZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0KSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVj
dCwgY2FsbGVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVG
cmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3Bl
LCBraW5kLCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0g
KmNvZGVCbG9ja1Nsb3Q7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgICAgIEFy
aXR5Q2hlY2tNb2RlIGFyaXR5OwotICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQotICAgICAgICAgICAgYXJp
dHkgPSBNdXN0Q2hlY2tBcml0eTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJpdHkgPSBB
cml0eUNoZWNrTm90UmVxdWlyZWQ7Ci0gICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwotICAgIH0KLQotICAgIGlmICghY2FsbExp
bmtJbmZvLT5zZWVuT25jZSgpKQotICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAg
ICBlbHNlCi0gICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2Fs
bExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0KLSAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwotfQotCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsZWVGcmFtZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbCom
IGNhbGxlZUFzRnVuY3Rpb25DZWxsKQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2Fs
bGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlv
bktpbmQoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwotCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRK
U1ZhbHVlQ2FsbGVlKCk7Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9u
KGNhbGxlZUFzVmFsdWUpOwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwp
KSB7Ci0gICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2Fs
bGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Io
a2luZCk7Ci0gICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAgICAgICAgIHJldHVy
biBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBS
ZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2Fs
bGVlRnJhbWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLSAgICAKLSAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5j
dGlvbkNlbGwpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2Vk
KCk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJs
ZSgpOwotICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkp
IHsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRv
IGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93
VGFyZ2V0ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAo
IWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9
PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9y
RXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuIGhhbmRs
ZVRocm93RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlQmxvY2sqKiBjb2Rl
QmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwotICAgICAgICBm
dW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxl
Pih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0g
ICAgfQotICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQotICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigKLSAgICAgICAga2luZCwgTXVzdENoZWNrQXJp
dHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJh
bWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwgZ2xv
YmFsT2JqZWN0LCBjYWxsTGlua0luZm8pOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZy
YW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8pKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0OGQ1MWNkYTRlMmEyMWE5MjE3OWI1MTVmOTg0
YWYyYzY4ZDZkZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDIwMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXBhdGNoLmgiCi0K
LSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCi0jaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIK
LSNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKLSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkRPTUpJVEdldHRl
clNldHRlci5oIgotI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkV4ZWN1
dGFibGVCYXNlSW5saW5lcy5oIgotI2luY2x1ZGUgIkZUTFRodW5rcy5oIgotI2luY2x1ZGUgIkZ1
bGxDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNTdGF0cy5oIgot
I2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgotI2luY2x1ZGUgIkluc3RhbmNlT2ZBY2Nlc3NDYXNl
LmgiCi0jaW5jbHVkZSAiSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIkpJ
VC5oIgotI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5LmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKLSNpbmNsdWRlICJNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmgiCi0jaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKLSNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJTdGFja0FsaWdu
bWVudC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgotI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgotI2luY2x1ZGUgIlRodW5rR2Vu
ZXJhdG9ycy5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNsdWRlIDx3
dGYvQ29tbWFQcmludGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQotewotICAgIEpTQ19SRVRVUk5f
UkVUQUdHRURfT1BFUkFUSU9OX1dJVEhfVkFMSURBVElPTihvcGVyYXRpb24pOwotfQotCi1zdGF0
aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRhZ0NhbGxUYXJnZXRXaXRoVmFsaWRh
dGlvbihDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwpCi17Ci0gICAgSlND
X1JFVFVSTl9SRVRBR0dFRF9DQUxMX1RBUkdFVF9XSVRIX1ZBTElEQVRJT04oY2FsbCk7Ci19Ci0K
LXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJlYWRQdXRJQ0NhbGxUYXJnZXQo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmV0dXJuIHJldGFnT3BlcmF0
aW9uV2l0aFZhbGlkYXRpb24oc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uKTsKLSAgICBDb2RlTG9j
YXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwgPSBzdHViSW5mby5tX3Nsb3dQYXRoQ2Fs
bExvY2F0aW9uOwotI2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKLSAgICAgICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQ
dHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0
clRhZz4oY2FsbCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz4gdGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVG
cm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAg
ICByZXR1cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihjb2RlQmxvY2stPnZtKCkuZnRs
VGh1bmtzLT5rZXlGb3JTbG93UGF0aENhbGxUaHVuayh0aHVuaykuY2FsbFRhcmdldCgpKTsKLSAg
ICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwotI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQotICAgIHJldHVybiByZXRhZ0NhbGxUYXJnZXRXaXRoVmFsaWRhdGlvbihjYWxs
KTsKLX0KLQotdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSNpZiBFTkFCTEUoRlRMX0pJ
VCkKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7Ci0g
ICAgICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKLSAgICAgICAgRlRMOjpUaHVua3MmIHRo
dW5rcyA9ICp2bS5mdGxUaHVua3M7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFn
PiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+
KGNhbGwpOwotICAgICAgICBhdXRvIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBGVEw6OlNsb3dQYXRoQ2FsbEtleSBrZXkgPSB0
aHVua3Mua2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsoc2xvd1BhdGhUaHVuayk7Ci0gICAgICAgIGtl
eSA9IGtleS53aXRoQ2FsbFRhcmdldChuZXdDYWxsZWVGdW5jdGlvbik7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4o
dGh1bmtzLmdldFNsb3dQYXRoQ2FsbFRodW5rKHZtLCBrZXkpLmNvZGUoKSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgVU5VU0VEX1BBUkFN
KGNvZGVCbG9jayk7Ci0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlv
blB0clRhZz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGF0Y2hTbG93UGF0aENhbGwoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBpZiAoY29kZUJsb2Nr
LT51c2VEYXRhSUMoKSkgewotICAgICAgICBzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24gPSBuZXdD
YWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbiwgbmV3Q2FsbGVlRnVuY3Rpb24pOwotfQotCi1lbnVt
IElubGluZUNhY2hlQWN0aW9uIHsKLSAgICBHaXZlVXBPbkNhY2hlLAotICAgIFJldHJ5Q2FjaGVM
YXRlciwKLSAgICBBdHRlbXB0VG9DYWNoZQotfTsKLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IGFjdGlvbkZvckNlbGwoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgVHlwZUluZm8gdHlwZUluZm8g
PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0gICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZygpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgIC8vIEZsYXR0ZW5pbmcgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBv
ZmZzZXQsIHNvIHJldHVybiBlYXJseSBmb3IgYW5vdGhlciB0cnkuCi0gICAgICAgIGFzT2JqZWN0
KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7Ci0gICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7Ci0gICAgfQotICAgIAotICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0g
ICAgcmV0dXJuIEF0dGVtcHRUb0NhY2hlOwotfQotCi1zdGF0aWMgYm9vbCBmb3JjZUlDRmFpbHVy
ZShKU0dsb2JhbE9iamVjdCopCi17Ci0gICAgcmV0dXJuIE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJl
KCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgZmlyZVdhdGNocG9pbnRzQW5kQ2xl
YXJTdHViSWZOZWVkZWQoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVC
bG9jayogY29kZUJsb2NrLCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiByZXN1bHQpCi17Ci0gICAg
aWYgKHJlc3VsdC5zaG91bGRSZXNldFN0dWJBbmRGaXJlV2F0Y2hwb2ludHMoKSkgewotICAgICAg
ICByZXN1bHQuZmlyZVdhdGNocG9pbnRzKHZtKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0g
ICAgICAgICAgICBzdHViSW5mby5yZXNldChsb2NrZXIsIGNvZGVCbG9jayk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJp
YXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNo
IChraW5kKSB7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGNh
c2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgICAgICByZXR1
cm4gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpC
eVZhbDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgY2Fz
ZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVCeUlkT3B0aW1pemU7Ci0gICAg
fQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWlubGluZSBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQg
a2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWQ7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
SWRXaXRoVGhpczoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpczsKLSAg
ICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRyeUdl
dEJ5SWQ7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25HZXRCeUlkRGlyZWN0OwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYzsKLSAgICBjYXNlIEdldEJ5S2luZDo6
UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZTsKLSAg
ICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVCeUlkOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBi
YXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQp
Ci17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgcmVzdWx0OwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAg
ICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVy
dHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICBKU0NlbGwqIGJh
c2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICBjb25zdCBib29sIGlzUHJpdmF0
ZSA9IGtpbmQgPT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZSB8fCBraW5kID09IEdldEJ5S2luZDo6
UHJpdmF0ZU5hbWVCeUlkOwotCi0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwot
Ci0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7
Ci0gICAgICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewotICAgICAgICAgICAgICAg
IGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAg
ICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbAotICAgICAgICAgICAgICAg
ICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBz
dHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFy
cmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgobG9ja2VyKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBw
cm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxs
KSkgewotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5
cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFi
bGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmlu
Z0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdl
bmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlG
dW5jdGlvbihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0U3Ry
aW5nTGVuZ3RoKGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKERpcmVjdEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxEaXJl
Y3RBcmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhl
cmUgd2VyZSBvdmVycmlkZXMsIHRoZW4gd2UgY2FuIGhhbmRsZSB0aGlzIGFzIGEgbm9ybWFsIHBy
b3BlcnR5IGxvYWQhIEd1YXJkaW5nCi0gICAgICAgICAgICAgICAgLy8gdGhpcyB3aXRoIHN1Y2gg
YSBjaGVjayBlbmFibGVzIHVzIHRvIGFkZCBhbiBJQyBjYXNlIGZvciB0aGF0IGxvYWQgaWYgbmVl
ZGVkLgotICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQot
ICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2Rl
QmxvY2ssIEFjY2Vzc0Nhc2U6OkRpcmVjdEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoU2NvcGVkQXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5
bmFtaWNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBEaXR0by4KLSAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVU
aGluZ3MoKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTY29wZWRBcmd1bWVudHNMZW5ndGgsIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXByb3Bl
cnR5TmFtZS5pc1N5bWJvbCgpICYmIGJhc2VDZWxsLT5pbmhlcml0czxKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdD4odm0pICYmICFzbG90LmlzVW5zZXQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8g
bW9kdWxlTmFtZXNwYWNlU2xvdCA9IHNsb3QubW9kdWxlTmFtZXNwYWNlU2xvdCgpKQotICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qq
PihiYXNlQ2VsbCksIG1vZHVsZU5hbWVzcGFjZVNsb3QtPmVudmlyb25tZW50LCBTY29wZU9mZnNl
dChtb2R1bGVOYW1lc3BhY2VTbG90LT5zY29wZU9mZnNldCkpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBpZiAoIW5ld0Nhc2UpIHsKLSAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0
aW9uU2V0OwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3Ry
dWN0dXJlKHZtKTsKLQotICAgICAgICAgICAgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1By
b3h5VHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChpc1ByaXZhdGUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgIGJhc2VWYWx1ZSA9
IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgICAgICAgICBi
YXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBsb2FkVGFyZ2V0RnJv
bVByb3h5ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSW5saW5lQ2FjaGVB
Y3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNlbGwpOwotICAgICAgICAgICAg
aWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWN0
aW9uOwotCi0gICAgICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICAgICAgICAg
IGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAg
ICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAmJiBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hw
b2ludFNldCgpCi0gICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpCi0gICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkp
IHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRC
eVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2
bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRp
bWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRHZXRCeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsK
LQotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBp
bnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICAgICAgaWYgKHNs
b3QuaXNDdXN0b20oKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVG8gY2FjaGUgc2VsZiBjdXN0b21zLCB3ZSBtdXN0IGRpc2FsbG93IGRpY3Rp
b25hcmllcyBiZWNhdXNlIHdlCi0gICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBpbmZvcm1l
ZCBpZiB0aGUgY3VzdG9tIGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNoZSB0aGUKLSAgICAgICAgICAg
ICAgICAvLyBjb25zdGFudCBmdW5jdGlvbiBwb2ludGVyLgotCi0gICAgICAgICAgICAgICAgaWYg
KCFwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgc2xvdC5zbG90QmFzZSgpLCBz
bG90LnNsb3RCYXNlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNs
b3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0
ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlQ2VsbCkpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOyAvLyBXZSBtYXkgaGF2
ZSBjaGFuZ2VkIHByb3BlcnR5IG9mZnNldHMuCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS5nZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIGEg
a2luZCBpcyBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Qgb3IgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSwg
d2UgZG8gbm90IG5lZWQgdG8gaW52ZXN0aWdhdGUgcHJvdG90eXBlIGNoYWlucyBmdXJ0aGVyLgot
ICAgICAgICAgICAgICAgIC8vIENhY2hlYWJpbGl0eSBqdXN0IGRlcGVuZHMgb24gdGhlIGhlYWQg
c3RydWN0dXJlLgotICAgICAgICAgICAgICAgIGlmIChraW5kICE9IEdldEJ5S2luZDo6QnlJZERp
cmVjdCAmJiAhaXNQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0
dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3Qp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBQcm9wZXJ0eSBvZmZzZXRzIG1heSBoYXZlIGNoYW5nZWQgZHVlIHRvIGZsYXR0ZW5p
bmcuIFdlJ2xsIGNhY2hlIGxhdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3Jl
YXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3NDaGFpbi0+
c2xvdEJhc2VTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlOYW1lLnVp
ZCgpKSA9PSBvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGluc3Rl
YWQgZm9yIGZhc3RlciBhY2Nlc3Nlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlw
ZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IE1heWJlIHRoaXMgYGlmYCBzaG91bGQgYmUgaW5zaWRlIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5QmxhaC4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTUKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzbG90LmlzVW5zZXQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0
eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCBjb25kaXRp
b25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKSA9PSBvZmZzZXQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25k
aXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3Rv
bSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lLnVpZCgpLCBzbG90LmF0dHJpYnV0ZXMoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNGdW5jdGlvbiogZ2V0dGVyID0gbnVsbHB0
cjsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAg
ICAgICAgZ2V0dGVyID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIHNsb3QuZ2V0dGVy
U2V0dGVyKCktPmdldHRlcigpKTsKLQotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxET01BdHRy
aWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGU7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpICYmIHNsb3QuZG9tQXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAg
ZG9tQXR0cmlidXRlID0gc2xvdC5kb21BdHRyaWJ1dGUoKTsKLQotICAgICAgICAgICAgaWYgKGtp
bmQgPT0gR2V0QnlLaW5kOjpUcnlCeUlkKSB7Ci0gICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6
QWNjZXNzVHlwZSB0eXBlOwotICAgICAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkxvYWQ7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBBY2Nlc3NDYXNlOjpNaXNzOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nh
c2U6OkdldEdldHRlcjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHR5cGUsIHByb3Bl
cnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Q
cm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxvYWRUYXJnZXRGcm9tUHJveHkgJiYgZ2V0dGVy
ICYmIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoc3R1
YkluZm8sIGdldHRlciwgc3RydWN0dXJlKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFt
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGdldHRlciwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghc2xvdC5pc1Vuc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIg
Ym9vbCBpc1Byb3h5ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc2xvdC5pc0Nh
Y2hlYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6TG9hZCwgcHJvcGVydHlOYW1lLCBvZmZzZXQs
IHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCwgaXNQcm94
eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpIHx8IHNs
b3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVB
Y2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgc2xvdC5pc1Vuc2V0KCkgPyBBY2Nlc3ND
YXNlOjpNaXNzIDogQWNjZXNzQ2FzZTo6TG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZy
b21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hh
aW4pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNz
Q2FzZTo6R2V0dGVyOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmF0dHJpYnV0
ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vz
c0Nhc2U6OkN1c3RvbVZhbHVlR2V0dGVyOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChraW5k
ID09IEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzICYmIHR5cGUgPT0gQWNjZXNzQ2FzZTo6Q3VzdG9t
QWNjZXNzb3JHZXR0ZXIgJiYgZG9tQXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZt
LCBjb2RlQmxvY2ssIHR5cGUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNs
b3Qud2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBGdW5jdGlvblB0
cjxDdXN0b21BY2Nlc3NvclB0clRhZz4oc2xvdC5jdXN0b21HZXR0ZXIoKSkgOiBudWxscHRyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmIHNsb3Qu
c2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgZG9tQXR0cmlidXRlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vz
c0NoYWluKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUFkZEFjY2Vzc0Nhc2UsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0KLSAgICAgICAgcmVzdWx0
ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBFQ01BTW9kZTo6c3RyaWN0KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0K
LSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZv
T3JOdWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwg
c2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIHN3aXRjaCAoa2lu
ZCkgewotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgICAgICBjYXNl
IEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlRy
eUJ5SWQ6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAg
ICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgICAgICAgICAgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZh
bDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENs
ZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAg
cmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNh
Y2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKLXsKLSAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCi0gICAgaWYgKHRyeUNhY2hl
R2V0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24o
a2luZCkpOwotfQotCi0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5R2V0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCi0gICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVj
dC0+dm0oKSk7Ci0KLSAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwot
Ci0gICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKLSAgICAgICAgaWYg
KGJhc2UtPnR5cGUoKSA9PSBEaXJlY3RBcmd1bWVudHNUeXBlKQotICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREaXJlY3RBcmd1bWVudHNMb2FkOwotICAgICAgICBl
bHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU2NvcGVkQXJndW1lbnRzVHlwZSkKLSAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU2NvcGVkQXJndW1lbnRzTG9hZDsKLSAg
ICAgICAgZWxzZSBpZiAoYmFzZS0+dHlwZSgpID09IFN0cmluZ1R5cGUpCi0gICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgotICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6Ci0gICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDhMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWlu
dDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgotICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyTG9h
ZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBU
eXBlRmxvYXQzMjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJp
Z1VpbnQ2NEFycmF5IGluIElDCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoK
LSAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhp
bmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKLSAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhp
bmdTaGFwZSkgewotICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJMb2FkOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKLSAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZUxvYWQ7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNMb2FkOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFw
ZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5
U3RvcmFnZUxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2Nr
ZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIs
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJ
bmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xl
YXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgcmV0
dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hl
TGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBp
bmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICh0cnlDYWNoZUFy
cmF5R2V0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5m
bykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwotfQotCi1zdGF0aWMgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9u
KGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2lu
ZCBwdXRLaW5kKQotewotICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5SWQ6IHsKLSAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0
S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsKLSAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OwotICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgICAgIEFTU0VSVChzbG90
LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVm
aW5lUHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0Owot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlW
YWw6IHsKLSAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKLSAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7Ci0gICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2Vu
ZXJpYzsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dEdlbmVyaWM7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5l
OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkR2VuZXJpYzsKLSAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlWYWxTZXRQcml2YXRlRmllbGRHZW5lcmljOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0gICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0
YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1
dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlL
aW5kLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKLSAgICBj
YXNlIFB1dEJ5S2luZDo6QnlJZDoKLSAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAg
IGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RN
b2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJp
dmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkp
OwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKLSAg
ICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZh
bFNldFByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0
QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAg
IHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUo
Z2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVB1
dCgpICYmICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNoZWFibGVTZXR0
ZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgdHJ5IHRvIGRvIHNvbWV0aGluZyBzbWFydGVyIGhlcmUuLi4KLSAgICAg
ICAgaWYgKGlzQ29weU9uV3JpdGUob2xkU3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgLy8gV2UgY2FuJ3QgZW5kIHVw
IHN0b3JpbmcgdG8gYSBDb1cgb24gdGhlIHByb3RvdHlwZSBzaW5jZSBpdCBzaG91bGRuJ3Qgb3du
IHByb3BlcnRpZXMuCi0gICAgICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShzbG90LmJhc2UoKS0+
aW5kZXhpbmdNb2RlKCkpKTsKLQotICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlB
Y2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0KLSAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLQotICAg
ICAgICBib29sIGlzUHJveHkgPSBmYWxzZTsKLSAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkg
PT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKLSAgICAgICAgICAgIGJhc2VDZWxsID0ganND
YXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOwotICAgICAgICAgICAgYmFzZVZhbHVl
ID0gYmFzZUNlbGw7Ci0gICAgICAgICAgICBpc1Byb3h5ID0gdHJ1ZTsKLQotICAgICAgICAgICAg
Ly8gV2UgY3VycmVudGx5IG9ubHkgY2FjaGUgUmVwbGFjZSBhbmQgSlMvQ3VzdG9tIFNldHRlcnMg
b24gSlNQcm94eS4gV2UgZG9uJ3QKLSAgICAgICAgICAgIC8vIGNhY2hlIHRyYW5zaXRpb25zIGJl
Y2F1c2UgZ2xvYmFsIG9iamVjdHMgd2lsbCBuZXZlciBzaGFyZSB0aGUgc2FtZSBzdHJ1Y3R1cmUK
LSAgICAgICAgICAgIC8vIGluIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uLgotICAgICAgICAg
ICAgYm9vbCBpc0NhY2hlYWJsZVByb3h5ID0gKHNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiBzbG90
LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpCi0gICAgICAgICAg
ICAgICAgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpCi0gICAgICAgICAgICAgICAgfHwgc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpOwotICAgICAgICAgICAgaWYgKCFpc0NhY2hlYWJsZVByb3h5
KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGlzUHJveHkgJiYgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkU2V0IHx8IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKSkK
LSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIFJlZlB0cjxBY2Nl
c3NDYXNlPiBuZXdDYXNlOwotCi0gICAgICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUg
JiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkg
PT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBhc3NlcnQgaGVscHMgY2F0Y2ggYnVncyBpZiB3ZSBhY2NpZGVudGFsbHkgZm9yZ2V0
IHRvIGRpc2FibGUgY2FjaGluZwotICAgICAgICAgICAgICAgIC8vIHdoZW4gd2UgdHJhbnNpdGlv
biB0aGVuIHN0b3JlIHRvIGFuIGV4aXN0aW5nIHByb3BlcnR5LiBUaGlzIGlzIGNvbW1vbiBhbW9u
ZwotICAgICAgICAgICAgICAgIC8vIHBhdGhzIHRoYXQgcmVpZnkgbGF6eSBwcm9wZXJ0aWVzLiBJ
ZiB3ZSByZWlmeSBhIGxhenkgcHJvcGVydHkgYW5kIGZvcmdldAotICAgICAgICAgICAgICAgIC8v
IHRvIGRpc2FibGUgY2FjaGluZywgd2UgbWF5IGNvbWUgZG93biB0aGlzIHBhdGguIFRoZSBSZXBs
YWNlIElDIGRvZXMgbm90Ci0gICAgICAgICAgICAgICAgLy8ga25vdyBob3cgdG8gbW9kZWwgdGhl
c2UgdHlwZXMgb2Ygc3RydWN0dXJlIHRyYW5zaXRpb25zIChvciBhbnkgc3RydWN0dXJlCi0gICAg
ICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBmb3IgdGhhdCBtYXR0ZXIpLgotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSA9PSBv
bGRTdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVBy
b3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6
VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQo
KSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpCi0gICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBh
cHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2lu
ZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNl
KGxvY2tlciwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJs
b2NrLCBBY2Nlc3NDYXNlOjpSZXBsYWNlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCksIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwgaXNQcm94eSk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCghaXNQcm94eSk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6
TmV3UHJvcGVydHkpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2Jq
ZWN0KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIG9sZCBzdHJ1Y3R1cmUgaXMgZGljdGlvbmFyeSwgaXQgbWVh
bnMgdGhhdCB0aGlzIGlzIG9uZS1vbi1vbmUgYmV0d2VlbiBhbiBvYmplY3QgYW5kIGEgc3RydWN0
dXJlLgotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgTmV3UHJvcGVydHkgb3BlcmF0aW9u
LCBnZW5lcmF0aW5nIElDIGZvciB0aGlzIGRvZXMgbm90IG9mZmVyIGFueSBiZW5lZml0IGJlY2F1
c2UgdGhpcyB0cmFuc2l0aW9uIG5ldmVyIGhhcHBlbnMgYWdhaW4uCi0gICAgICAgICAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQ7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHko
b2xkU3RydWN0dXJlLCBpZGVudC5pbXBsKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6Tm9uZSksIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuZXdTdHJ1
Y3R1cmUgfHwgIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAg
ICAgIC8vIElmIEpTT2JqZWN0OjpwdXQgaXMgb3ZlcnJpZGRlbiBieSBVc2VyT2JqZWN0LCBVc2Vy
T2JqZWN0OjpwdXQgcGVyZm9ybXMgc2lkZS1lZmZlY3Qgb24gSlNPYmplY3Q6OnB1dCwgYW5kIGl0
IG5lZ2xlY3RzIHRvIG1hcmsgdGhlIFB1dFByb3BlcnR5U2xvdCBhcyBub24tY2FjaGFlYmxlLAot
ICAgICAgICAgICAgICAgIC8vIHRoZW4gYXJiaXRyYXJ5IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyBj
YW4gaGFwcGVuIGR1cmluZyB0aGUgcHV0IG9wZXJhdGlvbiwgYW5kIHRoaXMgZ2VuZXJhdGVzIHdy
b25nIHRyYW5zaXRpb24gaW5mb3JtYXRpb24gaGVyZSBhcyBpZiBvbGRTdHJ1Y3R1cmUgLT4gbmV3
U3RydWN0dXJlLgotICAgICAgICAgICAgICAgIC8vIEluIHJlYWxpdHksIHRoZSB0cmFuc2l0aW9u
IGlzIG9sZFN0cnVjdHVyZSAtPiBzb21ldGhpbmcgdW5rbm93biBzdHJ1Y3R1cmVzIC0+IGJhc2VW
YWx1ZSdzIHN0cnVjdHVyZS4KLSAgICAgICAgICAgICAgICAvLyBUbyBndWFyZCBhZ2FpbnN0IHRo
ZSBlbWJlZGRlcidzIHBvdGVudGlhbGx5IGluY29ycmVjdCBVc2VyT2JqZWN0OjpwdXQgaW1wbGVt
ZW50YXRpb24sIHdlIHNob3VsZCBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24gYW5kIGlmIGZvdW5k
LCBhbmQgZ2l2ZSB1cCBvbiBjYWNoaW5nIHRoZSBwdXQuCi0gICAgICAgICAgICAgICAgQVNTRVJU
KGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSA9PSBuZXdTdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgIT0gbmV3
U3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRT
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghbmV3U3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3Qo
KSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0Fj
Y2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAgICAgICAgICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKHB1
dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8g
Y2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNl
bGwsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0
cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxs
cHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChpZGVudC5pc1ByaXZhdGVOYW1lKCkpOwotICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Mo
dm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVUcmFuc2l0
aW9uKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5l
d1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwg
c3R1YkluZm8pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpIHsKLSAgICAgICAgICAg
IGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAgICAgUmVmUHRy
PFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLQotICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlmIHdlJ3JlIGEgc2VsZiBjdXN0b20s
IHNpbmNlIHdlIG11c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVzCi0gICAgICAgICAgICAgICAgLy8g
YmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNp
bmNlIHdlIGNhY2hlIHRoZSBjb25zdGFudAotICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uIHBv
aW50ZXIuCi0gICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZv
ckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAgICAg
ICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1
ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVBy
b3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJh
c2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWlu
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0
LCBvbGRTdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vz
c0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc2xvdC5p
c0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFj
Y2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LCBXVEZNb3Zl
KHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgaXNQcm94eSwgc2xvdC5jdXN0b21TZXR0ZXIoKS5yZXRh
Z2dlZDxDdXN0b21BY2Nlc3NvclB0clRhZz4oKSwgc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlID8g
c2xvdC5iYXNlKCkgOiBudWxscHRyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSk7Ci0gICAgICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgICAg
IFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0gICAg
ICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsK
LQotICAgICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmco
Z2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVk
RGljdGlvbmFyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3Rv
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQ
cm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5i
YXNlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFp
bikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBvZmZzZXQgPSBwcm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1
cmUodm0sIGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pKS0+Z2V0KHZtLCBpZGVudC5pbXBsKCksIGF0
dHJpYnV0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkgfHwgIShhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBl
QWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBvbGRTdHJ1
Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IShjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssIEFjY2Vzc0Nhc2U6OlNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgaXNQcm94
eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OlB1dEJ5QWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gc3R1
YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90
LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgp
LCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQu
Z2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRC
eVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLQotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5m
bywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBO
b3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRj
aFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRL
aW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
LSAgICAKLSAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEJ5
S2luZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9u
KHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kKQotewotICAgIGlmICghYmFzZVZhbHVl
LmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghaW5k
ZXguaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotCi0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OwotCi0gICAgewotICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
Ci0KLSAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgICAgICBp
ZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBl
KSkgewotICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5
U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6Ci0gICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDhTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVp
bnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKLSAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQz
MlN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWlu
dDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheVVpbnQzMlN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFy
cmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIGNhc2UgVHlwZUJp
Z0ludDY0OgotICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgotICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNl
LT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOwotICAgICAgICAgICAgc3dpdGNo
IChpbmRleGluZ1NoYXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKLSAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6
Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1
b3VzU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5
U3RvcmFnZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQXJyYXlTdG9yYWdlU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAg
cmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2
bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRp
ZmllcigpKSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwot
ICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2Rl
QmxvY2ssIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdp
dmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEFycmF5UHV0
QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQotewotICAgIGlmICh0cnlDYWNo
ZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHVi
SW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmlj
IDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBlY21hTW9k
ZSkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAg
ICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlKTsKLSAgICAg
ICAgaWYgKCFiYXNlVmFsdWUuaXNPYmplY3QoKSB8fCAhb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkgfHwgb2xkU3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGVEZWxldGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAg
IGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewot
ICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmhhc0JlZW5G
bGF0dGVuZWRCZWZvcmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICAgICAgICAgIGpzQ2FzdDxKU09iamVjdCo+KGJhc2VWYWx1ZSktPmZsYXR0ZW5EaWN0aW9u
YXJ5T2JqZWN0KHZtKTsKLSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nh
c2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHNsb3QuaXNEZWxldGVIaXQoKSkgewotICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKLSAgICAgICAg
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRy
YW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUudWlkKCksIG5ld09mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIW5ld1N0cnVj
dHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAg
ICAgaWYgKCFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBu
ZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgQVNTRVJUKG5ld09mZnNldCA9PSBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9
PSBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+dHJhbnNp
dGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbik7Ci0gICAgICAg
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChpc1ZhbGlkT2Zmc2V0KG5ld09mZnNldCkpOwotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OmNyZWF0ZURlbGV0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIG5ld09mZnNl
dCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICB9IGVsc2UgaWYgKHNsb3Qu
aXNOb25jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgaWYgKGVjbWFNb2RlLmlzU3RyaWN0
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
RGVsZXRlTm9uQ29uZmlndXJhYmxlLCBwcm9wZXJ0eU5hbWUsIGludmFsaWRPZmZzZXQsIG9sZFN0
cnVjdHVyZSwgeyB9LCBudWxscHRyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0
ZU1pc3MsIHByb3BlcnR5TmFtZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51
bGxwdHIpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2Vy
LCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgZWNtYU1vZGUsIHByb3BlcnR5TmFtZSwgV1RGTW92
ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6RGVsQnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsK
LSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNp
bmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29k
ZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/
IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaERlbGV0
ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBE
ZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQotewot
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVEZWxldGVCeShnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdCwgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgc3R1YkluZm8sIGtpbmQsIGVjbWFNb2RlKSA9PSBHaXZlVXBPbkNhY2hlKSB7Ci0g
ICAgICAgIExPR19JQygoSUNFdmVudDo6RGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwoZ2xvYmFsT2JqZWN0LT52bSgpKSwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwotICAgICAgICBpZiAoa2luZCA9PSBEZWxCeUtp
bmQ6OkJ5SWQpCi0gICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRHZW5lcmljKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25E
ZWxldGVCeVZhbEdlbmVyaWMpOwotICAgIH0KLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtp
bmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlJZDoKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGNhc2UgSW5CeUtpbmQ6
OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGNh
c2UgSW5CeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVH
ZW5lcmljSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7
Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlJ
ZEdlbmVyaWM7Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25JbkJ5VmFsR2VuZXJpYzsKLSAgICBjYXNlIEluQnlLaW5kOjpQcml2YXRlTmFtZToKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lR2VuZXJpYzsKLSAgICB9Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlSW5CeSgKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lLAotICAgIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3Vs
dDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVy
dHlOYW1lLnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1
cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2Vz
QXJlQ2FjaGVhYmxlKCkgfHwgKCF3YXNGb3VuZCAmJiAhYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZUZvckFic2VuY2UoKSkpCi0gICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGlmICh3YXNGb3VuZCkgewotICAg
ICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0
cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKHdhc0Zv
dW5kKSB7Ci0gICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JD
ZWxsKHZtLCBiYXNlKTsKLSAgICAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgICAgICAgICAgLy8gT3B0aW1p
emUgc2VsZiBhY2Nlc3MuCi0gICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0g
Q2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1
ZSgpCi0gICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKLSAgICAgICAg
ICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZklu
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xv
dC5zbG90QmFzZSgpID09IGJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5z
dGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwotICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKLSAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8uaW5pdEluQnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0gYmFzZSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVj
dCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgaWYg
KGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVz
LT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0No
YWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2Us
IHNsb3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBwcm90
b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSktPmdldCh2
bSwgcHJvcGVydHlOYW1lLnVpZCgpKSA9PSBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2Uo
KSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSB8fCBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKSA9PSBzbG90
LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2UsIG51bGxwdHIpOwotICAgICAgICAgICAgaWYg
KCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAg
ICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3Jl
YXRlKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm90
b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vz
c0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAg
ICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vz
c0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNz
LCBwcm9wZXJ0eU5hbWUsIHdhc0ZvdW5kID8gc2xvdC5jYWNoZWRPZmZzZXQoKSA6IGludmFsaWRP
ZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0No
YWluKSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIs
IGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIHByb3BlcnR5TmFt
ZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21l
Q29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhKdW1w
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2Up
KTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAg
ICAgICBpZiAoa2luZCA9PSBJbkJ5S2luZDo6QnlJZCkKLSAgICAgICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVk
KHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwot
fQotCi12b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewotICAgIFN1cGVy
U2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVJbkJ5KGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5m
bywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkgewotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Oklu
UmVwbGFjZVdpdGhHZW5lcmljLCBiYXNlT2JqZWN0LT5jbGFzc0luZm8oZ2xvYmFsT2JqZWN0LT52
bSgpKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwotICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRl
R2VuZXJpY0luQnlGdW5jdGlvbihraW5kKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIGJyYW5kSUQsIGJvb2wgd2FzRm91bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChm
b3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUo
dm0pOwotCi0gICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwo
dm0sIGJhc2UpOwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAg
ICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1
ZTsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJlZjxBY2Nl
c3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHdhc0Zv
dW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIGJyYW5kSUQsIGlu
dmFsaWRPZmZzZXQsIHN0cnVjdHVyZSwgeyB9LCB7IH0pOwotCi0gICAgICAgIHJlc3VsdCA9IHN0
dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNN
QU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBp
ZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBp
c0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29k
ZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5m
bywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBO
b3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRj
aEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJh
bmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0
cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgYnJhbmRJRCwgd2FzRm91bmQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkhhc1By
aXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVDaGVja1ByaXZhdGVCcmFuZCgKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
YnJhbmRJRCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElE
LnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xv
YmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKLQotICAgICAgICBJ
bmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKLSAgICAg
ICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgIHJldHVybiBhY3Rp
b247Ci0KLSAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExPR19J
QygoSUNFdmVudDo6Q2hlY2tQcml2YXRlQnJhbmRBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICBSZWY8QWNjZXNz
Q2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZUNoZWNrUHJpdmF0ZUJyYW5kKHZtLCBj
b2RlQmxvY2ssIGJyYW5kSUQsIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1Yklu
Zm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9k
ZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChy
ZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpDaGVja1ByaXZhdGVCcmFuZFJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQo
dm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNo
b3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQot
dm9pZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJ
ZGVudGlmaWVyIGJyYW5kSUQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBT
dXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0KLSAgICBpZiAodHJ5
Q2FjaGVDaGVja1ByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRHZW5lcmljKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlU2V0UHJp
dmF0ZUJyYW5kKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXIgYnJhbmRJRCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCBicmFuZElELnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9y
Y2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7Ci0KLSAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwotCi0gICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlv
bkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hl
KQotICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpzZXRCcmFuZFRyYW5zaXRpb25Gcm9tRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBicmFuZElELnVpZCgpKTsKLSAg
ICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOwotICAgICAgICBpZiAobmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5w
cmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVy
ZS0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6U2V0QnJhbmQpOwotICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICAgICAgCi0gICAgICAgIGJv
b2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlNldFBy
aXZhdGVCcmFuZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50
LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlU2V0UHJpdmF0ZUJyYW5kKHZtLCBjb2RlQmxvY2ssIGJyYW5kSUQs
IG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5m
by5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2Rl
OjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJl
c3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OlNldFByaXZhdGVCcmFuZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJT
dHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNh
Y2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVTZXRQcml2YXRlQnJh
bmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgIGJy
YW5kSUQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZEdlbmVy
aWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbnN0YW5jZU9mKAot
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIHZhbHVlVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywKLSAgICBib29sIHdhc0ZvdW5kKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVCh2YWx1ZVZhbHVlLmlzQ2VsbCgpKTsgLy8gc2hvdWxkQ29uc2lk
ZXJDYWNoaW5nIHJlamVjdHMgbm9uLWNlbGxzLgotICAgIAotICAgIGlmIChmb3JjZUlDRmFpbHVy
ZShnbG9iYWxPYmplY3QpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAg
ICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2ssIHZtKTsKLSAgICAgICAgCi0gICAgICAgIEpTQ2VsbCogdmFsdWUgPSB2YWx1ZVZhbHVl
LmFzQ2VsbCgpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLT5zdHJ1Y3R1
cmUodm0pOwotICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLSAgICAgICAgSlNP
YmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJvdG90eXBl
VmFsdWUpOwotICAgICAgICBpZiAocHJvdG90eXBlKSB7Ci0gICAgICAgICAgICBpZiAoIWpzRHlu
YW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIHZt
LCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZNaXNzLCBzdHJ1Y3R1cmUsIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZSk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlUXVlcmllc0FyZUNh
Y2hlYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgdG8gZG8g
cG9seSBwcm90by4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg1NjYzCi0gICAgICAgICAgICAgICAgcHJlcGFyZUNoYWluRm9yQ2Fj
aGluZyhnbG9iYWxPYmplY3QsIHZhbHVlLCB3YXNGb3VuZCA/IHByb3RvdHlwZSA6IG51bGxwdHIp
OwotICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zvckluc3RhbmNlT2YoCi0gICAgICAgICAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm90b3R5cGUsIHdhc0Zv
dW5kKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5jZU9mQWNjZXNzQ2FzZTo6Y3JlYXRl
KAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkhpdCA6IEFjY2Vzc0Nh
c2U6Okluc3RhbmNlT2ZNaXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIHByb3RvdHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5ld0Nhc2UpCi0gICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6
Okluc3RhbmNlT2ZHZW5lcmljLCBDYWNoZWFibGVJZGVudGlmaWVyKCkpOwotICAgICAgICAKLSAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcigpKSk7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQg
PSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgV1RGTW92ZShuZXdDYXNlKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6SW5zdGFuY2VPZlJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgSWRlbnRpZmllcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGZpcmVXYXRjaHBvaW50c0FuZENs
ZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIAot
ICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0
cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIHZhbHVl
VmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBib29sIHdhc0ZvdW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKLSAgICBpZiAodHJ5Q2FjaGVJbnN0YW5jZU9mKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCB2YWx1ZVZhbHVlLCBwcm90b3R5cGVWYWx1ZSwgc3R1YkluZm8sIHdhc0Zv
dW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKLX0KLQotc3RhdGlj
IHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewotICAg
IGNhbGxMaW5rSW5mby5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50
ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlu
a1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQotewotICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8s
IHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4o
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8pCi17Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7
Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAg
ICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUo
dm0sIHZpcnR1YWxUaHVuaykpOwotfQotCi1zdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVy
KEpTQ2VsbCogY2FsbGVlKQotewotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAvLyBFYWNo
IFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJBc3Nl
bWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVyLgot
ICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQot
fQotCi12b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCi0gICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLAotICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7
Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
OwotICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4g
Y2FsbGluZwotICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBh
IGNlbGwuCi0gICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7Ci0KLSAg
ICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsK
LQotICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2Rl
QmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJh
bWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNh
bGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKLSAgICBBU1NFUlQob3duZXIpOwot
Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZv
LnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICBj
YWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOwotCi0gICAg
aWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQotICAgICAgICBk
YXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVD
b2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwotCi0gICAgaWYg
KGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdD
YWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKLQotICAgIGlmIChjYWxsTGlua0luZm8u
c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFsbG93
U3R1YnMoKSkgewotICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBsaW5r
UG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCi12b2lkIGxpbmtE
aXJlY3RDYWxsKAotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0lu
Zm8uc3R1YigpKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7
Ci0gICAgCi0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExp
bmtJbmZvLnNldENvZGVCbG9jayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25D
b2RlQmxvY2sqPihjYWxsZWVDb2RlQmxvY2spKTsKLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCi0gICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBp
biAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3Jp
Z2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9p
bnQgYXQgIiwgY29kZVB0ciwgIlxuIik7Ci0KLSAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2Fs
bFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7Ci0KLSAg
ICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNv
bWluZ0NhbGwoY2FsbEZyYW1lLCAmY2FsbExpbmtJbmZvKTsKLX0KLQotdm9pZCBsaW5rU2xvd0Zv
cihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0g
ICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpOwotICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAgICAK
LSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgcmV2
ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCi17Ci0gICAgaWYgKGNhbGxM
aW5rSW5mby5pc0RpcmVjdCgpKSB7Ci0gICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9j
aygpOwotICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQotICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAg
ICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7Ci0KLSAg
ICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uc3R1YigpKQotICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbExpbmtJ
bmZvLmNsZWFyQ2FsbGVlKCk7IC8vIFRoaXMgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBjYWNoZSBi
b3RoIGZvciBkYXRhIGFuZCBjb2RlLWJhc2VkIGNhY2hlcy4KLSAgICB9Ci0gICAgY2FsbExpbmtJ
bmZvLmNsZWFyU2VlbigpOwotICAgIGNhbGxMaW5rSW5mby5jbGVhclN0dWIoKTsKLSAgICBjYWxs
TGlua0luZm8uY2xlYXJTbG93U3R1YigpOwotICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3Qo
KSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwotfQotCi12b2lkIHVubGlua0NhbGwo
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJh
d1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwotICAgIAotICAgIHJldmVydENhbGwodm0sIGNhbGxM
aW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxK
SVRTdHViUm91dGluZVB0clRhZz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9y
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KQotewotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1l
KCk7Ci0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJs
b2NrKCk7Ci0KLSAgICBkYXRhTG9nTG5JZihzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVy
Q29kZUJsb2NrKSwKLSAgICAgICAgIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2Rl
T3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwotCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1
bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgcmV2ZXJ0Q2FsbCh2
bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93
U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci0g
ICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeVZpcnR1YWwoKTsKLX0KLQotbmFtZXNwYWNlIHsK
LXN0cnVjdCBDYWxsVG9Db2RlUHRyIHsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLX07Ci19IC8v
IGFubm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8sIENhbGxWYXJpYW50IG5ld1ZhcmlhbnQpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLQotICAgIC8vIER1cmluZyBleGVjdXRpb24gb2YgbGlua1BvbHltb3JwaGlj
Q2FsbCwgd2Ugc3Ryb25nbHkgYXNzdW1lIHRoYXQgd2UgbmV2ZXIgZG8gR0MuCi0gICAgLy8gR0Mg
amV0dGlzb25zIENvZGVCbG9ja3MsIGNoYW5nZXMgQ2FsbExpbmtJbmZvIGV0Yy4gYW5kIGJyZWFr
cyBhc3N1bXB0aW9uIGRvbmUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGNhbGwuCi0gICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlckdDRm9yQVdoaWxlKHZtKTsKLSAgICAKLSAgICBpZiAoIW5ld1Zhcmlh
bnQpIHsKLSAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZv
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBo
YXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwotICAgIC8vIHRoaXMgZnJvbSBX
YXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCi0gICAgQVNTRVJUKGNhbGxlckZy
YW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7Ci0KLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9j
ayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBp
c1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSk7Ci0KLSAg
ICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2Nr
LgotICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihj
YWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFT
U0VSVChvd25lcik7Ci0KLSAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsKLSAgICBpZiAoUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1YigpKQotICAgICAg
ICBsaXN0ID0gc3R1Yi0+dmFyaWFudHMoKTsKLSAgICBlbHNlIGlmIChKU09iamVjdCogb2xkQ2Fs
bGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZSgpKQotICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRM
aXN0IHsgQ2FsbFZhcmlhbnQob2xkQ2FsbGVlKSB9OwotICAgIAotICAgIGxpc3QgPSB2YXJpYW50
TGlzdFdpdGhWYXJpYW50KGxpc3QsIG5ld1ZhcmlhbnQpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJl
IGFueSBjbG9zdXJlIGNhbGxzIHRoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgYWxsIG9mIHRo
ZW0gYXMgY2xvc3VyZSBjYWxscy4KLSAgICAvLyBUaGlzIG1ha2VzIHN3aXRjaGluZyBvbiBjYWxs
ZWUgY2hlYXBlci4gSXQgYWxzbyBwcm9kdWNlcyBwcm9maWxpbmcgdGhhdCdzIGVhc2llciBvbiB0
aGUgREZHOwotICAgIC8vIHRoZSBERkcgZG9lc24ndCByZWFsbHkgd2FudCB0byBkZWFsIHdpdGgg
YSBjb21iaW5hdGlvbiBvZiBjbG9zdXJlIGFuZCBub24tY2xvc3VyZSBjYWxsZWVzLgotICAgIGJv
b2wgaXNDbG9zdXJlQ2FsbCA9IGZhbHNlOwotICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6
IGxpc3QpICB7Ci0gICAgICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgewotICAgICAg
ICAgICAgbGlzdCA9IGRlc3BlY2lmaWVkVmFyaWFudExpc3QobGlzdCk7Ci0gICAgICAgICAgICBp
c0Nsb3N1cmVDYWxsID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIGlmIChpc0Nsb3N1cmVDYWxsKQotICAgICAgICBjYWxsTGlua0luZm8uc2V0
SGFzU2VlbkNsb3N1cmUoKTsKLSAgICAKLSAgICBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4g
Y2FsbENhc2VzOwotICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlVmFsdWVzOwotICAgIAotICAgIC8v
IEZpZ3VyZSBvdXQgd2hhdCBvdXIgY2FzZXMgYXJlLgotICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFy
aWFudCA6IGxpc3QpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwot
ICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkgJiYgIXZhcmlhbnQuZXhlY3V0YWJsZSgp
LT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrID0ganND
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7
Ci0gICAgICAgICAgICAvLyBJZiB3ZSBjYW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBlaXRoZXIgYmVj
YXVzZSB3ZSBkb24ndCBoYXZlIGEgQ29kZUJsb2NrIG9yIGJlY2F1c2UgYXJpdHkgbWlzbWF0Y2gs
Ci0gICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0
aGluZyB0byBiZSBhIHZpcnR1YWwgY2FsbC4KLSAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8
IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5pc1ZhcmFy
Z3MoKSkgewotICAgICAgICAgICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNh
bGxMaW5rSW5mbyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaW50NjRfdCBuZXdDYXNlVmFsdWUgPSAwOwotICAgICAgICBpZiAo
aXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0
PGludHB0cl90Pih2YXJpYW50LmV4ZWN1dGFibGUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
V2UgY291bGQgYWRkIGEgZmFzdCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3Vy
ZSBjYWxsLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3OTMxMQotICAgICAgICAgICAgaWYgKCFuZXdDYXNlVmFsdWUpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
ZnVuY3Rpb24gPSB2YXJpYW50LmZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZVZh
bHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90PihmdW5jdGlvbik7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2
YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoQVNT
RVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgIGlmIChjYXNlVmFsdWVzLmNvbnRhaW5zKG5ld0Nh
c2VWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJFUlJPUjogQXR0ZW1wdCB0byBh
ZGQgZHVwbGljYXRlIGNhc2UgdmFsdWUuXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJF
eGlzdGluZyBjYXNlIHZhbHVlczogIik7Ci0gICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNv
bW1hOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiBjYXNlVmFsdWVzKQotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFk
ZDogIiwgbmV3Q2FzZVZhbHVlLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJWYXJp
YW50IGxpc3Q6ICIsIGxpc3REdW1wKGNhbGxDYXNlcyksICJcbiIpOwotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBjYWxsQ2FzZXMuYXBwZW5kKFBvbHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwg
Y29kZUJsb2NrKSk7Ci0gICAgICAgIGNhc2VWYWx1ZXMuYXBwZW5kKG5ld0Nhc2VWYWx1ZSk7Ci0g
ICAgfQotICAgIEFTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhc2VWYWx1ZXMuc2l6ZSgpKTsK
LQotICAgIC8vIElmIHdlIGFyZSBvdmVyIHRoZSBsaW1pdCwganVzdCB1c2UgYSBub3JtYWwgdmly
dHVhbCBjYWxsLgotICAgIHVuc2lnbmVkIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6
ZTsKLSAgICBpZiAoaXNXZWJBc3NlbWJseSkKLSAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFy
aWFudExpc3RTaXplID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXpl
Rm9yV2ViQXNzZW1ibHlUb0pTKCk7Ci0gICAgZWxzZSBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQotICAgICAgICBtYXhQb2x5bW9ycGhpY0Nh
bGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlz
dFNpemVGb3JUb3BUaWVyKCk7Ci0gICAgZWxzZQotICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxW
YXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNp
emUoKTsKLQotICAgIC8vIFdlIHVzZSBsaXN0LnNpemUoKSBpbnN0ZWFkIG9mIGNhbGxDYXNlcy5z
aXplKCkgYmVjYXVzZSB3ZSByZXNwZWN0IENhbGxWYXJpYW50IHNpemUgZm9yIG5vdy4KLSAgICBp
ZiAobGlzdC5zaXplKCkgPiBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpIHsKLSAg
ICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxscyhjYWxs
Q2FzZXMuc2l6ZSgpKTsKLSAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4gZmFzdENvdW50czsKLQot
ICAgIGlmICghaXNXZWJBc3NlbWJseSAmJiBjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSAhPSBK
SVRDb2RlOjp0b3BUaWVySklUKCkpIHsKLSAgICAgICAgZmFzdENvdW50cyA9IG1ha2VVbmlxdWVB
cnJheTx1aW50MzJfdD4oY2FsbENhc2VzLnNpemUoKSk7Ci0gICAgICAgIG1lbXNldChmYXN0Q291
bnRzLmdldCgpLCAwLCBjYWxsQ2FzZXMuc2l6ZSgpICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0gICAg
fQotICAgIAotICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsTGlua0luZm8uY2FsbGVlR1BSKCk7
Ci0KLSAgICBib29sIGlzRGF0YUlDID0gY2FsbExpbmtJbmZvLmlzRGF0YUlDKCk7Ci0gICAgQ0Nh
bGxIZWxwZXJzIHN0dWJKaXQoY2FsbGVyQ29kZUJsb2NrKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsRnJhbWVTaHVmZmxlcj4gZnJhbWVTaHVmZmxlcjsKLSAgICBpZiAoY2FsbExpbmtJbmZv
LmZyYW1lU2h1ZmZsZURhdGEoKSkgewotICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLmlzVGFp
bENhbGwoKSk7Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXIgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNo
dWZmbGVyPihzdHViSml0LCAqY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSk7Ci0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNr
ZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbCwgYW5kIHdlIGNhbgotICAgICAgICAvLyB1c2Ug
dGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXIgdGhpcyBidXlzIHVzLgotICAgICAgICBmcmFtZVNodWZm
bGVyLT5hc3N1bWVDYWxsZWVJc0NlbGwoKTsKLSNlbmRpZgotICAgICAgICBmcmFtZVNodWZmbGVy
LT5sb2NrR1BSKGNhbGxlZUdQUik7Ci0gICAgfQotCi0gICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1
ZUdQUjsKLSAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgewotICAgICAgICBpZiAoZnJhbWVTaHVmZmxl
cikKLSAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVp
cmVHUFIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0g
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IGNhbGxlZUdQUjsKLQotICAgIEdQUlJlZyBm
YXN0Q291bnRzQmFzZUdQUjsKLSAgICBpZiAoZnJhbWVTaHVmZmxlcikKLSAgICAgICAgZmFzdENv
dW50c0Jhc2VHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGZhc3RDb3VudHNCYXNlR1BSID0KLSAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6
cmVnVDMpOwotICAgIH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGZhc3RDb3VudHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7Ci0KLSAgICBpZiAoIWZy
YW1lU2h1ZmZsZXIgJiYgY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAgICAvLyBX
ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCBjYWxsZWVHUFIgaXMgbm90IGEgY2FsbGVlIHNhdmUgcmVn
aXN0ZXIgaW4gdGhlIHNsb3cgcGF0aC4KLSAgICAgICAgQVNTRVJUKCFjYWxsZXJDb2RlQmxvY2st
PmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+ZmluZChjYWxsZWVHUFIpKTsKLSAgICAgICAgc3R1Ykpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgfQotCi0gICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93UGF0aDsKLSAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAvLyBW
ZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGlu
IHNjcmF0Y2hHUFIuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by5pc1RhaWxDYWxsKCkpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFu
Y2hJZk5vdENlbGwoY2FsbGVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxs
KGNhbGxlZUdQUikpOwotI2Vsc2UKLSAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNo
ZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSNlbmRpZgotICAgICAgICAvLyBGSVhN
RTogV2UgY291bGQgYWRkIGEgZmFzdCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xv
c3VyZSBjYWxsLgotICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdEZ1
bmN0aW9uKGNhbGxlZUdQUikpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCBjb21wYXJpc29uVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGhhc0V4ZWN1dGFi
bGUgPSBzdHViSml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBjb21wYXJpc29u
VmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSk7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29t
cGFyaXNvblZhbHVlR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAt
IEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgY29tcGFyaXNvblZhbHVlR1BSKTsKLSAgICAgICAg
aGFzRXhlY3V0YWJsZS5saW5rKCZzdHViSml0KTsKLSAgICB9Ci0KLSAgICBCaW5hcnlTd2l0Y2gg
YmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNo
OjpJbnRQdHIpOwotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICB3aGlsZSAo
YmluYXJ5U3dpdGNoLmFkdmFuY2Uoc3R1YkppdCkpIHsKLSAgICAgICAgc2l6ZV90IGNhc2VJbmRl
eCA9IGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIENhbGxWYXJp
YW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNbY2FzZUluZGV4XS52YXJpYW50KCk7Ci0gICAgICAgIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAg
ICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGNhbGxMaW5rSW5mby5z
cGVjaWFsaXphdGlvbktpbmQoKSwgdmFyaWFudC5mdW5jdGlvbigpKTsKLSAgICAgICAgICAgIGlm
ICghY29kZVB0cikKLSAgICAgICAgICAgICAgICBjb2RlUHRyID0gdmFyaWFudC5leGVjdXRhYmxl
KCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tO
b3RSZXF1aXJlZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5pbnRlcm5hbEZ1bmN0aW9uKCkpOwotICAgICAgICAgICAgY29kZVB0ciA9IHZtLmdldENUSUlu
dGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVGb3JDYWxsKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKGZhc3RDb3VudHMpIHsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRk
MzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCi0gICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNl
SW5kZXggKiBzaXplb2YodWludDMyX3QpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG5l
ZWRzRG9uZUp1bXAgPSBmYWxzZTsKLSAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKLSAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKHN0dWJKaXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90
KCkpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5j
YWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjYWxsTGlu
a0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgICAgICBzdHViSml0LnByZXBhcmVGb3JUYWls
Q2FsbFNsb3coKTsKLSAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQu
bmVhclRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNEYXRh
SUMpCi0gICAgICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFy
VGFpbENhbGwoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGNhbGxzW2Nh
c2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICAgICAgICAgICAgICBuZWVk
c0RvbmVKdW1wID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYWxs
c1tjYXNlSW5kZXhdLmNvZGVQdHIgPSBjb2RlUHRyOwotICAgICAgICBpZiAobmVlZHNEb25lSnVt
cCkKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICB9Ci0gICAg
Ci0gICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7Ci0gICAgYmluYXJ5U3dpdGNoLmZhbGxUaHJv
dWdoKCkubGluaygmc3R1YkppdCk7Ci0KLSAgICBpZiAoZnJhbWVTaHVmZmxlcikgewotICAgICAg
ICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7Ci0gICAgICAgIGZyYW1lU2h1
ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKLSAgICAgICAgZnJhbWVTaHVm
Zmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJl
Z3MoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKSk7Ci0jZWxzZQotICAgICAgICBmcmFt
ZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdU
MCkpOwotI2VuZGlmCi0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnByZXBhcmVGb3JTbG93UGF0aCgp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86
OnJlZ1QwKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1Qx
KTsKLSNlbmRpZgotICAgIH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBzdHViSml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdU
Mik7Ci0gICAgaWYgKGlzRGF0YUlDICYmICFjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0g
ICAgICAgIC8vIFdlIHdlcmUgY2FsbGVkIGZyb20gdGhlIGZhc3QgcGF0aCwgZ2V0IHJpZCBvZiBh
bnkgcmVtbmFudHMgb2YgdGhhdAotICAgICAgICAvLyB3aGljaCBtYXkgZXhpc3QuIFRoaXMgcmVh
bGx5IG9ubHkgbWF0dGVycyBmb3IgeDg2LCB3aGljaCBhZGp1c3RzCi0gICAgICAgIC8vIFNQIGZv
ciBjYWxscy4KLSAgICAgICAgc3R1YkppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
R1BSSW5mbzo6cmVnVDQpOwotICAgIH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFi
bGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7Ci0gICAgCi0gICAgc3R1YkppdC5yZXN0b3Jl
UmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7Ci0gICAgQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5s
aW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpIHsKLSAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFt
ZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxF
QVNFX0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7Ci0gICAgZm9yIChD
YWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgewotI2lmIENQVShBUk1fVEhVTUIy
KQotICAgICAgICAvLyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcgZW5zdXJlcyBwcm9wZXIgbGlu
a2luZyBvbiBBUk0gVGh1bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBqdW1wcyB0byBhbiBhZGRyZXNz
Ci0gICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9ybWFs
IGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCi0gICAg
ICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0NhbGxI
ZWxwZXJzOjpDYWxsOjpUYWlsKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWlsQ2FsbCA/
IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQdHIuY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxU
b0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0
KSkpOwotI2Vsc2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGws
IEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOwotI2Vu
ZGlmCi0gICAgfQotCi0gICAgaWYgKCFkb25lLmVtcHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElT
dHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgCi0g
ICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUoCi0gICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgY2FsbGVyQ29k
ZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAi
UG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVz
IiwKLSAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0
cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24o
KS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVt
cChjYWxsQ2FzZXMpKS5kYXRhKCkpLAotICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCi0gICAgICAgIFdURk1vdmUoZmFz
dENvdW50cykpKTsKLQotICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFi
bGUgb24gNjQtYml0cywgYnV0IHN0aWxsCi0gICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2lu
Y2UgYSBub24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKLSAgICAvLyB0cmlnZ2VyIHRoZSBzbG93
IHBhdGgKLSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLQotICAgIC8vIElmIHRo
ZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBh
cyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCi0gICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdl
ciBvbiBzdGFjay4KLSAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5l
KSk7Ci0gICAgCi0gICAgLy8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMgYSBjYWxs
IGNhY2hlIGFwYXJ0IGZyb20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwKLSAgICAv
LyBzdHViLgotICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKLSAgICAgICAgY2FsbExp
bmtJbmZvLnJlbW92ZSgpOwotfQotCi12b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNl
IEdldEJ5S2luZDo6QnlJZDoKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAg
IGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0
OgotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICBjYXNlIEdldEJ5S2lu
ZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCi17Ci0gICAgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogewotICAgICAgICB1c2luZyBGdW5j
dGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
KTsKLSAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJl
dF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJ
bmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNl
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVm
aW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB1dEJ5S2lu
ZDo6QnlWYWw6IHsKLSAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUND
YWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAg
ICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdl
bmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAg
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVs
ZEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmlu
ZVByaXZhdGVGaWVsZE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICBlbHNl
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZp
ZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0
UHJpdmF0ZUZpZWxkT3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIHN3
aXRjaCAoa2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgotICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIHJlc2V0RGVs
QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVs
QnlLaW5kIGtpbmQpCi17Ci0gICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQotICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZSk7Ci0gICAgZWxzZQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwotICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKLXsKLSAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0luQnlGdW5jdGlvbihraW5kKSk7Ci0gICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5
SWQpCi0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7Ci0gICAgZWxzZQotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
Ci19Ci0KLXZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAg
ICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RV
c2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldENo
ZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKLXsKLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0gICAgaWYgKCFjYWxsZWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
IChraW5kICE9IENvZGVGb3JDYWxsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAo
YXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4o
dm0sIGNhbGxlZSkpCi0gICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9p
bnQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBVTlVTRURfUEFSQU0oa2lu
ZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNlMzc3ZWUxMGEyZWY4
NGEyM2Q5ZWMyZGQ0OGNmNjhkNzljN2RlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysg
L2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShKSVQpCi0K
LSNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiQ2FsbFZhcmlhbnQu
aCIKLSNpbmNsdWRlICJQdXRLaW5kLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1lbnVtIGNsYXNz
IEdldEJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBCeVZhbCwKLSAgICBUcnlCeUlkLAotICAgIEJ5
SWRXaXRoVGhpcywKLSAgICBCeUlkRGlyZWN0LAotICAgIFByaXZhdGVOYW1lLAotICAgIFByaXZh
dGVOYW1lQnlJZCwKLX07Ci0KLWVudW0gY2xhc3MgUHV0QnlLaW5kIHsKLSAgICBCeUlkLAotICAg
IEJ5VmFsLAotfTsKLQotZW51bSBjbGFzcyBEZWxCeUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlW
YWwKLX07Ci0KLWVudW0gY2xhc3MgSW5CeUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlWYWwsCi0g
ICAgUHJpdmF0ZU5hbWUKLX07Ci0KLXZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxP
YmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Ci12b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIEpTVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0
cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwotdm9pZCByZXBhdGNoUHV0
QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFB1dEJ5S2luZCwgUHV0S2luZCk7Ci12b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9i
amVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVy
ZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBF
Q01BTW9kZSk7Ci12b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKLXZvaWQgcmVwYXRjaEhh
c1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12
b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayos
IEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZv
aWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
T2JqZWN0KiwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLXZvaWQgcmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBi
b29sIHdhc0ZvdW5kKTsKLXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSos
IENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Ci12b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPik7Ci12b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYp
Owotdm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7Ci12b2lkIGxpbmtQb2x5bW9y
cGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxs
VmFyaWFudCk7Ci12b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBHZXRCeUtpbmQpOwotdm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHV0QnlLaW5kKTsKLXZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIERlbEJ5S2luZCk7Ci12b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKLXZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKENvZGVCbG9jayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqIGNhbGxlZSk7Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDI5NzE0N2UxYzRjMDhkY2NkNWY3Yjc4NjQxMWQ4
NTViMmExZGU0N2MuLmRiZDVhYmQzNzg4ZDcxYjgwMzA1YmI4NTFmYmNjMjcxM2U4N2IwMGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTM0
NCw0OCArMzQ0LDI1IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsKFZNJiB2bSkKICAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6UmVndWxhciwgQ29kZUZvckNhbGwpOwogfQogCi1zdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JS
ZWd1bGFyQ29uc3RydWN0KFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZt
LCBDYWxsTW9kZTo6UmVndWxhciwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDYWxs
KFZNJiB2bSkKIHsKICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFp
bCwgQ29kZUZvckNhbGwpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KFZNJiB2bSkKLXsKLSAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNvbnN0cnVj
dCk7Ci19Ci0KLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZp
cnR1YWxUaHVua0ZvckNvbnN0cnVjdENhbGwoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFs
VGh1bmtGb3Iodm0sIENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDYWxsKTsKLX0KLQogc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9y
Q29uc3RydWN0Q29uc3RydWN0KFZNJiB2bSkKIHsKICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9y
KHZtLCBDYWxsTW9kZTo6Q29uc3RydWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiB2bSwgQ2FsbE1vZGUgY2Fs
bE1vZGUpCiB7Ci0gICAgYXV0byBtb2RlID0gY2FsbExpbmtJbmZvLmNhbGxNb2RlKCk7Ci0gICAg
YXV0byBraW5kID0gY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpOwogICAgIGF1dG8g
Z2VuZXJhdG9yID0gWyZdICgpIC0+IFRodW5rR2VuZXJhdG9yIHsKLSAgICAgICAgc3dpdGNoICht
b2RlKSB7CisgICAgICAgIHN3aXRjaCAoY2FsbE1vZGUpIHsKICAgICAgICAgY2FzZSBDYWxsTW9k
ZTo6UmVndWxhcjoKLSAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAg
ICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKLSAgICAgICAgICAg
IHJldHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0OworICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsOwogICAgICAgICBjYXNlIENhbGxNb2RlOjpU
YWlsOgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclRhaWxDYWxsOwotICAgICAgICAgICAgcmV0dXJuIHZp
cnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3Q7CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRo
dW5rRm9yVGFpbENhbGw7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OkNvbnN0cnVjdDoKLSAgICAg
ICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsOwogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxU
aHVua0ZvckNvbnN0cnVjdENvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgKaW5kZXggMGY5ZjZlMmQzNmY2ZGQyM2UxODcyNmFjZTYzMTRhMzBhMjAxZGJjZS4u
YWI3Y2Y2NmM0MjE1MWVlMDE5NThjMWFiMjJmMjlmY2Q4ZGQ3MDE0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC00OSw3ICs0OSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKFZNCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9y
KFZNJiwgQ2FsbExpbmtJbmZvJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYsIENhbGxNb2RlKTsKIAogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNJik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRv
cihWTSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCBl
OGRhZmY3ZDg4YjMwYzZiZjg0NzIzMTRiZTJmMWM3OTYwZjI0N2Y1Li5kMGIzNzM4OTIxYTRmMDAx
NTEyZTdkZWUzYTg0NDNjNTE5M2JkMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcApAQCAtNTgsNiArNTgsNyBAQCBleHRlcm4gIkMiIHZvaWQgd2FzbV9lbnRy
eSh2b2lkKiwgdm9pZCosIHZvaWQqKTsKIGV4dGVybiAiQyIgdm9pZCB2bUVudHJ5VG9KYXZhU2Ny
aXB0VHJhbXBvbGluZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbEpTRW50cnlUcmFt
cG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJh
bXBvbGluZSh2b2lkKTsKK2V4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50
cnlUcmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIGV4Y2VwdGlvbkhhbmRsZXJUcmFt
cG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHJldHVybkZyb21MTEludFRyYW1wb2xpbmUo
dm9pZCk7CiAjZW5kaWYKQEAgLTE1Myw3ICsxNTQsNyBAQCB2b2lkIGluaXRpYWxpemUoKQogICAg
IHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6
OnVzZUpJVCgpKQotICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxH
YXRlKEpTRW50cnlQdHJUYWcpKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0
ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhy
ZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFn
PigmdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZSkpKSk7CiAgICAgICAgIGdfanNjQ29uZmlnLmxs
aW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsSlNFbnRyeVB0
clRhZyldPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAtMTYx
LDExICsxNjIsMTkgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0
clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAg
ICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5U2xvd1BhdGhQ
dHJUYWcpKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0
ZShKU0VudHJ5UHRyVGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGVS
ZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8
dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxK
U0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcubGxpbnQu
Z2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5U2xvd1Bh
dGhQdHJUYWcpXSA9IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAg
ICAgfQorICAgIHsKKyAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRl
VGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIGZhbHNlKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvZGVSZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhy
ZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFn
PigmdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZSkpKSk7CisgICAgICAgIGdf
anNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxD
YWxsV2l0aG91dFVudGFnSlNFbnRyeVB0clRhZyldPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNv
ZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDBjNDg1MzRhODI5OWYzNjA2
MmVkNGI0MTE4NjI3YzU3ODQ2MzdhNzguLjY2YjhkZThmNWI5MmY2MzUzZDVlYzViMGQwY2RmOTE0
YzAyYzJlMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmgiCiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
UmVnRXhwT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIKICNpbmNsdWRlICJT
aGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk1J
bmxpbmVzLmgiCkBAIC01ODIsNiArNTgzLDE3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHN0YWNr
X2NoZWNrKQogICAgIExMSU5UX1JFVFVSTl9UV08ocGMsIGNhbGxGcmFtZSk7CiB9CiAKK2V4dGVy
biAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X2xpbmtfY2FsbChDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lLCBKU0NlbGwqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IEpTQ2VsbCopCit7CisgICAgcmV0dXJuIGxpbmtGb3IoY2FsbGVlRnJhbWUsIGpzQ2FzdDxKU0ds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIGNhbGxMaW5rSW5mbyk7Cit9CisKK2V4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3ZpcnR1YWxfY2FsbChDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lLCBKU0NlbGwqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IEpTQ2VsbCopCit7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Cisg
ICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSwgY2FsbGVlRnJhbWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlv
bkNlbGxJZ25vcmVkKTsKK30KKwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19v
YmplY3QpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKQEAgLTE4MTksNyArMTgzMSw4IEBAIHN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSwgSlNWYWx1ZSBjYWxsZWUsCiAgICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFz
T2JqZWN0KGNhbGxlZSkpOwogICAgICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2Jq
ZWN0KHZtKSwgY2FsbGVlRnJhbWUpOwogICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dD
OwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFt
ZSwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2FsbGVy
U1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAg
ICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50
OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2xv
d1BhdGhMb2coIkNhbGwgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIp
OwpAQCAtMTgzOCw3ICsxODUxLDggQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVI
b3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAg
Y2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgdm0uZW5j
b2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihh
c09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAg
IERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFs
T2JqZWN0LCBjYWxsZWVGcmFtZSwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBv
aW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAg
ICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzOworICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxl
clNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgfQogICAgIAogICAgIHNsb3dQ
YXRoTG9nKCJDb25zdHJ1Y3RvciBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwg
IlxuIik7CkBAIC0xODQ3LDcgKzE4NjEsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhh
bmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAg
IExMSU5UX0NBTExfVEhST1coZ2xvYmFsT2JqZWN0LCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJv
cihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwogfQogCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQsIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSwgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IG51bGxwdHIpCitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxs
RnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFsdWUg
Y2FsbGVlQXNWYWx1ZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1l
LT5jYWxsZXJGcmFtZSgpOwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKQEAgLTE4NjIsMTQgKzE4NzYsOSBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6
YXRpb25LaQogICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJ
bnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCgh
IWNvZGVQdHIpOwotCi0gICAgICAgICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAm
JiBjYWxsTGlua0luZm8pIHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPmxpbmsodm0sIGNhbGxlckNvZGVCbG9jaywgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7
Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5
UHRyVGFnPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAgICAgTExJTlRf
Q0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIGF1dG8qIGNhbGxlclNQID0g
Y2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAg
ICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChjYWxsZWVGcmFtZSwg
Y2FsbGVlQXNWYWx1ZSwga2luZCkpOwogICAgIH0KQEAgLTE5MDQsNzQgKzE5MTMsOSBAQCBpbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBD
b2RlU3BlY2lhbGl6YXRpb25LaQogICAgIH0KIAogICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAg
IAotICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewot
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5saW5rKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxl
ZSwgY29kZVB0cik7Ci0gICAgICAgIGlmIChjb2RlQmxvY2spCi0gICAgICAgICAgICBjb2RlQmxv
Y2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgIH0KLQog
ICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwotICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJh
bWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2Fs
bChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIE9wJiYgYnl0ZWNv
ZGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4
ID0gMCkKLXsKLSAgICAvLyBUaGlzIG5lZWRzIHRvOgotICAgIC8vIC0gU2V0IHVwIGEgY2FsbCBm
cmFtZS4KLSAgICAvLyAtIEZpZ3VyZSBvdXQgd2hhdCB0byBjYWxsIGFuZCBjb21waWxlIGl0IGlm
IG5lY2Vzc2FyeS4KLSAgICAvLyAtIElmIHBvc3NpYmxlLCBsaW5rIHRoZSBjYWxsJ3MgaW5saW5l
IGNhY2hlLgotICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3Mg
dG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgotICAgIAotICAgIEpTVmFsdWUgY2FsbGVl
QXNWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBjYWxsZWVGb3IoYnl0ZWNvZGUsIGNoZWNr
cG9pbnRJbmRleCkpOwotICAgIAotICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsRnJh
bWUgLSBzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludElu
ZGV4KTsKLSAgICAKLSAgICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRl
eCkpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7Ci0gICAgY2FsbGVlRnJhbWUtPnNldENh
bGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIHJldHVybiBzZXRVcENhbGwoY2FsbGVlRnJhbWUs
IGtpbmQsIGNhbGxlZUFzVmFsdWUsICZjYWxsTGlua0luZm9Gb3IobWV0YWRhdGEsIGNoZWNrcG9p
bnRJbmRleCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbCkKLXsK
LSAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29k
ZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcENhbGw+KCksIENvZGVGb3JDYWxsKSk7Ci19Ci0K
LUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpCi17Ci0gICAgTExJTlRf
QkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2Fs
bEZyYW1lLCBwYy0+YXM8T3BUYWlsQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKLX0KLQotTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdCkKLXsKLSAgICBMTElOVF9CRUdJTl9O
T19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUs
IHBjLT5hczxPcENvbnN0cnVjdD4oKSwgQ29kZUZvckNvbnN0cnVjdCkpOwotfQotCi1MTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsKQotewotICAgIExMSU5U
X0JFR0lOKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUs
IHBjLT5hczxPcEl0ZXJhdG9yT3Blbj4oKSwgQ29kZUZvckNhbGwsIE9wSXRlcmF0b3JPcGVuOjpz
eW1ib2xDYWxsKSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRv
cl9uZXh0X2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTsKLQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmlj
Q2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JOZXh0PigpLCBDb2Rl
Rm9yQ2FsbCwgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0KSk7CisgICAgYXV0byogY2FsbGVy
U1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAg
ICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncykKQEAgLTIwNDMsOCArMTk4Nyw4IEBA
IGVudW0gY2xhc3MgU2V0QXJndW1lbnRzV2l0aCB7CiAgICAgQ3VycmVudEFyZ3VtZW50cwogfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFy
Z3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFNldEFyZ3VtZW50c1dpdGggc2V0KQordGVtcGxhdGU8
dHlwZW5hbWUgT3AsIFNldEFyZ3VtZW50c1dpdGggc2V0PgoraW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9u
KiBwYywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCkKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRf
UEMoKTsKIApAQCAtMjA1MywxMSArMTk5NywxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFu
ZCB0aGUgbmV3IGNhbGwgZnJhbWUuCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wPigp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKICAg
ICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV9jYWxsZWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IHZtLm5ld0NhbGxGcmFt
ZVJldHVyblZhbHVlOwotCi0gICAgaWYgKHNldCA9PSBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Qp
IHsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZtLnZhcmFyZ3NM
ZW5ndGggKyAxOworICAgIGlmIGNvbnN0ZXhwciAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9i
amVjdCkgewogICAgICAgICBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV90aGlzVmFsdWUpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9hcmd1bWVudHMp
LCBieXRlY29kZS5tX2ZpcnN0VmFyQXJnLCB2bS52YXJhcmdzTGVuZ3RoKTsKICAgICAgICAgTExJ
TlRfQ0FMTF9DSEVDS19FWENFUFRJT04oZ2xvYmFsT2JqZWN0KTsKICAgICB9IGVsc2UKQEAgLTIw
NjcsMjcgKzIwMTIsMzAgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgIGNhbGxlZUZyYW1l
LT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNh
bGxlZUFzVmFsdWU7CiAgICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQs
IGNhbGxlZUFzVmFsdWUpKTsKKyAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby51cGRhdGVNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisK
KyAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6
ZUluUmVnaXN0ZXJzOworICAgIExMSU5UX1JFVFVSTl9UV08ocGMsIGNhbGxlclNQKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYXJncykKIHsKLSAgICByZXR1
cm4gdmFyYXJnc1NldHVwPE9wQ2FsbFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxs
LCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BD
YWxsVmFyYXJncywgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2Rl
Rm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGxf
dmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxWYXJhcmdzPihj
YWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAg
ICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRo
OjpPYmplY3Q+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKIHsKLSAgICBy
ZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjYWxsRnJhbWUs
IHBjLCBDb2RlRm9yQ2FsbCwgU2V0QXJndW1lbnRzV2l0aDo6Q3VycmVudEFyZ3VtZW50cyk7Cisg
ICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgU2V0QXJn
dW1lbnRzV2l0aDo6Q3VycmVudEFyZ3VtZW50cz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3Mp
CiB7Ci0gICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcENvbnN0cnVjdFZhcmFyZ3M+KGNhbGxGcmFt
ZSwgcGMsIENvZGVGb3JDb25zdHJ1Y3QsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAg
cmV0dXJuIHZhcmFyZ3NTZXR1cDxPcENvbnN0cnVjdFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6
Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNv
bnN0IEluc3RydWN0aW9uKiBwYywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+
IHJldHVyblBvaW50KQpAQCAtMjExMCw3ICsyMDU4LDggQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rp
b24KICAgICAKICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmVu
Y29kZShldmFsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGJ5dGVjb2RlLm1fZWNtYU1vZGUp
KTsKICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xv
YmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRy
eXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAg
IGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnM7CisgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwg
TExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogfQogICAgIAogTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2NhbGxfZXZhbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmgKaW5kZXggZTIwYTBkZmM2Yjg3YWNkNjIyNjhlODhhYTZhYTk2NGZiNmUw
OWI2Ni4uZDQzOGZjYjMzOWRhZmUzN2EzYzE0MWRiZTI0YTZhZDIxMTI5YmI4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKQEAgLTM4LDYgKzM4LDgg
QEAgbmFtZXNwYWNlIExMSW50IHsKIAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxp
bnRfdHJhY2Vfb3BlcmFuZChDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9t
V2hlcmUsIGludCBvcGVyYW5kKSBSRUZFUkVOQ0VEX0ZST01fQVNNOwogZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhY2VfdmFsdWUoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1
Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgUkVGRVJFTkNF
RF9GUk9NX0FTTTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X2xpbmtfY2Fs
bChDYWxsRnJhbWUqLCBKU0NlbGwqLCBDYWxsTGlua0luZm8qLCBKU0NlbGwqKTsKK2V4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3ZpcnR1YWxfY2FsbChDYWxsRnJhbWUqLCBKU0Nl
bGwqLCBDYWxsTGlua0luZm8qLCBKU0NlbGwqKTsKIGV4dGVybiAiQyIgdm9pZCBsbGludF93cml0
ZV9iYXJyaWVyX3Nsb3coQ2FsbEZyYW1lKiwgSlNDZWxsKikgUkVGRVJFTkNFRF9GUk9NX0FTTSBX
VEZfSU5URVJOQUw7CiAKICNkZWZpbmUgTExJTlRfU0xPV19QQVRIX0RFQ0wobmFtZSkgXApAQCAt
MTE5LDkgKzEyMSw2IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3
X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX25ld19hc3luY19mdW5jKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfbmV3X2FzeW5jX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfc2V0X2Z1bmN0aW9uX25hbWUpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jYWxsKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfdGFpbF9jYWxsKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29u
c3RydWN0KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2l6ZV9mcmFt
ZV9mb3JfdmFyYXJncyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Np
emVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKTsKQEAgLTEzMSw4ICsxMzAsNiBAQCBMTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzKTsKIExMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKTsKIExMSU5UX1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUxNik7CiBMTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbF93aWRlMzIpOwotTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpOwotTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwpOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90ZWFyX29mZl9hcmd1bWVudHMpOwog
TExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKaW5kZXggNDYyY2JmYmU0ZTM0NTY4NDVl
MDVhYThiYzBjNDgxMTUzY2JiOGQwYS4uMTYwM2MyYzc4NTRjOTk5YmU5ZTZjNTcwNTMzNmNmZjc0
MjcyOTBiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3Bw
CkBAIC0zNDYsOSArMzQ2LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4gY3JlYXRlSlNHYXRlVGh1bmsodm9pZCogcG9pbnRlciwgUHQKIHsKICAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCi0gICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDMsIHRhZyk7Ci0gICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpy
ZWdUMyk7Ci0gICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDMsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDUsIHRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpyZWdUNSk7CisgICAgaml0
LmZhckp1bXAoR1BSSW5mbzo6cmVnVDUsIE9wZXJhdGlvblB0clRhZyk7CiAKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpMTEludFRodW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0
aXZlVG9KSVRHYXRlUHRyVGFnLCAiTExJbnQgJXMgY2FsbCBnYXRlIHRodW5rIiwgbmFtZSk7CkBA
IC0zNjYsMTMgKzM2NiwxNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqIHBvaW50ZXIsCiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50ICVz
IHdhc20gY2FsbCBnYXRlIHRodW5rIiwgbmFtZSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcgdGFnKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENh
bGxHYXRlKFB0clRhZyB0YWcsIGJvb2wgdW50YWcpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAotICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJz
Ojpscik7Ci0gICAgaml0LnZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QwLCB0
YWcpOworICAgIGlmICh1bnRhZykgeworICAgICAgICBqaXQudW50YWdQdHIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIyLCBBUk02NFJlZ2lzdGVyczo6bHIpOworICAgICAgICBqaXQudmFsaWRhdGVVbnRh
Z2dlZFB0cihBUk02NFJlZ2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAg
fQorICAgIGppdC5mYXJKdW1wKEdQUkluZm86OmFyZ3VtZW50R1BSNywgdGFnKTsKIAogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OkxMSW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCB0YWlsIGNhbGwgZ2F0ZSB0aHVuayIpOwpA
QCAtNTczLDggKzU3NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBy
ZXR1cm5Mb2NhdGlvblRodW5rKE9wY29kZUlEIG9wY29kZUlELCBPcGNvCiAgICAgTExJTlRfUkVU
VVJOX0xPQ0FUSU9OKG9wX2l0ZXJhdG9yX29wZW4pCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9O
KG9wX2l0ZXJhdG9yX25leHQpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVj
dCkKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Nsb3cpCi0gICAg
TExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3cpCisgICAgTExJ
TlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncykKKyAgICBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3MpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9w
X2dldF9ieV9pZCkKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X3ZhbCkKICAg
ICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfcHV0X2J5X2lkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuaAppbmRleCBiODdjNDIwY2JlNDAyYTFmMGNmMDg2ODEwN2I1
YWZkNmRiY2Y1NGFjLi4wNWVjNjAxYzAxNjRjYjk1NGI3M2EyMWM3MzUxZmYwMTBmZWE3MTBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaApAQCAtODgsNyArODgs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBqaXRDYWdl
UHRyVGh1bmsoKTsKICNpZiBDUFUoQVJNNjRFKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2
ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlSlNHYXRlVGh1bmsodm9pZCosIFB0clRhZywgY29uc3Qg
Y2hhciopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3Jl
YXRlV2FzbUdhdGVUaHVuayh2b2lkKiwgUHRyVGFnLCBjb25zdCBjaGFyKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRy
VGFnKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0
ZVRhaWxDYWxsR2F0ZShQdHJUYWcsIGJvb2wpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2
ZVRvSklUR2F0ZVB0clRhZz4gbG9vcE9TUkVudHJ5R2F0ZVRodW5rKCk7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBlbnRyeU9TUkVudHJ5R2F0ZVRodW5rKCk7
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiB3YXNtT1NSRW50
cnlHYXRlVGh1bmsoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQppbmRleCBiYjg4YjZmZGIwOTliNDk5YWU2ZmY0ZTgxMDEwMTUw
NGRhYTZkNGUzLi4zYTI1MjMzMDdiNGNkMDBlOTI2MDFkZjYwMGQ3MzViYjRmODk2NzM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCkBAIC01NTEsNiArNTUxLDcgQEAgY29uc3QgU3ltYm9sVHlwZSA9IGNvbnN0ZXhwciBTeW1i
b2xUeXBlCiBjb25zdCBPYmplY3RUeXBlID0gY29uc3RleHByIE9iamVjdFR5cGUKIGNvbnN0IEZp
bmFsT2JqZWN0VHlwZSA9IGNvbnN0ZXhwciBGaW5hbE9iamVjdFR5cGUKIGNvbnN0IEpTRnVuY3Rp
b25UeXBlID0gY29uc3RleHByIEpTRnVuY3Rpb25UeXBlCitjb25zdCBJbnRlcm5hbEZ1bmN0aW9u
VHlwZSA9IGNvbnN0ZXhwciBJbnRlcm5hbEZ1bmN0aW9uVHlwZQogY29uc3QgQXJyYXlUeXBlID0g
Y29uc3RleHByIEFycmF5VHlwZQogY29uc3QgRGVyaXZlZEFycmF5VHlwZSA9IGNvbnN0ZXhwciBE
ZXJpdmVkQXJyYXlUeXBlCiBjb25zdCBQcm94eU9iamVjdFR5cGUgPSBjb25zdGV4cHIgUHJveHlP
YmplY3RUeXBlCkBAIC0xMTUxLDI3ICsxMTUyLDI3IEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlv
bihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZp
CiAgICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gY2FsbGVlCiAgICAgZWxzaWYgQVJNNjRFCiAg
ICAgICAgIG1hY3JvIGNhbGxOYXJyb3coKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
OiVvcGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmln
ICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBH
YXRlOjolb3Bjb2RlTmFtZSUpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBv
bGluZV8lb3Bjb2RlTmFtZSU6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisgICAg
ICAgICAgICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3Jv
IGNhbGxXaWRlMTYoKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1l
JV93aWRlMTYpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNv
bnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6
JW9wY29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10s
IE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFt
cG9saW5lXyVvcGNvZGVOYW1lJV93aWRlMTY6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRy
VGFnCisgICAgICAgICAgICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCiAgICAg
ICAgIG1hY3JvIGNhbGxXaWRlMzIoKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25z
dGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVv
cGNvZGVOYW1lJV93aWRlMzIpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0Nv
bmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4
cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhNworICAgICAgICAgICAg
am1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAg
IF9qc190cmFtcG9saW5lXyVvcGNvZGVOYW1lJV93aWRlMzI6Ci0gICAgICAgICAgICBjYWxsIHQz
LCBjYWxsUHRyVGFnCisgICAgICAgICAgICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVu
ZAogCi0gICAgICAgIG1vdmUgY2FsbGVlLCB0MworICAgICAgICBtb3ZlIGNhbGxlZSwgdDUKICAg
ICAgICAgc2l6ZShjYWxsTmFycm93LCBjYWxsV2lkZTE2LCBjYWxsV2lkZTMyLCBtYWNybyAoZ2Vu
KSBnZW4oKSBlbmQpCiAgICAgZWxzZQogICAgICAgICBjYWxsIGNhbGxlZSwgY2FsbFB0clRhZwpA
QCAtMTIwOSwxMiArMTIxMCwyMyBAQCBtYWNybyBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFt
ZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaQogICAgIGVuZAog
ZW5kCiAKLW1hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwg
dGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQotICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUs
IHNwCittYWNybyBwcmVwYXJlRm9yUmVndWxhckNhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVt
cDQpCiBlbmQKIAotIyBzcCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZQotbWFjcm8gcHJlcGFyZUZv
clRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcp
CittYWNybyBpbnZva2VGb3JSZWd1bGFyQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxl
ZSwgbWF5YmVPbGRDRlIsIGNhbGxQdHJUYWcpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVlLCBjYWxsUHRyVGFnKQorZW5kCisKKyMgdDUgaXMgbWV0
YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVy
LCBkaXNwYXRjaCwgY2FsbFB0clRhZykKK2VuZAorCittYWNybyBwcmVwYXJlRm9yU2xvd1JlZ3Vs
YXJDYWxsKCkKK2VuZAorCisjIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lICsgQ2FsbGVyRnJh
bWVBbmRQQ1NpemUKKyMgV2UgbGVhdmUgY2ZyIHRlbXA0IHRvIHVzZSBpdCBmb3IgdW50YWdnaW5n
LgorbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQog
ICAgIHJlc3RvcmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50KCkKIAogICAgIGxvYWRpIFBheWxvYWRP
ZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1tjZnJdLCB0ZW1wMgpAQCAtMTIzMiwx
OCArMTI0NCwxNyBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVt
cDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBtb3ZlIGNmciwgdGVtcDEKICAgICBh
ZGRwIHRlbXAyLCB0ZW1wMQogCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzW3NwXSwgdGVtcDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZVtzcF0sIHRlbXAy
CiAgICAgIyBXZSBhc3N1bWUgPCAyXjI4IGFyZ3VtZW50cwogICAgIG11bGkgU2xvdFNpemUsIHRl
bXAyCiAgICAgYWRkaSBTdGFja0FsaWdubWVudCAtIDEgKyBDYWxsRnJhbWVIZWFkZXJTaXplLCB0
ZW1wMgogICAgIGFuZGkgflN0YWNrQWxpZ25tZW50TWFzaywgdGVtcDIKIAogICAgIGlmIEFSTXY3
IG9yIEFSTTY0IG9yIEFSTTY0RSBvciBDX0xPT1Agb3IgQ19MT09QX1dJTiBvciBNSVBTIG9yIFJJ
U0NWNjQKLSAgICAgICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKICAgICAgICAgc3Vi
aSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgQ2FsbGVyRnJhbWVB
bmRQQzo6cmV0dXJuUENbY2ZyXSwgbHIKICAgICBlbHNlCi0gICAgICAgIGFkZHAgUHRyU2l6ZSwg
c3AKKyAgICAgICAgc3VicCBQdHJTaXplLCBzcAogICAgICAgICBzdWJpIFB0clNpemUsIHRlbXAy
CiAgICAgICAgIGxvYWRwIFB0clNpemVbY2ZyXSwgdGVtcDMKICAgICAgICAgc3RvcmVwIHRlbXAz
LCBbc3BdCkBAIC0xMjcwLDkgKzEyODEsMTIgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNh
bGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCiAgICAgZW5kCiAK
ICAgICBtb3ZlIHRlbXAxLCBzcAorZW5kCisKK21hY3JvIGludm9rZUZvclRhaWxDYWxsKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKICAgICBp
ZiBBUk02NEUKLSAgICAgICAgbW92ZSB0ZW1wNCwgYTIKLSAgICAgICAgbW92ZSBjYWxsZWUsIGEw
CisgICAgICAgIG1vdmUgbWF5YmVPbGRDRlIsIGEyCisgICAgICAgIG1vdmUgY2FsbGVlLCBhNwog
ICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmln
R2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6dGFpbENhbGwlY2FsbFB0clRhZyUpICogUHRyU2l6
ZSwgYTEKICAgICAgICAgam1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjICVjYWxsUHRy
VGFnJQogICAgIGVsc2UKQEAgLTEyODAsNiArMTI5NCwyMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFp
bENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAg
ICBlbmQKIGVuZAogCisjIHQ1IGlzIG1ldGFkYXRhCittYWNybyBwcmVwYXJlRm9yUG9seW1vcnBo
aWNUYWlsQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5h
bWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxQdHJUYWcpCisgICAgaWYgQVJN
NjRFCisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIGE3CisgICAgICAg
IGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFw
ICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbFdpdGhvdXRVbnRhZyVjYWxsUHRyVGFnJSkgKiBQ
dHJTaXplLCBhMQorICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNh
bGxQdHJUYWclCisgICAgZWxzZQorICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25b
dDVdLCBhMQorICAgICAgICBqbXAgYTEsIGNhbGxQdHJUYWcKKyAgICBlbmQKK2VuZAorCittYWNy
byBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKCkKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlM
TEludCgpCitlbmQKKwogbWFjcm8gc2xvd1BhdGhGb3JDb21tb25DYWxsKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBz
bG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUs
IG1fZHN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogZW5kCkBAIC0xMjkxLDcg
KzEzMjEsNyBAQCBtYWNybyBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dQogICAgICAgICBtYWNybyAoY2FsbGVl
LCBjYWxsZWVGcmFtZVB0cikKICAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250
VXBkYXRlU1AKICAgICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCi0gICAgICAgICAg
ICBwcmVwYXJlQ2FsbChjYWxsZWUsIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5U2xvd1BhdGhQdHJU
YWcpCisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKICAgICAgICAgLmRv
bnRVcGRhdGVTUDoKICAgICAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVf
c2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIEpTRW50cnlTbG93UGF0aFB0clRhZykKICAgICAgICAg
ZW5kKQpAQCAtMTgyMCwxMiArMTg1MCwxNiBAQCBpZiBBUk02NEUKICAgICBnbG9iYWwgX3RhaWxD
YWxsSlNFbnRyeVRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZToKICAg
ICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwgSlNFbnRyeVB0clRh
ZworICAgICAgICBqbXAgYTcsIEpTRW50cnlQdHJUYWcKIAogICAgIGdsb2JhbCBfdGFpbENhbGxK
U0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lCiAgICAgX3RhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJh
bXBvbGluZToKICAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwg
SlNFbnRyeVNsb3dQYXRoUHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZworCisg
ICAgZ2xvYmFsIF90YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lCisgICAgX3Rh
aWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmU6CisgICAgICAgIGptcCBhNywgSlNF
bnRyeVB0clRhZwogCiAgICAgZ2xvYmFsIF9leGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZQogICAg
IF9leGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZToKQEAgLTIzMjUsMTcgKzIzNTksMTcgQEAgZW5k
KQogCiAKICMgd2UgY2FuJ3QgdXNlIGNhbGxPcCBiZWNhdXNlIHdlIGNhbid0IHBhc3MgYGNhbGxg
IGFzIHRoZSBvcGNvZGUgbmFtZSwgc2luY2UgaXQncyBhbiBpbnN0cnVjdGlvbiBuYW1lCi1jb21t
b25DYWxsT3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVG
b3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY29tbW9uQ2FsbE9wKG9wX2Nh
bGwsIF9sbGludF9zbG93X3BhdGhfY2FsbCwgT3BDYWxsLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwg
cHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogICAgIGFy
cmF5UHJvZmlsZUZvckNhbGwoT3BDYWxsLCBnZXR1KQogZW5kKQogCiAKLW1hY3JvIGNhbGxPcChv
cGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKLSAgICBjb21tb25DYWxs
T3Aob3BfJW9wY29kZU5hbWUlLCBfbGxpbnRfc2xvd19wYXRoXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBwcmVwYXJlQ2FsbCwgZm4pCittYWNybyBjYWxsT3Aob3Bjb2RlTmFtZSwgb3Bjb2Rl
U3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVw
YXJlU2xvd0NhbGwsIGZuKQorICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGlu
dF9zbG93X3BhdGhfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZv
a2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCiBlbmQKIAog
Ci1jYWxsT3AodGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1hY3Jv
IChnZXR1LCBtZXRhZGF0YSkKK2NhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVG
b3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxD
YWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAg
YXJyYXlQcm9maWxlRm9yQ2FsbChPcFRhaWxDYWxsLCBnZXR1KQogICAgIGNoZWNrU3dpdGNoVG9K
SVRGb3JFcGlsb2d1ZSgpCiAgICAgIyByZWxvYWQgbWV0YWRhdGEgc2luY2UgY2hlY2tTd2l0Y2hU
b0pJVEZvckVwaWxvZ3VlKCkgbWlnaHQgaGF2ZSB0cmFzaGVkIHQ1CkBAIC0yMzQzLDcgKzIzNzcs
NyBAQCBjYWxsT3AodGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1h
Y3JvIChnZXR1LCBtZXRhZGF0YSkKIGVuZCkKIAogCi1jYWxsT3AoY29uc3RydWN0LCBPcENvbnN0
cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkK
K2NhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGlu
dm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJl
cGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAog
bWFjcm8gYnJhbmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQpAQCAtMjM1NCw3ICsyMzg4
LDcgQEAgbWFjcm8gYnJhbmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQogLm5vRXhjZXB0
aW9uOiAgICAKIGVuZAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2Fs
bCkKK21hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgZ2V0LCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHBy
ZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsKQogICAgIGNhbGxTbG93UGF0aChmcmFt
ZVNsb3dQYXRoKQogICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3df
cGF0aF90cmFtcG9saW5lKQogICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKQEAgLTIzNjksMzIgKzI0
MDMsNzAgQEAgbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG8KICAgICAgICAgICAgIHN1YnAgcjEsIENh
bGxlckZyYW1lQW5kUENTaXplLCBzcAogICAgICAgICBlbmQKICAgICBlbmQKLSAgICBzbG93UGF0
aEZvckNvbW1vbkNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwg
c2xvd1BhdGgsIHByZXBhcmVDYWxsKQorICAgIGNhbGxDYWxsU2xvd1BhdGgoCisgICAgICAgIHNs
b3dQYXRoLAorICAgICAgICAjIFRob3NlIGFyZSByMCBhbmQgcjEKKyAgICAgICAgbWFjcm8gKHJl
c3RvcmVkUENPclRocm93LCBjYWxsZWVGcmFtZVB0cikKKyAgICAgICAgICAgIGJ0cHogY2FsbGVl
RnJhbWVQdHIsIC5kb250VXBkYXRlU1AKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0Nh
bGwoKQorICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKKyAgICAgICAgICAgIGdl
dChtX2NhbGxlZSwgdDEpCisgICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQxLCB0MCkKKyAgICAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKKworICAgICAgICAgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29k
ZUJsb2NrW3Q1XSwgdDEKKyAgICAgICAgICAgIGJ0cHogdDEsIChjb25zdGV4cHIgQ2FsbExpbmtJ
bmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAgICAgICAg
ICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50YWcgcmV0dXJuIGFkZHJlc3MuIFNv
IHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGluZSBzZXBhcmF0ZWx5LgorICAg
ICAgICAgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhpYyBj
YWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRodW5r
IHNpZGUuCisgICAgICAgICAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3Bh
dGNoLCBKU0VudHJ5UHRyVGFnKQorICAgICAgICAgICAgam1wIC5nb1BvbHltb3JwaGljCisKKyAg
ICAgICAgLm5vdFBvbHltb3JwaGljOgorICAgICAgICAgICAgYnFuZXEgdDAsIHQxLCAub3BDYWxs
U2xvdworICAgICAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKyAgICAgICAg
LmdvUG9seW1vcnBoaWM6CisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25b
dDVdLCB0NQorICAgICAgICAgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1
LCB0MSwgSlNFbnRyeVB0clRhZykKKworICAgICAgICAub3BDYWxsU2xvdzoKKyAgICAgICAgICAg
ICMgdDAgaXMgY2FsbGVlCisgICAgICAgICAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAg
ICAgICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICAgICAgICAgIGFkZHAg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExp
bmtJbmZvKiBpbiB0MgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAg
ICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MworICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisgICAgICAgICAgICBwcmVwYXJlU2xvd0NhbGwo
KQorICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlz
cGF0Y2gsIHQ1LCBKU0VudHJ5UHRyVGFnKQorICAgICAgICAuZG9udFVwZGF0ZVNQOgorICAgICAg
ICAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCisgICAgICAg
IGVuZCkKIGVuZAogCiAKLWxsaW50T3Aob3BfY2FsbF92YXJhcmdzLCBPcENhbGxWYXJhcmdzLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFy
YXJncywgc2l6ZSwgT3BDYWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6
ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfY2FsbF92YXJhcmdzLCBP
cENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKKyAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcENhbGxW
YXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93
X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFy
Z3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVG
b3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKQogZW5k
KQogCi1sbGludE9wKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2Fs
bF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAg
ICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJlcGFyaW5n
IGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBjYWxsIG9w
Y29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIHNpemUsIE9wVGFp
bENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92
YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzLCBwcmVwYXJlRm9yVGFp
bENhbGwpCisgICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0
LCBPcFRhaWxDYWxsVmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3Bh
dGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENh
bGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxs
KQogZW5kKQogCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBPcFRh
aWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgIyBXZSBsaWUg
YW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmluZyBpdCBzaW5jZSB3
ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBvcGNvZGUKLSAgICBk
b0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgc2l6ZSwgT3BUYWls
Q2FsbEZvcndhcmRBcmd1bWVudHMsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJh
bWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxGb3J3YXJk
QXJndW1lbnRzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9z
bG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3Bh
dGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwsIGludm9r
ZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFyZUZvclNs
b3dUYWlsQ2FsbCkKIGVuZCkKIAogCi1sbGludE9wKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENv
bnN0cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZh
cmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIE9wQ29uc3RydWN0VmFyYXJncywgZGlz
cGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Ns
b3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25zdHJ1Y3RWYXJhcmdzLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICBkb0NhbGxW
YXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ29uc3RydWN0VmFyYXJn
cywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRo
X3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29uc3RydWN0X3ZhcmFy
Z3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVG
b3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKQogZW5k
KQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmNwcAppbmRleCBjMDRmZmQ2YjBiYzNmMjZlMTkyZjA2ZjJiYmY3NGIwNjRkY2IyNzlh
Li45ODc2ZWY2ZWY3NDJhY2VlZGFlMjY5YTJhYjQ1NGM1YjYyY2Q1MTZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCkBAIC0x
MjksNiArMTI5LDggQEAgdXNpbmcgV2ViQ29uZmlnOjpnX2NvbmZpZzsKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIENhbGxMaW5rSW5mbzsKKwogLy89PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBD
TG9vcFJlZ2lzdGVyIGlzIHRoZSBzdG9yYWdlIGZvciBhbiBlbXVsYXRlZCBDUFUgcmVnaXN0ZXIu
CiAvLyBJdCBkZWZpbmVzIHRoZSBwb2xpY3kgb2YgaG93IGludHMgc21hbGxlciB0aGFuIGludHB0
cl90IGFyZSBwYWNrZWQgaW50byB0aGUKQEAgLTE2Niw2ICsxNjgsNyBAQCBjbGFzcyBDTG9vcFJl
Z2lzdGVyIHsKICAgICBvcGVyYXRvciBQcm90b0NhbGxGcmFtZSooKSB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8UHJvdG9DYWxsRnJhbWUqPihtX3ZhbHVlKTsgfQogICAgIG9wZXJhdG9yIFJlZ2lzdGVy
KigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpc3Rlcio+KG1fdmFsdWUpOyB9CiAgICAgb3Bl
cmF0b3IgVk0qKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFZNKj4obV92YWx1ZSk7IH0KKyAgICBv
cGVyYXRvciBDYWxsTGlua0luZm8qKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PENhbGxMaW5rSW5m
byo+KG1fdmFsdWUpOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8c2l6ZW9mKFQpID09IHNpemVvZih1aW50cHRyX3QpPj4KICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgb3BlcmF0b3I9KFQgdmFsdWUpIHsgbV92YWx1ZSA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHZhbHVlKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCA5MDNlNWE0NWIxYjY2
ODJmZDI4NzhiOTc5NDg1MmFlZmQ2NzUxZDVlLi44NmUzZWVmN2E5ZDBkYjM5OWFhNzI5ZDIzOGFh
ZGYzYzUwNTQzZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAtMTE4LDcgKzExOCw5IEBAIG1hY3Jv
IGNDYWxsMlZvaWQoZnVuY3Rpb24pCiBlbmQKIAogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQotICAg
IGlmIEFSTXY3IG9yIE1JUFMKKyAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgorICAgICAgICBj
bG9vcENhbGxTbG93UGF0aDQgZnVuY3Rpb24sIGEwLCBhMSwgYTIsIGEzCisgICAgZWxzaWYgQVJN
djcgb3IgTUlQUwogICAgICAgICBjYWxsIGZ1bmN0aW9uCiAgICAgZWxzaWYgWDg2IG9yIFg4Nl9X
SU4KICAgICAgICAgcHVzaCBhMwpAQCAtMjE1MSwxMiArMjE1MywxMiBAQCBtYWNybyBhcnJheVBy
b2ZpbGVGb3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAgICBiaW5lcSBUaGlzQXJndW1lbnRP
ZmZzZXQgKyBUYWdPZmZzZXRbY2ZyLCB0MywgOF0sIENlbGxUYWcsIC5kb25lCiAgICAgbG9hZGkg
VGhpc0FyZ3VtZW50T2Zmc2V0ICsgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XSwgdDAKICAgICBs
b2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MAotICAgIHN0b3JlaSB0MCwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RT
ZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5k
CiAKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCiBtYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNs
b3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rl
ciwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRB
cmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKLSAgICBtZXRhZGF0
YSh0NSwgdDApCiAgICAgZ2V0Q2FsbGVlKHQwKQogCiAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlu
a0JpdFt0NV0sIHQyCkBAIC0yMTg4LDcgKzIxOTAsNyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bj
b2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQog
ICAgICAgICBlbmQsIG1ldGFkYXRhKQogCiAgICAgICAgIG1hY3JvIGdldENhbGxlZShkc3QpCi0g
ICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0
KQogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAg
LTIxOTksNiArMjIwMSw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0
aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1
KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogICAgICAgICAK
KyAgICAgICAgIyB0NSBob2xkcyBtZXRhZGF0YQogICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5h
bWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxs
LCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwg
Z2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKQEAgLTI4NjYsNiArMjg2OSw3IEBAIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jfb3BlbiwgT3BJdGVyYXRvck9wZW4sIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgICAgIG1vdmUgMSwgZHN0CiAgICAgZW5kCiAKKyAg
ICBtZXRhZGF0YSh0NSwgdDApCiAgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxp
bnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0
b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9H
ZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRp
bmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0QnlJZFN0
YXJ0OgpAQCAtMjkyNyw2ICsyOTMxLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRv
cl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBl
bmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcg
dG8gd3JpdGUgdG8gaXQgbGF0ZXIuCisgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGNhbGxIZWxw
ZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGws
IE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9y
UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENh
bGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5n
VGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBhOTEzMTRmY2U5ZWU0
NGNhNmUwYmFjNzgyZDliZTJmNTljMGE4MzcwLi4zM2JiZGQyNjg3ZWQyOWZlMTIyNzJjMjcyYjBm
YmUwYjA2Y2M5ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMTQzLDcgKzE0Myw5IEBAIGVuZAogIyBUaGlz
IGJhcmVseSB3b3Jrcy4gYXJnMyBhbmQgYXJnNCBzaG91bGQgcHJvYmFibHkgYmUgaW1tZWRpYXRl
cy4KIG1hY3JvIGNDYWxsNChmdW5jdGlvbikKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCh0NCwgMHhiYWQwYzAwNCkKLSAgICBpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJ
U0NWNjQKKyAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgorICAgICAgICBjbG9vcENhbGxTbG93
UGF0aDQgZnVuY3Rpb24sIGEwLCBhMSwgYTIsIGEzCisgICAgZWxzaWYgWDg2XzY0IG9yIEFSTTY0
IG9yIEFSTTY0RSBvciBSSVNDVjY0CiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBY
ODZfNjRfV0lOCiAgICAgICAgICMgT24gV2luNjQsIHJjeCwgcmR4LCByOCwgYW5kIHI5IGFyZSB1
c2VkIGZvciBwYXNzaW5nIHRoZSBmaXJzdCBmb3VyIHBhcmFtZXRlcnMuCkBAIC0zMDksMTIgKzMx
MSwxMiBAQCBtYWNybyBtYWtlSmF2YVNjcmlwdENhbGwoZW50cnksIHByb3RvQ2FsbEZyYW1lLCB0
ZW1wMSwgdGVtcDIpCiAgICAgaWYgQ19MT09QIG9yIENfTE9PUF9XSU4KICAgICAgICAgY2xvb3BD
YWxsSlNGdW5jdGlvbiBlbnRyeQogICAgIGVsc2lmIEFSTTY0RQotICAgICAgICBtb3ZlIGVudHJ5
LCB0MwotICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlND
Q29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6dm1FbnRyeVRvSmF2YVNjcmlwdCkgKiBQ
dHJTaXplLCBhMgotICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNF
bnRyeVB0clRhZworICAgICAgICBtb3ZlIGVudHJ5LCB0NQorICAgICAgICBsZWFwIEpTQ0NvbmZp
ZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIg
R2F0ZTo6dm1FbnRyeVRvSmF2YVNjcmlwdCkgKiBQdHJTaXplLCBhNworICAgICAgICBqbXAgW2E3
XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwogICAgICAgICBnbG9iYWwg
X3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lCiAgICAgICAgIF92bUVudHJ5VG9KYXZhU2Ny
aXB0VHJhbXBvbGluZToKLSAgICAgICAgY2FsbCB0MywgSlNFbnRyeVB0clRhZworICAgICAgICBj
YWxsIHQ1LCBKU0VudHJ5UHRyVGFnCiAgICAgZWxzZQogICAgICAgICBjYWxsIGVudHJ5LCBKU0Vu
dHJ5UHRyVGFnCiAgICAgZW5kCkBAIC0yMzYwLDQxICsyMzYyLDU4IEBAIG1hY3JvIGFycmF5UHJv
ZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGxvYWRxIFRoaXNBcmd1bWVudE9m
ZnNldFtjZnIsIHQzLCA4XSwgdDAKICAgICBidHFueiB0MCwgbm90Q2VsbE1hc2ssIC5kb25lCiAg
ICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDMKLSAgICBzdG9yZWkgdDMsICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUubV9s
YXN0U2VlblN0cnVjdHVyZUlEW3Q1XQorICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCiAuZG9uZToK
IGVuZAogCi1tYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIHNp
emUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKLSAgICBtZXRhZGF0YSh0NSwgdDApCi0gICAgZ2V0
Q2FsbGVlKHQwKQorIyB0NSBob2xkcyBtZXRhZGF0YS4KK21hY3JvIGNhbGxIZWxwZXIob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBw
cmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRB
cmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICBnZXRDYWxs
ZWUodDEpCiAKLSAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLm1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0W3Q1XSwgdDIKLSAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKLSAgICBicW5lcSB0MywgdDIsIC5vcENh
bGxTbG93CisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCiAKKyAgICAj
IEFsaWduZWQgdG8gSklUOjpjb21waWxlU2V0dXBGcmFtZQogICAgIGdldEFyZ3VtZW50U3RhcnQo
dDMpCiAgICAgbHNoaWZ0aSAzLCB0MwogICAgIG5lZ3AgdDMKICAgICBhZGRwIGNmciwgdDMKLSAg
ICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyh0MikKLSAgICBzdG9yZVBDKCkKICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KKworICAgICMgU3RvcmUgbG9jYXRpb24gYml0cyBh
bmQgfGNhbGxlZXwsIGFuZCBjb25maWd1cmUgc3AuCisgICAgc3RvcmVQQygpCisgICAgc3RvcmVx
IHQwLCBDYWxsZWVbdDNdCiAgICAgbW92ZSB0Mywgc3AKLSAgICBpZiBBUk02NEUKLSAgICAgICAg
bG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVD
b2RlVGFyZ2V0W3Q1XSwgdDAKLSAgICAgICAgcHJlcGFyZUNhbGwodDAsIHQyLCB0MywgdDQsIHQx
LCBKU0VudHJ5UHRyVGFnKQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAgICBjYWxs
VGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0MCwgSlNFbnRyeVB0clRhZykK
LSAgICBlbHNlCi0gICAgICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIHQxLCBK
U0VudHJ5UHRyVGFnKQotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6
ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRp
c3BhdGNoLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGlu
ZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQotICAgIGVuZAotLm9wQ2FsbFNsb3c6Ci0g
ICAgc2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBh
cmVDYWxsKQotZW5kCisgICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKIAotbWFjcm8g
Y29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVD
YWxsLCBwcm9sb2d1ZSkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgIGJ0cHogdDEsIChjb25z
dGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBo
aWMKKyAgICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRy
ZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVs
eS4KKyAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNh
bGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsg
c2lkZS4KKyAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0Vu
dHJ5UHRyVGFnKQorICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisubm90UG9seW1vcnBoaWM6Cisg
ICAgYnFuZXEgdDAsIHQxLCAub3BDYWxsU2xvdworICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQs
IHQxKQorCisuZ29Qb2x5bW9ycGhpYzoKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25b
dDVdLCB0NQorICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpT
RW50cnlQdHJUYWcpCisKKy5vcENhbGxTbG93OgorICAgICMgdDAgaXMgY2FsbGVlCisgICAgIyB0
MiBpcyBDYWxsTGlua0luZm8qCisgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAor
ICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQy
ICMgQ2FsbExpbmtJbmZvKiBpbiB0MgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAg
bG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9i
amVjdFt0M10sIHQzCisgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rp
b24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFt
ZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCitlbmQK
KworbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3Qs
IHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93
Q2FsbCwgcHJvbG9ndWUpCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQog
ICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKQEAgLTI0MDMsNyArMjQyMiw3IEBAIG1hY3JvIGNv
bW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2Fs
bCwgcHJvbG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0
Q2FsbGVlKGRzdCkKLSAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAgICBn
ZXQobV9jYWxsZWUsIGRzdCkKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1l
bnRTdGFydChkc3QpCkBAIC0yNDE0LDcgKzI0MzMsOCBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bj
b2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQog
ICAgICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgZHN0KQogICAgICAg
ICBlbmQKIAotICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVT
dHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0
YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKKyAg
ICAgICAgIyB0NSBob2xkcyBtZXRhZGF0YQorICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5hbWUs
IHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBp
bnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50
Q291bnQpCiAgICAgZW5kKQogZW5kCiAKQEAgLTI1MzMsNiArMjU1Myw4OCBAQCBvcChsbGludF90
aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGptcCBfbGxpbnRfdGhy
b3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQogZW5kKQogCisjIHQwIGlzIGNhbGxlZQorIyB0
MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CittYWNy
byBsaW5rU2xvd1BhdGhGb3IoZnVuY3Rpb24pCisgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCisgICAg
bG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fdm1bdDNdLCB0MQorICAgIHN0b3JlcCBjZnIsIFZNOjp0
b3BDYWxsRnJhbWVbdDFdCisgICAgbW92ZSB0MiwgYTIKKyAgICBtb3ZlIHQzLCBhMQorICAgIG1v
dmUgY2ZyLCBhMAorICAgIGNDYWxsNChmdW5jdGlvbikKKyAgICBmdW5jdGlvbkVwaWxvZ3VlKCkK
KyAgICB1bnRhZ1JldHVybkFkZHJlc3Mgc3AKKyAgICBidHB6IHIxLCAuZG9Ob3RUcmFzaAorICAg
IHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0MSkKKyAgICBwcmVwYXJlRm9yVGFpbENh
bGwodDEsIHQyLCB0MywgdDQpCisgICAgdW50YWdSZXR1cm5BZGRyZXNzIHQ0CisuZG9Ob3RUcmFz
aDoKKyAgICAjIEZJWE1FOiBVc2UgaW52b2tlRm9yVGFpbENhbGw/CisgICAgam1wIHQwLCBKU0Vu
dHJ5UHRyVGFnCitlbmQKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgor
IyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorbWFjcm8gdmlydHVhbFRodW5rRm9yKG9m
ZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrLCBpbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZSwg
cHJlcGFyZUNhbGwsIHNsb3dDYXNlKQorICAgIGFkZGkgMSwgQ2FsbExpbmtJbmZvOjptX3Nsb3dQ
YXRoQ291bnRbdDJdCisgICAgbW92ZSBOb3RDZWxsTWFzaywgdDEKKyAgICBidHFueiB0MCwgdDEs
IHNsb3dDYXNlCisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBKU0Z1bmN0aW9uVHlwZSwg
Lm5vdEpTRnVuY3Rpb24KKyAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVPclJhcmVE
YXRhW3QwXSwgdDEKKyAgICBidHB6IHQxLCAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSwgLmlzRXhlY3V0YWJsZQorICAgIGxvYWRwIChGdW5jdGlvblJhcmVEYXRhOjptX2V4ZWN1
dGFibGUgLSAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSlbdDFdLCB0MQorLmlz
RXhlY3V0YWJsZToKKyAgICBsb2FkcCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja1t0MV0s
IHQxCisgICAgYnRweiB0MSwgc2xvd0Nhc2UKKy5jYWxsQ29kZToKKyAgICBwcmVwYXJlQ2FsbCh0
NSwgdDIsIHQzLCB0NCkKKyAgICBqbXAgdDEsIEpTRW50cnlQdHJUYWcKKy5ub3RKU0Z1bmN0aW9u
OgorICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgSW50ZXJuYWxGdW5jdGlvblR5cGUsIHNs
b3dDYXNlCisgICAgcHJlcGFyZUNhbGwodDUsIHQyLCB0MywgdDQpCisgICAgam1wIGludGVybmFs
RnVuY3Rpb25UcmFtcG9saW5lCitlbmQKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExp
bmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfbGlua19j
YWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF9saW5r
X2NhbGwpCitlbmQpCisKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMg
dDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1YWxfY2FsbF90cmFt
cG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBfbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2Fs
bF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNs
b3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9j
YWxsKQorZW5kKQorCisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQz
IGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90
cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6
bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5j
dGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRl
bXA0KSBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xs
aW50X3ZpcnR1YWxfY2FsbCkKK2VuZCkKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExp
bmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVh
bF90YWlsX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhl
Y3V0YWJsZUJhc2U6Om1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgX2xsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMs
IHRlbXA0KQorICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodGVtcDEpCisg
ICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKKyAg
ICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIHRlbXA0CisgICAgZW5kLCAuc2xvd0Nhc2UpCisuc2xv
d0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCiAK
IG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKQog
ICAgIGZ1bmN0aW9uUHJvbG9ndWUoKQpAQCAtMzA0Niw4ICszMTQ4LDggQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJhdG9yT3BlbiwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QKICAgICBlbmQKIAotCi0gICAgY2FsbEhl
bHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2Fs
bCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJl
Rm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdl
dENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVk
aW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0
ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJh
dG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFy
Q2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJD
YWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9p
bnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBn
ZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKICAgICBtYWNy
byBzdG9yZU5leHRBbmREaXNwYXRjaCh2YWx1ZSkKQEAgLTMxMDQsNyArMzIwNiw4IEBAIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3BJdGVyYXRvck5leHQsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoCiAgICAgZW5kCiAKICAgICAjIFVzZSBtX3ZhbHVlIHNsb3QgYXMg
YSB0bXAgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHRvIGl0IGxhdGVyLgotICAgIGNhbGxI
ZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2Nh
bGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJl
Rm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdl
dENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVk
aW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0
ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBPcEl0ZXJh
dG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJlZ3VsYXJD
YWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNh
bGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2lu
dCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdl
dEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0OgogICAgIG1hY3Jv
IHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUoZG9uZVZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvb2ZmbGluZWFzbS9jbG9vcC5yYgppbmRleCBjYWQyMTVhZTM0M2NjODZiM2ExMGE1ZmFmNjYy
ODQyNGE5YzAyZjI4Li5jNzAxNjY0YWIyYmZmZjIwN2QxMmU1ZTIyMmY5NjRjZmE5MTJhMmZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgpAQCAtNTcyLDYgKzU3
MiwxNCBAQCBkZWYgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9pZChvcGVyYW5kcykKICAgICAkYXNt
LnB1dGMgIiN7b3BlcmFuZHNbMF0uY0xhYmVsfSgje29wZXJhbmRzWzFdLmNsRHVtcH0sICN7b3Bl
cmFuZHNbMl0uY2xEdW1wfSk7IgogZW5kCiAKK2RlZiBjbG9vcEVtaXRDYWxsU2xvd1BhdGg0KG9w
ZXJhbmRzKQorICAgICRhc20ucHV0YyAieyIKKyAgICAkYXNtLnB1dGMgIiAgICBjbG9vcFN0YWNr
LnNldEN1cnJlbnRTdGFja1BvaW50ZXIoc3AudnAoKSk7IgorICAgICRhc20ucHV0YyAiICAgIFNs
b3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSAje29wZXJhbmRzWzBdLmNMYWJlbH0oI3tvcGVyYW5k
c1sxXS5jbER1bXB9LCAje29wZXJhbmRzWzJdLmNsRHVtcH0sICN7b3BlcmFuZHNbM10uY2xEdW1w
fSwgI3tvcGVyYW5kc1s0XS5jbER1bXB9KTsiCisgICAgJGFzbS5wdXRjICIgICAgZGVjb2RlUmVz
dWx0KHJlc3VsdCwgdDAsIHQxKTsiCisgICAgJGFzbS5wdXRjICJ9IgorZW5kCisKIGNsYXNzIElu
c3RydWN0aW9uCiAgICAgZGVmIGxvd2VyQ19MT09QCiAgICAgICAgIGNhc2Ugb3Bjb2RlCkBAIC0x
MTc1LDYgKzExODMsOSBAQCBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgd2hlbiAiY2xvb3BDYWxs
U2xvd1BhdGhWb2lkIgogICAgICAgICAgICAgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9pZChvcGVy
YW5kcykKIAorICAgICAgICB3aGVuICJjbG9vcENhbGxTbG93UGF0aDQiCisgICAgICAgICAgICBj
bG9vcEVtaXRDYWxsU2xvd1BhdGg0KG9wZXJhbmRzKQorCiAgICAgICAgICMgRm9yIGRlYnVnZ2lu
ZyBvbmx5LiBUaGlzIGlzIHVzZWQgdG8gaW5zZXJ0IGluc3RydW1lbnRhdGlvbiBpbnRvIHRoZQog
ICAgICAgICAjIGdlbmVyYXRlZCBMTEludEFzc2VtYmx5LmggZHVyaW5nIGxsaW50IGRldmVsb3Bt
ZW50IG9ubHkuIERvIG5vdCB1c2UKICAgICAgICAgIyBmb3IgcHJvZHVjdGlvbiBjb2RlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCmluZGV4
IDljYmE1ZDY4ZjNjYWQzMWNmYTJkOTZlYTRjOWJiYThkZmU5ZGE5YjIuLmMwMGI1MTZiMzNlYzVh
ZDEyOWQ1NmMzZmZkMjNlOWY1ZWMyMDVmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKQEAgLTQ1OSw2ICs0NTksNyBAQAogICAgICAi
Y2xvb3BDYWxsTmF0aXZlIiwgICAgICAgICAjIG9wZXJhbmRzOiBjYWxsZWUKICAgICAgImNsb29w
Q2FsbFNsb3dQYXRoIiwgICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgY3VycmVudEZyYW1l
LCBjdXJyZW50UEMKICAgICAgImNsb29wQ2FsbFNsb3dQYXRoVm9pZCIsICAgIyBvcGVyYW5kczog
Y2FsbFRhcmdldCwgY3VycmVudEZyYW1lLCBjdXJyZW50UEMKKyAgICAgImNsb29wQ2FsbFNsb3dQ
YXRoNCIsICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgYTAsIGExLCBhMiwgYTMKIAogICAg
ICAjIEZvciBkZWJ1Z2dpbmcgb25seToKICAgICAgIyBUYWtlcyBubyBvcGVyYW5kcyBidXQgc2lt
cGx5IGVtaXRzIHdoYXRldmVyIGZvbGxvd3MgaW4gLy8gY29tbWVudHMgYXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCmluZGV4IDk1ODEwNWQzMjY2
ZGRmZjg1YmU1ZDc2ZDg3Y2RlNWNiMzMxMzE0YzMuLjQ4ZmQ5MmY4YjZhOGVkMjk0NGE3MjQ4YjE1
N2QyYWY3Mjc3M2M1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGVCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZUJhc2UuaApAQCAtNTcsNiArNTcsNyBAQCBpbmxpbmUgYm9vbCBpc0NhbGwoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogCiBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBK
U0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBwcm90ZWN0ZWQ6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CmluZGV4IDVhYTU0MmExMmYyNzFkYmRmZjAyMGI5MTBlZGJjYzlhMTFjODM2NTYuLjJlOWI1MDY2
MDVjZmM2ZjFjNWVkZDIyZGFkOTczZTczZWFhOGY2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0yNiw2ICsyNiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaCIK
KyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0YWJsZS5oIgog
I2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlIDx3dGYvQm94Lmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HYXRlLmgKaW5kZXggZjZhMDViMDY1ZTMyZDhhZWNkNTY3YmY2YWI3NGFh
ZTYzODk5Nzc3OC4uZTQ3NzkyYjg3NjRlOTFkNTA2MTBlNGNkZGFlMzIzMWMxNDU5ZTIwNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaApAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB2KGppdENhZ2VQdHIsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpT
RW50cnlQdHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFB0
clRhZywgTm9QdHJUYWcpIFwKKyAgICB2KHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVB0clRh
ZywgTm9QdHJUYWcpIFwKICAgICB2KGxvb3BPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KGVu
dHJ5T1NSRW50cnksIE5vUHRyVGFnKSBcCiAgICAgdih3YXNtT1NSRW50cnksIE5vUHRyVGFnKSBc
CkBAIC00NiwyMCArNDcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgSlNDX0pTX0dB
VEVfT1BDT0RFUyh2KSBcCiAgICAgdihvcF9jYWxsLCBKU0VudHJ5UHRyVGFnKSBcCi0gICAgdihv
cF90YWlsX2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NvbnN0cnVjdCwgSlNFbnRy
eVB0clRhZykgXAogICAgIHYob3BfaXRlcmF0b3JfbmV4dCwgSlNFbnRyeVB0clRhZykgXAogICAg
IHYob3BfaXRlcmF0b3Jfb3BlbiwgSlNFbnRyeVB0clRhZykgXAotICAgIHYob3BfY2FsbF9zbG93
LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF9zbG93LCBKU0Vu
dHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NvbnN0cnVjdF9zbG93LCBKU0VudHJ5U2xv
d1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1Bh
dGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93
UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3cs
IEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xv
dywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3ZhcmFyZ3MsIEpTRW50
cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzLCBKU0VudHJ5UHRyVGFnKSBc
CisgICAgdihvcF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2Fs
bF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3Rfc2xvdywgSlNFbnRy
eVB0clRhZykgXAorICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5UHRyVGFnKSBc
CisgICAgdihvcF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9w
X2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxf
dmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHNfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3Zh
cmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY2FsbF9ldmFsX3Nsb3csIEpT
RW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0Vu
dHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRy
eVNsb3dQYXRoUHRyVGFnKSBcCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5Y2Y1ZmVhMDE5ODQ5ZGI2ZTY2MDkxMGJiOTQ1
MWNkMjdjMjVmYmM1Li5lYzQ4MjJmNWE5MDNkNGZiODVjYjQ4NDFhNGNkNjhmMGMxMGJmYmYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xMzgsNiArMTM4LDcgQEAKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNp
bmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludEV4Y2VwdGlvbnMuaCIKICNpbmNs
dWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1D
b2RlQmxvY2suaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpAQCAtOTEw
LDYgKzkxMSw0MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06Omdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZAogICAgIHJldHVybiBMTEludDo6
Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1
Y3RfdHJhbXBvbGluZSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFn
PiBWTTo6Z2V0Q1RJTGlua0NhbGwoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlv
bnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlmCisgICAg
cmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X2xpbmtfY2FsbF90
cmFtcG9saW5lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IFZN
OjpnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKQoreworI2lmIEVOQUJMRShK
SVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6OmNhbGxUb1Ro
cm93KCp0aGlzKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworfQorCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IFZNOjpnZXRDVElWaXJ0dWFs
Q2FsbChDYWxsTW9kZSBjYWxsTW9kZSkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRp
b25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvcigqdGhpcywgY2Fs
bE1vZGUpOworI2VuZGlmCisgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAgIGNhc2UgQ2FsbE1v
ZGU6OlJlZ3VsYXI6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworICAgIGNhc2UgQ2Fs
bE1vZGU6OlRhaWw6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZSk7CisgICAgY2Fz
ZSBDYWxsTW9kZTo6Q29uc3RydWN0OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUp
OworICAgIH0KKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsKK30KKwogVk06OkNsaWVudERhdGE6
On5DbGllbnREYXRhKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDM4
ODM4MDU0ZTM3M2FjMDc0ZjIxZjBjMjFkZGQzYTBmNThhMzY3NzkuLjA5NjQ1YWJkYzQzY2NlZjNj
MjE1YjExYjcwZDY5OGMzNDg5NDM5ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApA
QCAtMTA2LDYgKzEwNiw4IEBAIGNsYXNzIEJhc2ljQmxvY2tMb2NhdGlvbjsKIGNsYXNzIEJ1aWx0
aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBD
YWxsRnJhbWU7CitjbGFzcyBDYWxsTGlua0luZm87CitlbnVtIGNsYXNzIENhbGxNb2RlOwogc3Ry
dWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3Mg
Q29kZUNhY2hlOwpAQCAtOTAyLDYgKzkwNCw5IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAg
TmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9v
bCBjYW5Db25zdHJ1Y3QpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElM
aW5rQ2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRD
VElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlKTsK
IAogICAgIHN0YXRpYyBwdHJkaWZmX3QgZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI0M2ZkNzU5
ZWIzNzU5MDU0N2EzOGRlOGVjMjIxNmM4MDJiMDJhYjYuLjRjMzM4NjlkY2VhMzc0MzI2MTExOGI5
YWE2NDUwZWIyYTA5MjY1ZmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZv
IGluIExMSW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzI3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHN0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHku
anM6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9u
LmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudm0uaXNXYXNt
U3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qczoK
KyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnZtLmlzV2FzbVN1cHBv
cnRlZCk6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmls
ZXIuanM6CisgICAgICAgIChkb2VzVHJlZUhhdmVTdGFja1RyYWNlKToKKyAgICAgICAgKHJ1blRl
c3QpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanM6CisKIDIw
MjEtMTEtMTEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAg
SW5saW5lIFJlZ0V4cC50ZXN0IEpJVCBjb2RlIGluIERGRyBhbmQgRlRMCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJv
eHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdh
cmUtb2YtcHJveHkuanMKaW5kZXggNTBjYWVlZDExNDg0MjlmZDFiNWNlMGIwZmVhZTZiZGRkZTY3
MTBiOC4uOTRkYWI0NmQyZDcxODRmMzVkNDNlMmRiNGEyZGQ1NjQxOThiZWZmNSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9m
LXByb3h5LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10
by1iZS1hd2FyZS1vZi1wcm94eS5qcwpAQCAtMSw0ICsxLDQgQEAKLS8vQCBydW5EZWZhdWx0KCIt
LXZhbGlkYXRlT3B0aW9ucz10cnVlIC0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXVzZUNv
bmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAiLCAiLS10aHJlc2hv
bGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJt
VXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA9MTAwIiwgIi0t
dGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXpl
QWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbj0xMDAwIiwg
Ii0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKKy8vQCBydW5EZWZhdWx0
KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIiwgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICIt
LXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAiLCAiLS10
aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA9MTAw
IiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZvckZUTE9w
dGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbj0x
MDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKIAogZnVuY3Rp
b24gbWFpbigpIHsKICAgICBsZXQgdjE2MjsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3Nh
bXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKaW5kZXggNjg5YTAwNWFiNTU1YTFm
YzYwMWE1NGU0ZWJmOTRlOTlhNjY4Zjc3ZS4uNWMyMjBmZDc2Y2RjNWM0MGU1OWNjNjZlNTczNDJj
NzJkOGM3ZjNhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIt
d2FzbS1uYW1lLXNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmls
ZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKQEAgLTY5LDUgKzY5LDUgQEAKICAgICB2YXIgd2FzbUVu
dHJ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLl9wYXJy
b3QoMSk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRyeSwgWyJfc2lsbHkiLCAiKHVua25v
d24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFj
b25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFy
cm90XSIsICJ3YXNtLXN0dWIiLCAiMjQiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2Fz
bUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3Nd
IiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1d
IiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnki
XSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNt
LmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qcwppbmRleCBjZDIx
ZjI4OGMxNDhhNGI3NDA1YmY4NjhkZWY5YjU0NTczNDA1MDQ1Li4wNmRmMDEyNDk1OTY5ZTI4NDIx
ODc3ODY5MDEzNWJmMDkwMTBlYzZkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGlu
Zy1wcm9maWxlci13YXNtLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
LXdhc20uanMKQEAgLTgsNSArOCw1IEBACiAgICAgdmFyIHdhc21FbnRyeSA9IGZ1bmN0aW9uKCkg
ewogICAgICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5sb29wKDEwMDAwMDAwKTsKICAgICB9
OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIndhc20t
c3R1YiIsICIwIiwgIndhc21FbnRyeSJdKTsKKyAgICBydW5UZXN0KHdhc21FbnRyeSwgWyI8Pz4u
d2FzbS1mdW5jdGlvblswXSIsICIodW5rbm93bikiLCAid2FzbUVudHJ5Il0pOwogfQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5q
cyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMK
aW5kZXggOTY0MmRkYzdjMWU2ZjA2ZTNiMTMyNzljMGU0YTAyNWI1NGRjYWJmMS4uMWI5MmU5NDg1
NGFmNjNmNjdkMDhmNTQ4ODdjNTIxNzkxNGVlMmJmNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJl
c3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcworKysgYi9KU1Rlc3RzL3N0
cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCkBAIC03MCwxMSArNzAs
MTMgQEAgZnVuY3Rpb24gY2hlY2sobm9kZSkgewogICAgIAogICAgIGxldCBub2RlID0gdHJlZTsK
ICAgICBmb3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgIGxl
dCBwcmV2ID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRyZW5bc3RhY2tUcmFjZVtp
XV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgaWYgKFZFUkJPU0UpIHsKICAg
ICAgICAgICAgICAgICBwcmludCgiZmFpbGluZyBvbiAiICsgaSArICIgOiAiICsgc3RhY2tUcmFj
ZVtpXSk7CiAgICAgICAgICAgICAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkodHJlZSkpOworICAg
ICAgICAgICAgICAgIHByaW50KE9iamVjdC5rZXlzKHByZXYuY2hpbGRyZW4pKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4LDcgKzEx
MCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3RhY2tUcmFjZU9yU3RyaW5nKSB7CiAgICAg
ICAgIH0KICAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgdGltZVRvRmFpbCk7
CiAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkocm9vdCwgdW5kZWZpbmVkLCAyKSk7Ci0gICAgZG9l
c1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNlLCB0cnVlLCB0cnVlKTsKKyAgICBk
b2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2VPclN0cmluZywgdHJ1ZSwgdHJ1
ZSk7CiAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhY2sgdHJhY2UiKTsKIH0KIApkaWZmIC0t
Z2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzIGIvSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCmluZGV4IDY4MDVlNjg5ZjVjODc5
ZTJjYTUwOWM4OGQzZTdiMzc2ZGUwOWZhYWEuLjMzYzg2YmYxY2RlOWE4ZGFiMTE4ZTBlNGNiMGJh
Y2Q1OWI3NDkxZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1l
U2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24u
anMKQEAgLTY5LDQgKzY5LDQgQEAKIGFzc2VydC5lcShzdGFja3RyYWNlWzNdLCAiPD8+Lndhc20t
ZnVuY3Rpb25bX2JhY29uXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNF0s
ICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV1AW3dhc20gY29kZV0iKTsKIGFzc2VydC5lcShzdGFj
a3RyYWNlWzVdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF1AW3dhc20gY29kZV0iKTsKLWFz
c2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHdhc20g
ZW50cnkKK2Fzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFtuYXRpdmUgY29kZV0i
KTsgLy8gd2FzbSBlbnRyeQo=
</data>
<flag name="commit-queue"
          id="468913"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444018</attachid>
            <date>2021-11-11 16:18:57 -0800</date>
            <delta_ts>2021-11-11 16:31:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111161856.patch</filename>
            <type>text/plain</type>
            <size>398650</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MjBmNmFkNjgyNzQ5ZmJhODUzOTc4ZDdlYmRiNTMzYjZhZmFjYjljLi5lZTQ1ZmUyMzBiNTY5MzQ1
ZTVjY2IyZWYxOGI2NmUwMjc1OWI0YzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTUgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oOgor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwOgor
ICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oOgorICAgICAgICAoSlNDOjpjYWxsTGlua0luZm9Gb3IpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJT
dHViKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZSk6
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnZpc2l0V2Vhayk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9TdHViKToKKyAgICAgICAgKiBieXRl
Y29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjppc0xpbmtl
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c3R1YiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRTbG93U3R1Yik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJTbG93U3R1Yik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGlu
ZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
ZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludE9y
QmFzZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hM
TEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9SZXBhdGNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAuCisgICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAg
ICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU93bmVy
KToKKyAgICAgICAgKEpTQzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OnJl
dmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6anNU
b1dhc21JQ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAg
IChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2gu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oLgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpo
YW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjp2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJl
ZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFi
aWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8pOgorICAgICAgICAoSlND
OjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpK
SVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6
CisgICAgICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
dmlydHVhbEZvcldpdGhGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgIChK
U0M6OnZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF9saW5rX2NhbGwpOgorICAgICAg
ICAoSlNDOjpMTEludDo6bGxpbnRfdmlydHVhbF9jYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAg
ICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwp
OgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOiBEZWxldGVkLgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAgICAgICAoSlND
OjpMTEludDo6Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVy
bkxvY2F0aW9uVGh1bmspOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wUmVnaXN0ZXI6Om9wZXJhdG9y
IENhbGxMaW5rSW5mbyopOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAg
ICAgKiBvZmZsaW5lYXNtL2Nsb29wLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rp
b25zLnJiOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2F0ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJTGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisKIDIwMjEtMTEtMTEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIERpc2FibGUgSklUIHJ1bnMgb2YgdGhlIEV4ZWN1dGlvblRpbWVMaW1pdFRl
c3Qgd2hlbiAhRU5BQkxFKEpJVCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggMTJjNGE1YzgyNzdjYTc3MDFkODQ5ZWZmNjQ2N2JkODg3OTU5MDAwOC4uY2M0MWZjMDNkMGEw
ODZjYzc3Y2U0ZTdkMDAyZGUxN2M4NjQzMjAxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtNjU5LDcgKzY1OSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmgKICAgICBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAogICAgIGJ5dGVj
b2RlL0p1bXBUYWJsZS5oCi0gICAgYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAogICAgIGJ5
dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCiAg
ICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAogICAgIGJ5dGVjb2RlL0xpbmtU
aW1lQ29uc3RhbnQuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4OWM5YzE3NGJi
MjIzYjM2YzM5NmJhZmM0NmZlMTE2NmE2ODIwZjQzLi4zMTViNGYwZjk2ZTQxNzM3ZjM3YjAxMTlm
NzBjNmI2OTk3MTQ4OGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ3LDcg
KzE0Nyw2IEBACiAJCTBGMENBRUZDMUVDNERBNkIwMDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBDQUVGQTFFQzREQTYyMDA5NzBEMTIgLyogSlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENBRUZGMUVD
NERBODgwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAv
KiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0
SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYwRkM0NUExNEJE
MTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJ
bnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjEwRjFBMzFDNDIwQkYwMDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEwRjFBMjFDNDIwQkYw
MDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggKi87IH07CiAJCTBGMTJERTEwMTk3OUQ1RkQwMDA2RkY0
RSAvKiBFeGNlcHRpb25GdXp6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTM2RDRE
MTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzNkQ0QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODYs
NyArMTg1LDYgQEAKIAkJMEYyNEU1NDQxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNGMTdFQTlG
NTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3
IC8qIFRlbXBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjRF
NTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRj
aC5oICovOyB9OwogCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1
NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IH07CkBAIC0xODkyLDYgKzE4OTAs
NyBAQAogCQlFMzNGNTA4NzFCODQ0OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzM0Y1MDg2MUI4NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVj
dG9yLmx1dC5oICovOyB9OwogCQlFMzQwMEVDMTIyQTFDQzdCMDA5REVENTQgLyogRnVuY3Rpb25F
eGVjdXRhYmxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM0MDBFQzAyMkExQ0M3ODAwOURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlu
bGluZXMuaCAqLzsgfTsKIAkJRTM0OUE3ODEyNDkxRjE2MTAwMUJBMzM2IC8qIERGR0NvZGVPcmln
aW5Qb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzQ5QTc4MDI0OTFGMTVBMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzREMUFFNTI3M0RDOTFG
MDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEQxQUU0MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5s
aW5lcy5oICovOyB9OwogCQlFMzRFNjU3NTIwNjY4RUFBMDBGQjgxQUMgLyogUGFyc2VIYXNoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRFNjU3MzIw
NjY4RThEMDBGQjgxQUMgLyogUGFyc2VIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM0RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1l
VHJhY2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM0RURCRjYxREI1RkZDMTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNEY5MzBFMjMyMkQ4ODIwMDJC
OERCNCAvKiBKU0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTM0RjkzMEMyMzIyRDg4MTAwMkI4REI0IC8qIEpTR2VuZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MDYsNiAr
MTkwNSw3IEBACiAJCUUzNUEwQjlEMjIwQUQ4N0EwMEFDNDQ3NCAvKiBFeGVjdXRhYmxlQmFzZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NUEwQjlDMjIwQUQ4N0EwMEFDNDQ3NCAvKiBFeGVjdXRhYmxlQmFzZUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVDQTE1NDFEQkMz
QTVDMDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklU
SGVhcFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTM1Q0ExNTYxREJDM0E1RjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTAxREJD
M0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNUUzNjNFMjczREM4QzYwMERCMjRDQyAv
KiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICovOyB9OwogCQlFMzVFODlG
RDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTg5RkIyNUM1MEY4NjAwNzFFRTFFIC8qIEJp
Z0ludDY0QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMzVFODlGRTI1QzUwRjg3MDA3MUVFMUUgLyogQmlnVWludDY0QXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUU4OUZDMjVDNTBG
ODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5r
VGltZUNvbnN0YW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzkxLDcgKzIz
OTEsNiBAQAogCQkwRjBDQUVGRTFFQzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxi
YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBGaW5hbGl6ZXJDYWxs
YmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMDE1RjFBNjA0MDAz
MkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0
IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTBG
MUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQ3VzdG9tLmg7IHBhdGggPSBiMy9haXIvQWlyQ3VzdG9tLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNl
cHRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2Vw
dGlvbkZ1enouY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEyREUwRTE5NzlE
NUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFeGNlcHRpb25GdXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NDU0LDggKzI0NTMsNiBAQAogCQkwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NDYxN0VFMjc0OTAw
QUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0
ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRlbXBSZWdpc3RlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1MzE3
RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUNhbGxGcmFtZVNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxs
RnJhbWVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQ2FsbEZy
YW1lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjA3LDYgKzUyMDQsNyBA
QAogCQlFMzQwMEVDMDIyQTFDQzc4MDA5REVENTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNDlBNzdGMjQ5MUYxNTkwMDFCQTMzNiAvKiBERkdDb2Rl
T3JpZ2luUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb2RlT3JpZ2luUG9vbC5jcHA7
IHBhdGggPSBkZmcvREZHQ29kZU9yaWdpblBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzQ5QTc4MDI0OTFGMTVBMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ29kZU9yaWdpblBvb2wuaDsgcGF0aCA9IGRmZy9ERkdDb2RlT3Jp
Z2luUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzREMUFFNDI3M0RDOTFG
MDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVwYXRjaElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0
RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8qIFBhcnNlSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYXJzZUhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM0RTY1NzQyMDY2OEU4RTAwRkI4MUFDIC8qIFBhcnNlSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZUhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMzRFREJGNjFEQjVGRkMxMDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lVHJhY2Vycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTIyOSw2ICs1MjI3LDggQEAKIAkJRTM1Q0ExNTAxREJDM0E1
NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01KSVRBYnN0cmFjdEhlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTM1Q0ExNTExREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyog
RE9NSklUSGVhcFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJ
VEhlYXBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzVFMzYzQzI3M0RD
OEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNUUzNjNEMjczREM4
QzYwMERCMjRDQyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFODlG
QjI1QzUwRjg2MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCaWdJbnQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNUU4OUZDMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWdVaW50NjRBcnJheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25z
dGFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDU4LDggKzY0NTgsNiBAQAogCQkJ
CTYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oICovLAogCQkJCTBGQzMx
NDE0MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAx
ODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggKi8sCi0JCQkJMEYyNEU1NDkxN0VFMjc0
OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLAotCQkJCTBGMjRFNTRBMTdFRTI3NDkwMEFCQjIx
NyAvKiBSZXBhdGNoLmggKi8sCiAJCQkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3
IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovLAogCQkJCTBGRUU5ODQyMUE4OTIyNzUw
MDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgKi8sCkBAIC04ODE1LDcgKzg4MTMsNiBA
QAogCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oICovLAogCQkJCUUzNjM3RUU4MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50
LmNwcCAqLywKIAkJCQlFMzYzN0VFNzIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFu
dC5oICovLAotCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5m
by5oICovLAogCQkJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovLAogCQkJCTUzRkEyQUUwMUNGMzdG
M0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuaCAqLywKIAkJCQkxNEY3OUY2RTIxNkVBRDUwMDAwNDZEMzkgLyogTWV0YWRhdGFUYWJsZS5j
cHAgKi8sCkBAIC04ODYyLDYgKzg4NTksOSBAQAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3
MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8sCiAJCQkJMEZGNjBBQkYxNjc0MEY4MTAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICovLAogCQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3
OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8sCisJCQkJRTM1RTM2M0QyNzNEQzhDNjAwREIyNEND
IC8qIFJlcGF0Y2guY3BwICovLAorCQkJCUUzNUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBh
dGNoLmggKi8sCisJCQkJRTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJbmxpbmVz
LmggKi8sCiAJCQkJODY1REEwQzkyNUI4OTYyQTAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0
YXR1cy5jcHAgKi8sCiAJCQkJODY1REEwQzcyNUI4OTYwQzAwODc1NzcyIC8qIFNldFByaXZhdGVC
cmFuZFN0YXR1cy5oICovLAogCQkJCTg2NURBMEM2MjVCODk1OUUwMDg3NTc3MiAvKiBTZXRQcml2
YXRlQnJhbmRWYXJpYW50LmNwcCAqLywKQEAgLTk3NDcsNiArOTc0Nyw3IEBACiAJCQkJRkVBMDg2
MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyRDREREUxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRTlGQTdDNTI3M0M4QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUz
NDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBEZWZlcnJlZFdvcmtUaW1lci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDMyMyw4ICsxMDMyNCw2IEBACiAJCQkJQTM4RDI1MEUyNTgwMEQ0NDAwNDJCRkRE
IC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZ
YXJySklULmggaW4gSGVhZGVycyAqLywKLQkJCQk2NTNCQzQzRjI2RDAxM0E2MDBEOEJFMjAgLyog
WWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAw
OTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlERDdGNTIz
QzFCQkI1MDA5MDVGMTMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTEwNTI2LDcgKzEwNTI1LDYgQEAKIAkJCQlFMzYzN0VFOTIzNkU1NkIwMDA5NkJEMEEg
LyogTGlua1RpbWVDb25zdGFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVBNkIwRkI0NjBD
RjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwREU5QTA5
MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJbnRDb21tb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAvKiBMTEludERhdGEu
aCBpbiBIZWFkZXJzICovLApAQCAtMTA3MjYsNyArMTA3MjQsOCBAQAogCQkJCUE1QkExNUU4MTgy
MzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk5MkY1NkI3MUU0RTg0QjIwMDM1OTUzQiAvKiBSZW1vdGVJbnNwZWN0
b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI0RTU1MTE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM1RTM2M0UyNzNEQzhDNjAw
REIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCUUzNEQxQUU1MjczREM5MUYw
MDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RjNGQjky
NjEzQzc4OTAwNjlFODlGIC8qIFJlc291cmNlRXhoYXVzdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFM0I2NDJGMjVENkZCNEQwMDFBRERCNCAvKiBSb290TWFya1JlYXNvbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMDc4NCw3ICsxMDc4Myw2IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAw
QjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEy
RUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlGRTlGQTdDNTI3M0M4QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RTE1
RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTEwNTIsNiArMTEwNTAsOCBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYw
MEVEQUY3MSAvKiBZYXJyRXJyb3JDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIy
MzQ3NDkxMDBCMUE5QUIgLyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzRjBGQzk1MjZBMTFCNEEwMDk5RkZBMCAvKiBZYXJyTWF0Y2hpbmdDb250
ZXh0SG9sZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0Ig
LyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA3OTNmNDZmN2JjNThlNTA4Y2RhNmNiOTAxNWFhMDkyZThjOTg2MGQ5Li5iNjk1
NTU3YWZlNjBmMTQ3NTEwMDliMWI1MDVmNTUxMzM0MDViOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CkBAIC0yNzMsNiArMjczLDcgQEAgYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCiBi
eXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBieXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAog
Ynl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAKK2J5dGVjb2RlL1JlcGF0Y2guY3BwCiBieXRl
Y29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRW
YXJpYW50LmNwcAogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCkBAIC02NzYsNyArNjc3LDYg
QEAgaml0L1JlZy5jcHAKIGppdC9SZWdpc3RlckF0T2Zmc2V0LmNwcAogaml0L1JlZ2lzdGVyQXRP
ZmZzZXRMaXN0LmNwcAogaml0L1JlZ2lzdGVyU2V0LmNwcAotaml0L1JlcGF0Y2guY3BwCiBqaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAog
aml0L1Nsb3dQYXRoQ2FsbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0NvZGVMb2NhdGlvbi5oCmluZGV4IGE2Y2E1YzgxYzUxMDk1ZjgxOThkOWI4MmRiMTRhNTgxYTI1
Y2U2MDkuLjA3NTA0YmEwNGU1OWI2ZDFkY2EyMzU4OGJlZmI1NGRmMTkxODVhMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaApAQCAtMjcsOCAr
MjcsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKLSNpZiBFTkFC
TEUoQVNTRU1CTEVSKQotCiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBjbGFzcyBOZWFyQ2FsbE1v
ZGUgOiB1aW50OF90IHsgUmVndWxhciwgVGFpbCB9OwpAQCAtMjY5LDUgKzI2NywzIEBAIGlubGlu
ZSBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21t
b248dGFnPjo6Y29udmVydGliCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwCmluZGV4IDA2MjQwZTg3NDM2Mzg3M2I5ZGYyY2M5ZjM3ZjM4MjkxOGZlN2Uy
OWUuLmZmOTMwNTg5ZGIyNzExODBkMDk5ZTIzNTZjOTk3ZGM1OWIzNTZlNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcApAQCAtMzIsNyArMzIs
NiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNp
bmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgogCiAj
aWYgT1MoTElOVVgpCiAjaW5jbHVkZSAiUGVyZkxvZy5oIgpAQCAtNDMsMjkgKzQyLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBzaXplX3QgTGlua0J1ZmZlcjo6c19wcm9maWxlQ3VtbXVsYXRpdmVMaW5r
ZWRTaXplc1tMaW5rQnVmZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIHNpemVfdCBMaW5rQnVmZmVy
OjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZENvdW50c1tMaW5rQnVmZmVyOjpudW1iZXJPZlBy
b2ZpbGVzXTsKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCi17Ci0gICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCk7Ci19Ci0KLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9u
TW9kZSBtb2RlKQotewotICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFdh
c206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1
bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdN
b2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU6
Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHkoKTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBMaW5r
QnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29k
ZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKQogewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKaW5kZXggNWEz
ZjAwZjA1YzY4NTgyOTU3NzI2NjdmYzIyMzU2N2Y2OGU5MmI4Ny4uMjg1ZGYwZDFhMTgwOWRiMjBi
NDc5NGNkMzEyMDU5ZWZjNmVlMDBlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmgKQEAgLTQzLDEyICs0Myw2IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1uYW1lc3BhY2UgV2FzbSB7Ci1lbnVtIGNsYXNzIENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3Q7
Ci19Ci0KLWNsYXNzIENvZGVCbG9jazsKLQogLy8gTGlua0J1ZmZlcjoKIC8vCiAvLyBUaGlzIGNs
YXNzIGFzc2lzdHMgaW4gbGlua2luZyBjb2RlIGdlbmVyYXRlZCBieSB0aGUgbWFjcm8gYXNzZW1i
bGVyLCBvbmNlIGNvZGUgZ2VuZXJhdGlvbgpAQCAtNDQ2LDggKzQ0MCw2IEBAIGNsYXNzIExpbmtC
dWZmZXIgewogICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRo
b3V0RGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFnPigpKQogI2VuZGlmCiAKLWJvb2wgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwotCiAjZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9S
KGNvZGVCbG9jaywgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCAuLi4pICBcCiAg
ICAgRklOQUxJWkVfQ09ERV9JRigoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNvZGVCbG9jaykg
fHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVz
dWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApAQCAtNDc2LDggKzQ2OCw2IEBAIGJvb2wgc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwogI2RlZmluZSBGSU5BTElaRV9SRUdFWFBf
Q09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIGRhdGFMb2dGQXJndW1lbnRz
Rm9ySGVhZGluZykgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKEpTQzo6T3B0aW9uczo6YXN5bmNE
aXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0
clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKQogCi1ib29sIHNob3VsZER1bXBEaXNh
c3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwotCiAjZGVmaW5lIEZJTkFMSVpFX1dB
U01fQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIC4uLikgIFwKICAgICBG
SU5BTElaRV9DT0RFX0lGKChKU0M6Ok9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBKU0M6
Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1i
bHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgX19WQV9BUkdTX18pCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmNwcAppbmRleCA1ZDU2NzQxZWZlNjY0MjZlZmNhMjA1MmFjMjUwOTgzMjIw
MjM3N2QwLi43MGRiMGQwMzllYTdlZDYxMWM4YTZlNWQ4MDg5MTNmMGFkNWJkNTU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuY3BwCkBAIC0yNiw4ICsyNiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1
ZGUgIkpTQ1B0clRhZy5oIgorI2luY2x1ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKICNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC02Myw1
ICs2NiwyOCBAQCBDU3RyaW5nIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJhc2U6OmRpc2Fzc2VtYmx5
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseQogICAgIHJldHVybiBvdXQudG9DU3Ry
aW5nKCk7CiB9CiAKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpOworfQorCitib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlv
bk1vZGUgbW9kZSkKK3sKKyAgICBpZiAoT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHko
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBX
YXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGU6CisgICAgICAgIHJldHVybiBPcHRpb25zOjpk
dW1wQkJRRGlzYXNzZW1ibHkoKTsKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01H
TW9kZToKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2Rl
OgorICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IDkyNTU5MThiMWJhMTc1YTFmNDlk
YzMwMjVlYzZmY2E4ODkzOWQzNjQuLjFlYTMyNDU0MTVhYjA4YTQ1YzdkM2U1OTU5NjBjNDQ1YjE5
ZmY3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAtNTQsNiArNTQsMTEgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2VudW0gY2xhc3MgQ29tcGlsYXRpb25Nb2RlIDogdWlu
dDhfdDsKK30gLy8gbmFtZXNwYWNlIFdhc20KKworY2xhc3MgQ29kZUJsb2NrOwogdGVtcGxhdGU8
UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiAKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKQEAgLTM3Nyw3ICszODIsMTAgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlIHsKIAogICAgIHZvaWQgZHVtcFdp
dGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgICAgIGlmIChtX3Zh
bHVlKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1l
KGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5h
bWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKICAgICB9CiAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOyB9
CkBAIC01MzcsNiArNTQ1LDkgQEAgaW5saW5lIEZ1bmN0aW9uUHRyPHRhZz46OkZ1bmN0aW9uUHRy
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IHB0cikKIHsKIH0KIAorYm9vbCBzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7Citib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihXYXNtOjpDb21waWxhdGlvbk1vZGUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNw
YWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5yYgppbmRleCBiZTJlOGM4MTFkNmRkZDBjMTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyLi4wMTM4
NjBiNjZjMmIxOWE4Y2JiNTk1M2E1ZDBlNDRkZDI3N2ZiZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI2LDYgKzI2LDcgQEAKIAog
ICAgIDpCYXNpY0Jsb2NrTG9jYXRpb24sCiAgICAgOkJvdW5kTGFiZWwsCisgICAgOkNhbGxMaW5r
SW5mbywKICAgICA6RGVidWdIb29rVHlwZSwKICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlw
ZVdpdGhFeHRlbnNpb24sCkBAIC00NCw3ICs0NSw2IEBACiAgICAgOkpTU2NvcGUsCiAgICAgOkpT
VHlwZSwKICAgICA6SlNWYWx1ZSwKLSAgICA6TExJbnRDYWxsTGlua0luZm8sCiAgICAgOlJlc3Vs
dFR5cGUsCiAgICAgOk9wZXJhbmRUeXBlcywKICAgICA6UHJpdmF0ZUZpZWxkUHV0S2luZCwKQEAg
LTg0MCw3ICs4NDAsOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAg
ICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAt
ODUyLDcgKzg1Myw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAg
ICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04
NjUsNyArODY3LDggQEAKICAgICAgICAgZWNtYU1vZGU6IEVDTUFNb2RlLAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAg
ICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBA
IC04NzksNiArODgyLDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAogICAgIH0sCkBAIC05MDAsNiArOTA0LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGlu
dCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExp
bmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MjEsNiArOTI2LDcgQEAKICAgICAgICAg
Zmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxM
aW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KQEAgLTkzMyw3ICs5Mzks
OCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5r
SW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwK
ICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtOTQ3LDYgKzk1NCw3
IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewor
ICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApA
QCAtMTI0OSw3ICsxMjU3LDggQEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25N
ZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6
IFZhbHVlUHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywK
KyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmls
ZTogQXJyYXlQcm9maWxlLAogICAgICAgICBpdGVyYXRvclByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
ICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBuZXh0
UHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTI3Miw3ICsxMjgxLDggQEAKICAgICBtZXRhZGF0
YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAog
ICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJ
bmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0lu
Zm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBuZXh0UmVz
dWx0UHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgICAgICBkb25lTW9kZU1ldGFkYXRhOiBHZXRC
eUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBkb25lUHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAt
MTM5Myw2ICsxNDAzLDkgQEAKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDQK
IG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDUKIG9wIDpsbGludF9jbG9vcF9k
aWRfcmV0dXJuX2Zyb21fanNfNDYKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNf
NDcKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDgKK29wIDpsbGludF9jbG9v
cF9kaWRfcmV0dXJuX2Zyb21fanNfNDkKIAogZW5kX3NlY3Rpb24gOkNMb29wSGVscGVycwogCkBA
IC0xNDE1LDYgKzE0MjgsMTAgQEAKIG9wIDpsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xp
bmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGlu
dF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X2xpbmtf
Y2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUKK29wIDps
bGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF90YWls
X2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2Nh
bGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOm5v
cm1hbF9vc3JfZXhpdF90cmFtcG9saW5lCkBAIC0xNDIzLDYgKzE0NDAsOCBAQAogb3AgOmxsaW50
X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24KIG9wIDpvcF9jYWxsX3JldHVybl9sb2NhdGlvbgog
b3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9jYWxsX3ZhcmFyZ3NfcmV0
dXJuX2xvY2F0aW9uCitvcCA6b3BfY29uc3RydWN0X3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uCiBv
cCA6b3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0
X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9nZXRfYnlfaWRfcmV0dXJuX2xv
Y2F0aW9uCkBAIC0xNDM4LDE1ICsxNDU3LDE1IEBACiBvcCA6b3BfY29uc3RydWN0X3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbgog
b3AgOm9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb24KLW9wIDpvcF90YWlsX2Nh
bGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
CiBvcCA6b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
CiBvcCA6b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9j
YWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb24KIAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2Fs
bAotb3AgOmpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsCiBvcCA6anNfdHJhbXBvbGluZV9vcF9j
b25zdHJ1Y3QKK29wIDpqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJncworb3AgOmpzX3RyYW1w
b2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3MKIG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9y
X25leHQKIG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW4KIG9wIDpqc190cmFtcG9s
aW5lX29wX2NhbGxfc2xvdwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAppbmRleCA0ZjQ3Yzhi
Y2NmOGU1NzQ4YWE5YjBmMzZlNmYzNjMwNWFkYzMwMDExLi4yNzBjZDZmMWQwMmY0NGQ1M2RiM2U2
YWE2M2FmZmExNWUwYzA5MjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaApAQCAtMTgw
LDcgKzE4MCw3IEBAIHB0cmRpZmZfdCBzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHVuc2lnbmVkIGNoZWNrCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlTWV0YWRhdGE+Ci1MTEludENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvRm9y
KEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCitD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwg
dW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewogICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50
SW5kZXgpOwogICAgIHJldHVybiBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mbzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKaW5kZXggM2I4MDNiMzhh
Nzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBhNTU4YS4uYTFhZmNmOTM4YTUxZjJiYzE3MmYwZmQy
MDI3MTMyZTY3MmVlZDk3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJUaHVua0dlbmVy
YXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAotI2lmIEVOQUJMRShKSVQpCiBu
YW1lc3BhY2UgSlNDIHsKIAogQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBDYWxsTGlua0luZm86OmNh
bGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKQpAQCAtODIsMTEgKzgxLDEzIEBAIENhbGxMaW5r
SW5mbzo6fkNhbGxMaW5rSW5mbygpCiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhclN0dWIoKQog
eworI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCFzdHViKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fc3R1Yi0+Y2xlYXJDYWxsTm9kZXNGb3IodGhpcyk7CiAgICAgbV9zdHViID0gbnVsbHB0
cjsKKyNlbmRpZgogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKQEAgLTEx
MywxOSArMTE0LDE5IEBAIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxM
aW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKICAgICByZXR1cm4gbV9kb25lTG9jYXRpb247CiB9CiAK
LXN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7Ci0K
IHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBS
RUxFQVNFX0FTU0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSkgJiBwb2x5bW9y
cGhpY0NhbGxlZU1hc2spKTsKICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLnNldCh2bSwgb3duZXIs
IGNhbGxlZSk7CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgCisgICAgaWYgKGlzRGF0YUlDKCkpCiAg
ICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOwog
ICAgIGVsc2UgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpT
RW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIGNhbGxlZSk7CisjZW5kaWYKICAgICB9
CiB9CiAKQEAgLTEzNSw4ICsxMzYsMTEgQEAgdm9pZCBDYWxsTGlua0luZm86OmNsZWFyQ2FsbGVl
KCkKICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLmNsZWFyKCk7CiAgICAgaWYgKGlzRGF0YUlDKCkp
CiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRy
OwotICAgIGVsc2UgaWYgKCFjbGVhcmVkQnlKZXR0aXNvbigpKQorICAgIGVsc2UgaWYgKCFjbGVh
cmVkQnlKZXR0aXNvbigpKSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIG51bGxwdHIpOwor
I2VuZGlmCisgICAgfQogfQogCiBKU09iamVjdCogQ2FsbExpbmtJbmZvOjpjYWxsZWUoKQpAQCAt
MjI0LDYgKzIyOCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAg
IAogICAgIGlmIChpc0xpbmtlZCgpKSB7CiAgICAgICAgIGlmIChzdHViKCkpIHsKKyNpZiBFTkFC
TEUoSklUKQogICAgICAgICAgICAgaWYgKCFzdHViKCktPnZpc2l0V2Vhayh2bSkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkgewogICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKApAQCAtMjM0LDYgKzIzOSw3IEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgICAgICAgICAgICAgIHVubGluayh2bSk7CiAgICAg
ICAgICAgICAgICAgbV9jbGVhcmVkQnlHQyA9IHRydWU7CiAgICAgICAgICAgICB9CisjZW5kaWYK
ICAgICAgICAgfSBlbHNlIGlmICghdm0uaGVhcC5pc01hcmtlZChtX2NhbGxlZU9yQ29kZUJsb2Nr
LmdldCgpKSkgewogICAgICAgICAgICAgaWYgKGlzRGlyZWN0KCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkgewpAQCAtMjgwLDEzICsyODYs
MTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgfQogfQogCisj
aWYgRU5BQkxFKEpJVCkKIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGNv
bnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJiBzaHVmZmxlRGF0YSkKIHsKICAgICBtX2ZyYW1lU2h1
ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0YSk7
CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxs
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwg
U2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIApAQCAtMzQ1LDcgKzM1Miw3IEBAIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsCiAgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBj
YWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51bGxw
dHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWls
Q2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogICAgIHNldFVzZXNE
YXRhSUNzKFVzZURhdGFJQzo6Tm8pOwpAQCAtMzU4LDcgKzM2NSw3IEBAIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSCiAgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxs
ZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENh
bGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpOwogICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BS
LCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVG
b3JUYWlsQ2FsbCkpOwpAQCAtMzY2LDcgKzM3Myw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYK
IAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0KQogewotICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkpOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSUxpbmtDYWxsKCku
Y29kZSgpKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyks
IEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQ
dHJUYWcpOwogfQpAQCAtMzc2LDIxICszODMsMzEgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
YXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmYK
ICAgICBqaXQubW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQorI2VuZGlmCiAKLXZvaWQg
Q2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxsTGlua0lu
Zm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSKQordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBD
YWxsVHlwZSBjYWxsVHlwZSwgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0YSkKIHsKLSAgICBtX2NvZGVPcmlnaW4gPSBDb2Rl
T3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOwotICAgIHNldFVwQ2Fs
bCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKLSAgICBtX2RvbmVM
b2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKLSAgICBpZiAodW5s
aW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgIFVOVVNFRF9QQVJBTShm
cmFtZVNodWZmbGVEYXRhKTsKKyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKGJ5dGVjb2Rl
SW5kZXgpOworICAgIG1fY2FsbFR5cGUgPSBjYWxsVHlwZTsKKyNpZiBFTkFCTEUoSklUKQorICAg
IEdQUlJlZyBjYWxsZWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSID0gR1BSSW5mbzo6cmVnVDI7CisgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7Cisg
ICAgaWYgKGZyYW1lU2h1ZmZsZURhdGEpIHsKICAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUgbmlj
ZSBpZiB0aGlzIHdlcmUgYSByZWZjb3VudGVkIGRhdGEgc3RydWN0dXJlLgotICAgICAgICBtX2Zy
YW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5r
ZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSk7CisgICAgICAgIG1fZnJhbWVTaHVmZmxl
RGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCpmcmFtZVNodWZmbGVEYXRh
KTsKICAgICB9Ci0gICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOwogICAgIHUuZGF0
YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOwotICAgIHNldFNsb3dQYXRo
Q2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVt
cGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworI2VuZGlmCisgICAgc2V0VXNl
c0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
KHZtLmdldENUSUxpbmtDYWxsKCkuY29kZSgpKTsKKyAgICAvLyBJZiBKSVQgaXMgZGlzYWJsZWQs
IHdlIHNob3VsZCBub3Qgc3VwcG9ydCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY2FsbCBJQy4KKyAg
ICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBkaXNhbGxvd1N0dWJzKCk7CiB9CiAK
KyNpZiBFTkFCTEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsK
QEAgLTQwNiw3ICs0MjMsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0KQogICAgIH0pOwogfQogCi12b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVj
dFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIFNjb3BlZExhbWJkYTx2b2lkKCk+
JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwo
KSk7CiAKQEAgLTQ2Miw2ICs0NzksNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RGlyZWN0Q2Fs
bFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiB0YXJnZXQpCiAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCB0
YXJnZXQpOwogfQorI2VuZGlmCiAKIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
IHsKQEAgLTQ4MywxMSArNTAxLDE0IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9T
dHViKCkKICAgICAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5jbGVhcigpOwogICAgICAgICB1LmRh
dGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gbnVsbHB0cjsKICAgICB9IGVsc2Ug
eworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIENDYWxsSGVscGVyczo6cmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0
YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRp
b24pLCBjYWxsZWVHUFIoKSwgbnVsbHB0cik7CisjZW5kaWYKICAgICB9CiB9CiAKKyNpZiBFTkFC
TEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86OnNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lPiYmIG5ld1N0dWIpCiB7CiAgICAgY2xlYXJTdHViKCk7CkBAIC01MDQsNyArNTI1
LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lPiYmIG5ld1N0dWIpCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zdHViLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgfQogfQorI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAppbmRleCBlNWY3N2NmMzdi
ZjI2NmY0YjljOTNjNTBjZjk5NmQyMWM2NjhjZTQ1Li5iMmQzYWZhNmNmNjBkMTViZTdhNWQ0OWQ4
NjJjYzQ1Y2Y4YjU4YTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCkBAIC0yOCwyNSArMjgsMjkgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVm
ZmxlRGF0YS5oIgogI2luY2x1ZGUgIkNhbGxNb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9u
LmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKEpJVCkKLQogY2xhc3MgQ0NhbGxIZWxw
ZXJzOworY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNs
YXNzIEpTRnVuY3Rpb247CitjbGFzcyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTsKIGVudW0g
T3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAorc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogc3Ry
dWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOwogCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMg
UGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgorICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKICAgICBlbnVtIENhbGxUeXBlIDogdWlu
dDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIENhbGwsCkBAIC01OSw2ICs2Myw4IEBAIGNs
YXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJ
bmZvPiB7CiAgICAgICAgIERpcmVjdENvbnN0cnVjdCwKICAgICAgICAgRGlyZWN0VGFpbENhbGwK
ICAgICB9OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxs
ZWVNYXNrID0gMTsKICAgICAKICAgICBzdGF0aWMgQ2FsbFR5cGUgY2FsbFR5cGVGb3IoT3Bjb2Rl
SUQgb3Bjb2RlSUQpOwogCkBAIC0xNzQsMzUgKzE4MCw0MyBAQCBjbGFzcyBDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBy
ZXR1cm4gaXNWYXJhcmdzQ2FsbFR5cGUoc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUp
KTsKICAgICB9CiAKLSAgICBib29sIGlzTGlua2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdHViIHx8
IG1fY2FsbGVlT3JDb2RlQmxvY2s7IH0KKyAgICBib29sIGlzTGlua2VkKCkgY29uc3QgeyByZXR1
cm4gc3R1YigpIHx8IG1fY2FsbGVlT3JDb2RlQmxvY2s7IH0KICAgICB2b2lkIHVubGluayhWTSYp
OwogCisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHNldFVwQ2FsbChDYWxsVHlwZSBjYWxsVHlw
ZSwgR1BSUmVnIGNhbGxlZUdQUikKICAgICB7CiAgICAgICAgIG1fY2FsbFR5cGUgPSBjYWxsVHlw
ZTsKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCi0gICAgdm9pZCBp
bml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKLQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQorI2VuZGlmCisKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBDYWxsVHlwZSwgQnl0ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEqKTsKICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewogICAgICAg
ICBZZXMsCiAgICAgICAgIE5vCiAgICAgfTsKIAorI2lmIEVOQUJMRShKSVQpCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRV
Uk47Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgU2NvcGVkTGFt
YmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKLSAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOworICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENh
bGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CiAgICAgc3Rh
dGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUik7CisKKyAgICB2b2lkIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAg
dm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
KTsKKyNlbmRpZgorCiAgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CiAKICAgICBib29sIGlz
RGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3VzZURhdGFJ
QykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIxNyw3ICsyMzEsNiBAQCBjbGFzcyBDYWxsTGlu
a0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAg
ICAgICBtX2RvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICB9CiAKLSAgICB2b2lkIGlu
aXRpYWxpemVEaXJlY3RDYWxsKCk7CiAKICAgICBib29sIGFsbG93U3R1YnMoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG93U3R1YnM7IH0KIApAQCAtMjM3LDcgKzI1MCw2IEBAIGNsYXNzIENhbGxMaW5r
SW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAg
dm9pZCBzZXRDb2RlQmxvY2soVk0mLCBKU0NlbGwqLCBGdW5jdGlvbkNvZGVCbG9jayopOwogICAg
IHZvaWQgY2xlYXJDb2RlQmxvY2soKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
KCk7Ci0gICAgdm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KTsKIAogICAgIHZvaWQgc2V0TGFzdFNlZW5DYWxsZWUoVk0mLCBjb25zdCBKU0Nl
bGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlKTsKICAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxs
ZWUoKTsKQEAgLTI0NywyMiArMjU5LDE4IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQ
YWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgdm9pZCBzZXRFeGVjdXRh
YmxlRHVyaW5nQ29tcGlsYXRpb24oRXhlY3V0YWJsZUJhc2UqKTsKICAgICBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSgpOwogICAgIAorI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXRTdHVi
KFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJik7CisjZW5kaWYKICAgICB2b2lkIGNs
ZWFyU3R1YigpOwogCiAgICAgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIoKSBjb25z
dAogICAgIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICByZXR1cm4gbV9zdHViLmdldCgpOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0U2xvd1N0dWIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIG5ld1Ns
b3dTdHViKQotICAgIHsKLSAgICAgICAgbV9zbG93U3R1YiA9IFdURk1vdmUobmV3U2xvd1N0dWIp
OwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJTbG93U3R1YigpCi0gICAgewotICAgICAgICBtX3Ns
b3dTdHViID0gbnVsbHB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlm
CiAgICAgfQogCiAgICAgYm9vbCBzZWVuT25jZSgpCkBAIC0zMzAsMTkgKzMzOCwxNyBAQCBjbGFz
cyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4gewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OwotICAgIH0KLSNlbmRpZgotCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXM7CiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXModW5zaWduZWQpOworICAgIHZvaWQgdXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXModW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgeworICAgICAg
ICBpZiAobV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKQorICAgICAgICAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTbG93UGF0aENvdW50KCkKICAgICB7CkBAIC0zNjQsMTAgKzM3MCwxMiBAQCBj
bGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5r
SW5mbz4gewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9z
bG93UGF0aENhbGxEZXN0aW5hdGlvbik7CiAgICAgfQogCisjaWYgRU5BQkxFKEpJVCkKICAgICBH
UFJSZWcgY2FsbGVlR1BSKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NhbGxlZUdQUjsKICAg
ICB9CisjZW5kaWYKIAogICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQoKQogICAgIHsKQEAgLTM4
Myw5ICszOTEsMTEgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRp
bmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNMaW5rZWQo
KSkgewotICAgICAgICAgICAgaWYgKHN0dWIoKSkKKyAgICAgICAgICAgIGlmIChzdHViKCkpIHsK
KyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgICAgIHN0dWIoKS0+Zm9yRWFjaERlcGVuZGVu
dENlbGwoZnVuY3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKKyNlbmRpZgorICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBmdW5jdG9yKG1fY2FsbGVlT3JDb2RlQmxvY2suZ2V0
KCkpOwogICAgICAgICAgICAgICAgIGlmIChpc0RpcmVjdCgpKQogICAgICAgICAgICAgICAgICAg
ICBmdW5jdG9yKG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGUuZ2V0KCkpOwpAQCAtMzk3LDI2
ICs0MDcsMzUgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAgIHZvaWQgdmlzaXRXZWFrKFZNJik7CiAKKyNpZiBF
TkFCTEUoSklUKQogICAgIHZvaWQgc2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSYpOwogCiAgICAgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1lU2h1
ZmZsZURhdGEoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZnJhbWVTaHVmZmxlRGF0YS5nZXQo
KTsKICAgICB9CisjZW5kaWYKIAogcHJpdmF0ZToKIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKIAorICAgIHVpbnQzMl90IG1fbWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmls
ZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9m
IHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVu
aW9uIFVuaW9uVHlwZSB7CiAgICAgICAgIFVuaW9uVHlwZSgpIAorI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgICAgICA6IGRhdGFJQyB7IG51bGxwdHIsIEludmFsaWRHUFJSZWcgfQorI2Vsc2UKKyAg
ICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciB9CisjZW5kaWYKICAgICAgICAgeyB9CiAgICAg
ICAgIHN0cnVjdCBEYXRhSUMgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IG1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb247CisjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgICAgIEdQUlJlZyBtX2NhbGxMaW5rSW5mb0dQUjsKKyNlbmRpZgogICAgICAg
ICB9IGRhdGFJQzsKIAogICAgICAgICBzdHJ1Y3QgewpAQCAtNDI5LDkgKzQ0OCwxMCBAQCBjbGFz
cyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4gewogCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xhc3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOworI2lm
IEVOQUJMRShKSVQpCiAgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0
dWI7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3Nsb3dTdHViOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gbV9mcmFtZVNodWZmbGVEYXRhOworI2VuZGlm
CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgYm9vbCBtX2hhc1NlZW5TaG91bGRS
ZXBhdGNoIDogMTsKICAgICBib29sIG1faGFzU2VlbkNsb3N1cmUgOiAxOwpAQCAtNDQxLDkgKzQ2
MSwxMCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogICAgIGJvb2wgbV9jbGVhcmVkQnlKZXR0aXNvbiA6IDE7CiAgICAg
dW5zaWduZWQgbV9jYWxsVHlwZSA6IDQ7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgbV91c2VE
YXRhSUMgOiAxOyAvLyBVc2VEYXRhSUMKKyNpZiBFTkFCTEUoSklUKQogICAgIEdQUlJlZyBtX2Nh
bGxlZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKKyNlbmRpZgogICAgIHVpbnQzMl90IG1fc2xvd1Bh
dGhDb3VudCB7IDAgfTsKLSAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9m
IGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0
ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5m
b0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCkBAIC00NTMsMTEgKzQ3NCw3
IEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pCiAKIHN0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CiAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBi
YXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgotICAg
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
RnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKIH07CiAKLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCmluZGV4IGY3YWZiMmIwZjI4ZmQ5ZTVmZmM1
YzM0YjZhM2E4NTZhZTM3MzAyZjUuLmYyZGRhMGVlZGFhYjk2NDRhMDNiZWI2ZTUzZmVhMTcyMjNh
MGNhZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRl
ICJMTEludENhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIApAQCAtNjMsMzQgKzYyLDcgQEAgQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiwgQ29kZUIKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICB9CiAjZW5k
aWYKLQotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICBPcGNvZGVJRCBvcCA9IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpOwotCi0gICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsK
LSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYWxsTGlua0lu
Zm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5t
X2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkubWV0
YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Ugb3BfdGFpbF9jYWxsOgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24t
PmFzPE9wVGFpbENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjoKLSAgICAgICAgY2Fs
bExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKS5tZXRhZGF0YShw
cm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBv
cF9pdGVyYXRvcl9uZXh0OgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZv
OwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxsTGlu
a1N0YXR1cygpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMo
Y2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZSgpKTsKKyAgICByZXR1cm4gQ2FsbExpbmtTdGF0
dXMoKTsKIH0KIAogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDc3Y2Fh
OGU1N2U5NGFkNzMyYTg3MDNiNzEwZmQ0ODBmNzE4MTNhZTYuLmNiMDE2MjVkNWY4ZDNmYmZhZGJj
NTQyOTVhODc1NDAxNTE2NGM0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCkBAIC00NDksMTQgKzQ0OSwxNyBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGluawogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEodGhpcyk7IFwKICAg
ICBuZXcgKCZtZXRhZGF0YSkgX19vcDo6TWV0YWRhdGEgeyBieXRlY29kZSB9OyBcCiAKLSNkZWZp
bmUgQ0FTRShfX29wKSBjYXNlIF9fb3A6Om9wY29kZUlECi0KLSNkZWZpbmUgTElOSyguLi4pIFwK
LSAgICBDQVNFKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSk6IHsgXAorI2RlZmluZSBMSU5L
X0lNUEwoLi4uKSBcCiAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoV1RGX0xBWllfRklSU1Qo
X19WQV9BUkdTX18pKSBcCiAgICAgICAgIFdURl9MQVpZX0hBU19SRVNUKF9fVkFfQVJHU19fKSh7
IFwKICAgICAgICAgICAgIFdURl9MQVpZX0ZPUl9FQUNIX1RFUk0oTElOS19GSUVMRCwgIFdURl9M
QVpZX1JFU1RfKF9fVkFfQVJHU19fKSkgXAogICAgICAgICB9KSBcCisKKyNkZWZpbmUgQ0FTRShf
X29wKSBjYXNlIF9fb3A6Om9wY29kZUlECisKKyNkZWZpbmUgTElOSyguLi4pIFwKKyAgICBDQVNF
KFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSk6IHsgXAorICAgICAgICBMSU5LX0lNUEwoX19W
QV9BUkdTX18pIFwKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKQEAgLTQ2NSwxMCArNDY4LDYg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBp
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29kZUNvc3QgKz0gb3Bjb2Rl
TGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAg
TElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGxWYXJh
cmdzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBw
cm9maWxlKQotICAgICAgICBMSU5LKE9wQ29uc3RydWN0VmFyYXJncywgcHJvZmlsZSkKICAgICAg
ICAgTElOSyhPcEdldEJ5VmFsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0UHJpdmF0ZU5h
bWUsIHByb2ZpbGUpCiAKQEAgLTQ5OCwxMSArNDk3LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmsKICAgICAgICAgTElOSyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSkKICAgICAgICAgTElO
SyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgcHJvZmlsZSkKIAotICAgICAgICBMSU5LKE9wQ2FsbCwg
cHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxDYWxsLCBwcm9maWxlKQotICAgICAgICBMSU5L
KE9wQ2FsbEV2YWwsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BDb25zdHJ1Y3QsIHByb2ZpbGUp
Ci0KICAgICAgICAgTElOSyhPcEluQnlWYWwpCiAgICAgICAgIExJTksoT3BQdXRCeVZhbCkKICAg
ICAgICAgTElOSyhPcFB1dEJ5VmFsRGlyZWN0KQpAQCAtNTI3LDEzICs1MjEsOTMgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJF
eGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElOSyhPcENhdGNoKQogICAgICAgICBMSU5LKE9w
UHJvZmlsZUNvbnRyb2xGbG93KQogCisgICAgICAgIGNhc2Ugb3BfY2FsbDogeworICAgICAgICAg
ICAgTElOS19JTVBMKE9wQ2FsbCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2Fs
bExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6IHsKKyAgICAgICAg
ICAgIExJTktfSU1QTChPcFRhaWxDYWxsLCBwcm9maWxlKQorI2lmIEVOQUJMRShKSVQpCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVK
U1IgeyBHUFJJbmZvOjpyZWdUMCB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDAgfTsKKyNlbmRpZgorICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEg
c2h1ZmZsZURhdGE7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0
ZWNvZGUubV9hcmdjOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG51
bVBhcmFtZXRlcnMoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2h1ZmZsZURh
dGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyNlbmRp
ZgorICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gYnl0ZWNvZGUubV9hcmd2IC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgICAgICAgICAgICAgVmFsdWVS
ZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2
LAorICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIH0K
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFs
dWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgRGF0YUZvcm1hdEpTKTsK
KyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUg
PSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5
bG9hZEdQUigpKTsKKyNlbmRpZgorICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwg
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCks
ICZzaHVmZmxlRGF0YSk7CisjZWxzZQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0lu
Zm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworI2VuZGlmCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAg
ICAgICBMSU5LX0lNUEwoT3BDYWxsRXZhbCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5
cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAg
ICAgICAgICAgIExJTktfSU1QTChPcENvbnN0cnVjdCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1l
dGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6
Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9v
cGVuOiB7Ci0gICAgICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JPcGVuKQor
ICAgICAgICAgICAgTElOS19JTVBMKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgbWV0YWRh
dGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6
IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BJdGVyYXRvck5leHQpCisgICAg
ICAgICAgICBMSU5LX0lNUEwoT3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBtZXRhZGF0YS5t
X2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBl
Rm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7Cisg
ICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAgICAg
IG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWlsX2Nh
bGxfdmFyYXJnczogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxWYXJhcmdzLCBw
cm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURh
dGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9u
LmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czogeworICAgICAgICAgICAg
TElOS19JTVBMKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQorICAgICAgICAg
ICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0
cnVjdF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDb25zdHJ1Y3RWYXJhcmdz
LCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6
ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0
aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtNzgzLDIxICs4NTcsMTggQEAgdm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFz
ZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKICAgICAgICAgaml0
RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2Nv
bnN0YW50UG9vbC5zaXplKCkpOwogICAgICAgICBqaXREYXRhLm1fc3R1YkluZm9zID0gRml4ZWRW
ZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+KGppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3Muc2l6
ZSgpKTsKLSAgICAgICAgaml0RGF0YS5tX2NhbGxMaW5rSW5mb3MgPSBGaXhlZFZlY3RvcjxDYWxs
TGlua0luZm8+KGppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIHVubGlua2VkQ2FsbExpbmtJbmZvIDogaml0Q29kZS0+bV91bmxpbmtlZENhbGxzKSB7
CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGdldENhbGxMaW5rSW5m
b0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCB1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8pOworICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKHsgfSwgdW5saW5rZWRDYWxsTGlua0luZm8uZG9u
ZUxvY2F0aW9uKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKICAgICAgICAgICAgIHN3aXRj
aCAoZW50cnkudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6R2xvYmFsT2JqZWN0OgogICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVu
dHJ5LnBvaW50ZXIoKSk7Ci0gICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVu
bGlua2VkQ2FsbExpbmtJbmZvID0gaml0Q29kZS0+bV91bmxpbmtlZENhbGxzW2luZGV4XTsKLSAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxs
TGlua0luZm9zW2luZGV4XTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6
ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OnJlZ1QyKTsKLSAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ld
ID0gJmNhbGxMaW5rSW5mbzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bzogewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oZW50cnkucG9pbnRlcigpKTsKICAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0gaml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZv
c1tpbmRleF07CkBAIC0xNTY3LDE1ICsxNjM4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
TExJbnRJbmxpbmVDYWNoZXMoKQogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQot
ICAgIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhbJl0oTExJbnRDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykgewotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzTGlua2VkKCkgJiYgIXZtLmhl
YXAuaXNNYXJrZWQoY2FsbExpbmtJbmZvLmNhbGxlZSgpKSkgewotICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ2xlYXJpbmcgTExJbnQgY2FsbCBmcm9tICIs
ICp0aGlzKTsKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby51bmxpbmsoKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlKCkgJiYgIXZtLmhlYXAuaXNN
YXJrZWQoY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlKCkpKQotICAgICAgICAgICAgY2FsbExp
bmtJbmZvLmNsZWFyTGFzdFNlZW5DYWxsZWUoKTsKLSAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShK
SVQpCkBAIC0xNTkzLDggKzE2NTUsNiBAQCBDb2RlQmxvY2s6OkpJVERhdGEmIENvZGVCbG9jazo6
ZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpCiB7CiAgICAgaWYgKGF1dG8qIGppdERhdGEg
PSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBq
aXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8udmlzaXRX
ZWFrKHZtKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHVi
SW5mb3MpIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgbG9ja2VyKE5vTG9j
a2luZ05lY2Vzc2FyeSk7CiAgICAgICAgICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2Vz
KGxvY2tlciwgdGhpcyk7CkBAIC0xNjEyLDE5ICsxNjcyLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCkKICAgICAgICAgfQogICAgIH0KICNlbmRpZgotCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSB7Ci0gICAgICAgIC8vIFZlcmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNp
bmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KLSAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQo
KSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKLSAgICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLT5pc0xpbmtlZCgpKTsKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVu
ZGVudENlbGwoW10gKEpTQ2VsbCopIHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICB9Ci0jZW5kaWYKIH0KICNl
bmRpZgogCkBAIC0xNjM3LDYgKzE2ODQsMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KFZNJiB2bSkKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAorICAg
IGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKSB7CisgICAgICAgIGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0pOworICAgIH0p
OworCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCiAgICAgICAgIGZpbmFs
aXplSklUSW5saW5lQ2FjaGVzKCk7CkBAIC0xNzAwLDEyICsxNzUxLDEzIEBAIHZvaWQgQ29kZUJs
b2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHZvaWQgQ29kZUJsb2NrOjpnZXRJQ1N0YXR1c01h
cChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBJQ1N0YXR1c01hcCYgcmVzdWx0KQogewogI2lm
IEVOQUJMRShKSVQpCisgICAgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhbJl0o
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlu
a0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJ
bmZvID0gJmNhbGxMaW5rSW5mbzsKKyAgICB9KTsKICAgICBpZiAoSklUQ29kZTo6aXNKSVQoaml0
VHlwZSgpKSkgewogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
ewogICAgICAgICAgICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9z
KQogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8uY29kZU9yaWdpbiwgSUNTdGF0
dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1
cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNhbGxMaW5rSW5mbzsKICAgICAg
ICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKQEAgLTE3NjAsMTUgKzE4MTIsMjIgQEAgU3RydWN0dXJlU3R1
YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENhbGxM
aW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKK0NhbGxMaW5rSW5m
byogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXggaW5kZXgpCiB7Ci0gICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRh
LmdldCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9j
YWxsTGlua0luZm9zKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KSA9PSBDb2RlT3JpZ2luKGluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gJmNhbGxMaW5r
SW5mbzsKLSAgICAgICAgfQorICAgIGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCku
YXQoaW5kZXgpOworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKKyNkZWZp
bmUgQ0FTRShPcCkgXAorICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCisgICAgICAgIHJldHVybiAm
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJbmZvOyBcCisg
ICAgICAgIGJyZWFrOworCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5L
X0lORk8oQ0FTRSkKKworI3VuZGVmIENBU0UKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
ICAgICB9CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24g
PSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjEzNSwxMyArMjE5NCw2IEBAIHZvaWQgQ29k
ZUJsb2NrOjpzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTaHJpbmtNb2Rl
IHNocmlua01vZGUpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OmxpbmtJ
bmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWlu
ZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9p
bmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCiB2b2lkIENvZGVCbG9jazo6bGlua0lu
Y29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGlj
Q2FsbE5vZGUqIGluY29taW5nKQogewogICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFt
ZSk7CkBAIC0yMTUyLDEwICsyMjA0LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQ
b2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDCiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwo
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKK3sKKyAgICBu
b3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOworICAgIG1faW5jb21pbmdDYWxscy5wdXNo
KGluY29taW5nKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQog
ewotICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdM
TEludENhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51
bmxpbmsoKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWlu
Z0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZt
KCkpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgSklURGF0YSogaml0RGF0YSA9IG51bGxwdHI7CiAg
ICAgewpAQCAtMjE2MywyMCArMjIyMSwxMiBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21p
bmdDYWxscygpCiAgICAgICAgIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCk7CiAgICAgfQogICAg
IGlmIChqaXREYXRhKSB7Ci0gICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29taW5nQ2FsbHMu
YmVnaW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAgICAgICAgICBq
aXREYXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgICAgICB3
aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBqaXRE
YXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKICAgICAgICAgICAgIGppdERh
dGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgpKTsKICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNv
bWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qIGluY29t
aW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgbV9pbmNv
bWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIENvZGVCbG9jayogQ29kZUJsb2Nr
OjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5uZXdS
ZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yMzI5LDEz
ICsyMzc5LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25S
ZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZtLmhlYXAuY3Vy
cmVudFRocmVhZElzRG9pbmdHQ1dvcmsoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1
dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKSVQpCiAgICAgewogICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGlmIChKSVRE
YXRhKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAgfQorICAgICAg
ICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykgeworICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeUpldHRp
c29uKCk7CisgICAgICAgIH0pOworCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICAgICAgREZHOjpD
b21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjM0NCw3
ICsyMzkzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJl
YXNvbiByZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSBtb2QKICAgICAgICAgfQogI2VuZGlmCiAg
ICAgfQotI2VuZGlmCiAKICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMikuCiAgICAgb3duZXJF
eGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKHZtLCBhbHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBz
cGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yODQ3LDE5ICsyODk1LDEzIEBAIEFycmF5UHJvZmls
ZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Qnl0ZWNvZGVJbmRlCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0
KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsK
LSNkZWZpbmUgQ0FTRTEoT3ApIFwKKyNkZWZpbmUgQ0FTRShPcCkgXAogICAgIGNhc2UgT3A6Om9w
Y29kZUlEOiBcCiAgICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJyYXlQcm9maWxlOwogCi0jZGVmaW5lIENBU0UyKE9wKSBcCi0gICAgY2FzZSBP
cDo6b3Bjb2RlSUQ6IFwKLSAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0
YWRhdGEodGhpcykubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGU7Ci0KLSAgICBGT1JfRUFD
SF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENBU0UxKQotICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENBU0UyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRI
X0FSUkFZX1BST0ZJTEUoQ0FTRSkKIAotI3VuZGVmIENBU0UxCi0jdW5kZWYgQ0FTRTIKKyN1bmRl
ZiBDQVNFCiAKICAgICBjYXNlIE9wR2V0QnlJZDo6b3Bjb2RlSUQ6IHsKICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CkBAIC0zMDI5LDE3ICszMDcx
LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlCiAgICAgICAgIH0KICAgICB9KTsKIAotI2Rl
ZmluZSBWSVNJVDEoX19vcCkgXAorI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgbV9tZXRhZGF0
YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEu
bV9hcnJheVByb2ZpbGUpOyB9KTsKIAotI2RlZmluZSBWSVNJVDIoX19vcCkgXAotICAgIG1fbWV0
YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFk
YXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlKTsgfSk7Ci0KLSAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUMSkKLSAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJVDIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
QVJSQVlfUFJPRklMRShWSVNJVCkKIAotI3VuZGVmIFZJU0lUMQotI3VuZGVmIFZJU0lUMgorI3Vu
ZGVmIFZJU0lUCiAKICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JOZXh0PihbJl0g
KGF1dG8mIG1ldGFkYXRhKSB7CiAgICAgICAgIHByb2Nlc3MobWV0YWRhdGEubV9pdGVyYWJsZVBy
b2ZpbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4
IDY0ZjlmNWFiY2ZlMmFlNzA1ZDFkYTY1YWE5ZjgzMTk3Yjk2YzZkMzEuLmI3YWVhMjY3N2Y1ZTk0
OTA4YWIzNTVmOTZiMGQyM2MzNzgyNDIwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgotI2lu
Y2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaCIKICNpbmNsdWRlICJNZXRhZGF0YVRhYmxlLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUuaCIKQEAgLTI2MSw4ICsyNjAsNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKIAogICAgICAgICBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7
Ci0gICAgICAgIEZpeGVkVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwotICAg
ICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtl
ZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3Jw
aGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKICAgICAgICAgYm9vbCBt
X2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9OwogICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CkBAIC0yOTEsNyArMjg4LDcgQEAgY2xhc3Mg
Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rp
b24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2Fz
ZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlv
dSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAgICAgLy8gbG9va2luZyBmb3IgYSBD
YWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAg
IENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUlu
ZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgY29u
c3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCkBAIC0zMDksMTQgKzMwNiwxMSBAQCBjbGFz
cyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAg
ICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0KLSNpZiBFTkFCTEUoSklUKQogICAgIHZv
aWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8q
KTsKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxs
KENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCi0gICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2Fs
bGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7Ci0KICAgICBjb25zdCBJbnN0cnVjdGlvbiog
b3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpOwogICAgIGludCBvdXRP
ZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQogICAgIHsK
QEAgLTQ1Myw3ICs0NDcsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29u
c3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0
IEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hM
TEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKGNvbnN0IEZ1
bmN0b3ImKTsKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYmluYXJ5QXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogdW5h
cnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwpAQCAtOTU5LDcg
Kzk1Myw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIFZNKiBtX3Zt
OwogCiAgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyIHsgbnVsbHB0ciB9
OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CisgICAg
U2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENh
bGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFw
IG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRD
b2RlOwogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0lubGluZXMuaAppbmRleCAxZDU5NGFiODM1Mjg5N2VjOGE3NDVlYTI0OTNm
OGQyZGEwMThiOTYyLi45MmRhOTlhMGJhMmFjYzFmY2RiNmE5NzM1ZmNkZGUyM2VmYzkzM2Q4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVz
LmgKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJiBmdW5jKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgotdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBG
dW5jdG9yJiBmdW5jKQordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxs
TGlua0luZm8oY29uc3QgRnVuY3RvciYgZnVuYykKIHsKICAgICBpZiAobV9tZXRhZGF0YSkgewog
I2RlZmluZSBWSVNJVChfX29wKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MTEludENhbGxMaW5rSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
MDU4ZmZjZDkxN2RkMmM1MDE2MmUxMzU1YjNkNThiMThlNmEwNzI2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MTEludENhbGxMaW5rSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiSlNDUHRyVGFnLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2luY2x1ZGUgPHd0Zi9TZW50
aW5lbExpbmtlZExpc3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBJbnN0cnVjdGlv
bjsKLQotY2xhc3MgTExJbnRDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPExMSW50Q2FsbExpbmtJbmZvPiB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHVubGlu
a2VkQml0ID0gMHgxOwotCi0gICAgTExJbnRDYWxsTGlua0luZm8oKSA9IGRlZmF1bHQ7Ci0gICAg
Ci0gICAgfkxMSW50Q2FsbExpbmtJbmZvKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgp
KQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNMaW5rZWQo
KSBjb25zdCB7IHJldHVybiAhKG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYg
dW5saW5rZWRCaXQpOyB9Ci0gICAgCi0KLSAgICB2b2lkIGxpbmsoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0cikKLSAgICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAg
cmVtb3ZlKCk7Ci0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKTsKLSAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIob3duZXIsIGNhbGxlZSk7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQgPSBjb2Rl
UHRyOwotICAgIH0KLQotICAgIHZvaWQgdW5saW5rKCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2Ug
bGluayBpbnZhbGlkYXRlZC4gSXQgd29ya3MgYmVjYXVzZSBMTEludCB0ZXN0cyB0aGUgZ2l2ZW4g
Y2FsbGVlIHdpdGggdGhpcyBwb2ludGVyLiBCdXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMgbGFzdFNl
ZW5DYWxsZWUhCi0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHw9
IHVubGlua2VkQml0OwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAg
ICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIWlzTGlua2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JM
YXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0KTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogbGFzdFNl
ZW5DYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09i
amVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYgfnVubGlua2VkQml0
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKQotICAgIHsKLSAgICAg
ICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1bmxpbmtlZEJpdDsKLSAg
ICB9Ci0KLSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTElu
dENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludHB0
cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZVRh
cmdldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oCmluZGV4IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFhYzgzOWJk
MzYuLjFjYmM2NmY4NDk5NTQ5OTdlZjdjNTBkNDkzODQzMDJmMzVjNjI5ZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTEyNiwxMSArMTI2LDE5IEBAIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6Omdl
dE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNybyhPcEdl
dFByaXZhdGVOYW1lKSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJP
RklMRShtYWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJ
TktfSU5GTyhtYWNybykgXAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9wVGFpbENh
bGwpIFwKKyAgICBtYWNybyhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwK
KyAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBc
CiAgICAgbWFjcm8oT3BDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxWYXJhcmdz
KSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBtYWNybyhP
cENvbnN0cnVjdFZhcmFyZ3MpIFwKKworI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJB
WV9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9w
SW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKQEAgLTEzOSw2ICsxNDcsNyBAQCBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RG
OjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBc
CiAgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRv
ckhhc093blByb3BlcnR5KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9M
SU5LX0lORk8obWFjcm8pIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9B
TExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCkBAIC0x
NDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhP
cGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAjZGVmaW5lIEZPUl9FQUNI
X09QQ09ERV9XSVRIX09CSkVDVF9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNy
byhPcE5ld09iamVjdCkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NB
TExfTElOS19JTkZPKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BDYWxsKSBcCi0gICAgbWFjcm8oT3BU
YWlsQ2FsbCkgXAotICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBtYWNybyhPcENvbnN0cnVj
dCkgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck5l
eHQpIFwKLQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShtYWNybykgXAogICAgIG1hY3JvKE9wQWRkKSBcCiAgICAgbWFjcm8oT3BNdWwpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDljMmVk
N2Q0OGU1YmEyNTZhMzM0NGRmMTY2ZGNhZmI3NWM2MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guY3BwCkBAIC0wLDAgKzEsMjAzNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisKKyNpbmNsdWRlICJCaW5h
cnlTd2l0Y2guaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisj
aW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgi
CisjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiRlRM
VGh1bmtzLmgiCisjaW5jbHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGdW5jdGlv
bkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1
ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIK
KyNpbmNsdWRlICJJQ1N0YXRzLmgiCisjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVk
ZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlLmgiCisjaW5jbHVkZSAiSklULmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9k
dWxlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFj
ZUFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUg
IlNjb3BlZEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURh
dGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVy
LmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlG
dW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz4gY29kZVJlZikKK3sKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRp
b24oY29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7Cit9
CisKKyNpZiBFTkFCTEUoSklUKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorewor
ICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJh
dG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Cit9CisjZW5kaWYKKworc3Rh
dGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
K3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsK
KyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworfQor
CitzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQoreworI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAvLyBFYWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNo
YXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0
aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVyLgorICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJB
c3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjYWxsZWUp
OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorfQorCit2b2lkIGxpbmtNb25vbW9ycGhp
Y0NhbGwoCisgICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAorICAgIEpTT2JqZWN0KiBj
YWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQorewor
ICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxsZXIgbXVz
dCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJv
bSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxl
ckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+
IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25l
ciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/
IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxl
ckNvZGVCbG9jazsKKyAgICBBU1NFUlQob3duZXIpOworCisgICAgQVNTRVJUKCFjYWxsTGlua0lu
Zm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZt
LCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5D
YWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOworCisgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJs
eUZvcihjYWxsZXJDb2RlQmxvY2spKQorICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4g
IiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdp
bigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50
IGF0ICIsIGNvZGVQdHIsICJcbiIpOworCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAg
ICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExp
bmtJbmZvKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFs
aXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygp
KSB7CisgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKK30KKworc3RhdGljIHZv
aWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgaWYg
KGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgY2Fs
bExpbmtJbmZvLmNsZWFyQ29kZUJsb2NrKCk7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNs
ZWFyZWRCeUpldHRpc29uKCkpCisgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURp
cmVjdENhbGwoKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY2FsbExpbmtJ
bmZvLmNsZWFyZWRCeUpldHRpc29uKCkpIHsKKyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZt
LCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOworCisgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZv
LnN0dWIoKSkKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1Yigp
OworICAgICAgICB9CisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlz
IGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNl
ZCBjYWNoZXMuCisgICAgfQorICAgIGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKKyAgICBjYWxs
TGlua0luZm8uY2xlYXJTdHViKCk7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQor
ICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Cit9CisKK3ZvaWQgdW5saW5rQ2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQoreworICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9p
bnRlcigmY2FsbExpbmtJbmZvKSk7CisgICAgCisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJ
bmZvLCB2bS5nZXRDVElMaW5rQ2FsbCgpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigp
KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUND
b2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2Fs
bGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoIWNhbGxlZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWND
YXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgY2FsbGVlKSkKKyAgICAgICAgcmV0dXJuIHdh
c21GdW5jdGlvbi0+anNDYWxsRW50cnlwb2ludCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dm0pOworICAgIFVOVVNFRF9QQVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsK
KyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYgRU5BQkxFKEpJVCkKKworc3Rh
dGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRh
dGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKK3sKKyAgICBKU0Nf
UkVUVVJOX1JFVEFHR0VEX09QRVJBVElPTl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9uKTsKK30K
Kworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdDYWxsVGFyZ2V0V2l0
aFZhbGlkYXRpb24oQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsKQorewor
ICAgIEpTQ19SRVRVUk5fUkVUQUdHRURfQ0FMTF9UQVJHRVRfV0lUSF9WQUxJREFUSU9OKGNhbGwp
OworfQorCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxs
VGFyZ2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJldHVybiByZXRh
Z09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7CisgICAg
Q29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93
UGF0aENhbGxMb2NhdGlvbjsKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7CisgICAgICAgIEZ1bmN0aW9uUHRyPEpJ
VFRodW5rUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklU
VGh1bmtQdHJUYWc+KGNhbGwpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1
bmtQdHJUYWc+IHRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICAgICAgcmV0dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52
bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQo
KSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKyAgICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRp
b24oY2FsbCk7Cit9CisKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisjaWYgRU5BQkxF
KEZUTF9KSVQpCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJ
VCkgeworICAgICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgICAgIEZUTDo6VGh1
bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1bmtzOworICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVu
a1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5r
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRh
cmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkg
a2V5ID0gdGh1bmtzLmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOworICAg
ICAgICBrZXkgPSBrZXkud2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQ
dHJUYWc+KHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgIFVOVVNF
RF9QQVJBTShjb2RlQmxvY2spOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxP
cGVyYXRpb25QdHJUYWc+KCkpOworfQorCitzdGF0aWMgdm9pZCByZXBhdGNoU2xvd1BhdGhDYWxs
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisgICAgaWYgKGNv
ZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgc3R1YkluZm8ubV9zbG93T3BlcmF0aW9u
ID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb24sIG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30K
KworZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CisgICAgR2l2ZVVwT25DYWNoZSwKKyAgICBSZXRy
eUNhY2hlTGF0ZXIsCisgICAgQXR0ZW1wdFRvQ2FjaGUKK307CisKK3N0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKKworICAgIFR5cGVJbmZvIHR5
cGVJbmZvID0gc3RydWN0dXJlLT50eXBlSW5mbygpOworICAgIGlmICh0eXBlSW5mby5wcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAg
ICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSkKKyAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgICAgICAvLyBGbGF0dGVuaW5nIGNvdWxkIGhhdmUgY2hhbmdl
ZCB0aGUgb2Zmc2V0LCBzbyByZXR1cm4gZWFybHkgZm9yIGFub3RoZXIgdHJ5LgorICAgICAgICBh
c09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKworICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKK30KKworc3RhdGljIGJvb2wgZm9yY2VJ
Q0ZhaWx1cmUoSlNHbG9iYWxPYmplY3QqKQoreworICAgIHJldHVybiBPcHRpb25zOjpmb3JjZUlD
RmFpbHVyZSgpOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGZpcmVXYXRjaHBvaW50
c0FuZENsZWFyU3R1YklmTmVlZGVkKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCYgcmVzdWx0KQor
eworICAgIGlmIChyZXN1bHQuc2hvdWxkUmVzZXRTdHViQW5kRmlyZVdhdGNocG9pbnRzKCkpIHsK
KyAgICAgICAgcmVzdWx0LmZpcmVXYXRjaHBvaW50cyh2bSk7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywg
dm0pOworICAgICAgICAgICAgc3R1YkluZm8ucmVzZXQobG9ja2VyLCBjb2RlQmxvY2spOworICAg
ICAgICB9CisgICAgfQorfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBh
cHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAg
IHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1
cm4gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0
aFRoaXM6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsK
KyAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKKyAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5
S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwor
ICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1l
QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZE9wdGltaXpl
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oR2V0
QnlLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeUtpbmQ6
OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkOworICAgIGNhc2UgR2V0QnlL
aW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXM7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25UcnlHZXRCeUlkOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uR2V0QnlJZERpcmVjdDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWM7CisgICAgY2FzZSBHZXRC
eUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2lu
ZCBraW5kKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsK
KworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IENhY2hl
IHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICAgICAgaWYgKCFiYXNlVmFsdWUu
aXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgSlND
ZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgY29uc3QgYm9vbCBp
c1ByaXZhdGUgPSBraW5kID09IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUgfHwga2luZCA9PSBHZXRC
eUtpbmQ6OlByaXZhdGVOYW1lQnlJZDsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3
Q2FzZTsKKworICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCkgeworICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAg
ICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKKyAgICAgICAg
ICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVC
bG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgeworCisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJh
c2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxl
bmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhi
YXNlQ2VsbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0g
Q2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6Omlz
Q2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemlu
Z0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
aW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nh
c3Q8RGlyZWN0QXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgeworICAgICAgICAgICAgICAgIC8v
IElmIHRoZXJlIHdlcmUgb3ZlcnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5v
cm1hbCBwcm9wZXJ0eSBsb2FkISBHdWFyZGluZworICAgICAgICAgICAgICAgIC8vIHRoaXMgd2l0
aCBzdWNoIGEgY2hlY2sgZW5hYmxlcyB1cyB0byBhZGQgYW4gSUMgY2FzZSBmb3IgdGhhdCBsb2Fk
IGlmIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGlu
Z3MoKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgsIHByb3BlcnR5
TmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1lbnRz
ID0ganNEeW5hbWljQ2FzdDxTY29wZWRBcmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7CisgICAg
ICAgICAgICAgICAgLy8gRGl0dG8uCisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92
ZXJyb2RlVGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRzTGVuZ3Ro
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSAmJiBiYXNlQ2VsbC0+aW5oZXJpdHM8SlNNb2R1bGVO
YW1lc3BhY2VPYmplY3Q+KHZtKSAmJiAhc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIG1vZHVsZU5hbWVzcGFjZVNsb3QgPSBzbG90Lm1vZHVsZU5hbWVzcGFjZVNsb3QoKSkK
KyAgICAgICAgICAgICAgICBuZXdDYXNlID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0Kj4oYmFzZUNlbGwpLCBtb2R1bGVOYW1lc3BhY2VTbG90LT5lbnZpcm9ubWVudCwgU2Nv
cGVPZmZzZXQobW9kdWxlTmFtZXNwYWNlU2xvdC0+c2NvcGVPZmZzZXQpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKCFuZXdDYXNlKSB7CisgICAgICAgICAgICBpZiAoIXNsb3Qu
aXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNl
bGwtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94
eSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndh
cmRpbmdQcm94eVR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBiYXNl
VmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAg
ICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICAgICAgbG9hZFRh
cmdldEZyb21Qcm94eSA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElubGlu
ZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKKyAgICAg
ICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGFjdGlvbjsKKworICAgICAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAg
ICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAgICAgICAg
JiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQorICAgICAgICAgICAgICAgICYmICFzbG90
LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJv
bVByb3h5KSB7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChn
ZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVy
dHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5pbml0R2V0QnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNz
Q2hhaW47CisKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNl
dCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAgICAgICAg
IGlmIChzbG90LmlzQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewor
ICAgICAgICAgICAgICAgIC8vIFRvIGNhY2hlIHNlbGYgY3VzdG9tcywgd2UgbXVzdCBkaXNhbGxv
dyBkaWN0aW9uYXJpZXMgYmVjYXVzZSB3ZQorICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUg
aW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlCisgICAg
ICAgICAgICAgICAgLy8gY29uc3RhbnQgZnVuY3Rpb24gcG9pbnRlci4KKworICAgICAgICAgICAg
ICAgIGlmICghcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIHNsb3Quc2xvdEJh
c2UoKSwgc2xvdC5zbG90QmFzZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQo
KSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZUNl
bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsgLy8gV2Ug
bWF5IGhhdmUgY2hhbmdlZCBwcm9wZXJ0eSBvZmZzZXRzLgorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkuZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAv
LyBJZiBhIGtpbmQgaXMgR2V0QnlLaW5kOjpCeUlkRGlyZWN0IG9yIEdldEJ5S2luZDo6UHJpdmF0
ZU5hbWUsIHdlIGRvIG5vdCBuZWVkIHRvIGludmVzdGlnYXRlIHByb3RvdHlwZSBjaGFpbnMgZnVy
dGhlci4KKyAgICAgICAgICAgICAgICAvLyBDYWNoZWFiaWxpdHkganVzdCBkZXBlbmRzIG9uIHRo
ZSBoZWFkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBHZXRCeUtpbmQ6
OkJ5SWREaXJlY3QgJiYgIWlzUHJpdmF0ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNh
Y2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxs
LCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gUHJvcGVydHkgb2Zmc2V0cyBtYXkgaGF2ZSBjaGFuZ2VkIGR1ZSB0byBm
bGF0dGVuaW5nLiBXZSdsbCBjYWNoZSBsYXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46
OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNz
Q2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5
TmFtZS51aWQoKSkgPT0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBpbnN0ZWFkIGZvciBmYXN0ZXIgYWNjZXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBw
cm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBNYXliZSB0aGlzIGBpZmAgc2hvdWxkIGJlIGluc2lkZSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eUJsYWguCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjE1CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwg
Y29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlI
aXRDdXN0b20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSwgc2xvdC5hdHRyaWJ1dGVzKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGdldHRlciA9
IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAg
ICAgICAgICAgICAgIGdldHRlciA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBzbG90
LmdldHRlclNldHRlcigpLT5nZXR0ZXIoKSk7CisKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOworICAgICAgICAgICAgaWYgKHNs
b3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LmRvbUF0dHJpYnV0ZSgpKQorICAgICAgICAg
ICAgICAgIGRvbUF0dHJpYnV0ZSA9IHNsb3QuZG9tQXR0cmlidXRlKCk7CisKKyAgICAgICAgICAg
IGlmIChraW5kID09IEdldEJ5S2luZDo6VHJ5QnlJZCkgeworICAgICAgICAgICAgICAgIEFjY2Vz
c0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2Fk
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBB
Y2Nlc3NDYXNlOjpHZXRHZXR0ZXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICAgICAg
bmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB0eXBl
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJn
ZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vz
c0NoYWluKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYm
IGdldHRlciAmJiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0
dGVyKHN0dWJJbmZvLCBnZXR0ZXIsIHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBn
ZXR0ZXIsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmIChpc1ByaXZhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXNsb3QuaXNVbnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3RleHByIGJvb2wgaXNQcm94eSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNs
b3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkxvYWQsIHByb3BlcnR5TmFtZSwg
b2Zmc2V0LCBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQs
IGlzUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0No
YWluKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUo
KSB8fCBzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJv
eHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNVbnNldCgpID8g
QWNjZXNzQ2FzZTo6TWlzcyA6IEFjY2Vzc0Nhc2U6OkxvYWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRU
YXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFj
Y2Vzc0NoYWluKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICAgICAgICAgICAgICBpZiAo
c2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9
IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5h
dHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZUdldHRlcjsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoa2luZCA9PSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpcyAmJiB0eXBlID09IEFjY2Vzc0Nhc2U6
OkN1c3RvbUFjY2Vzc29yR2V0dGVyICYmIGRvbUF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJl
LCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCisgICAgICAgICAgICAgICAgICAg
ICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gRnVu
Y3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KHNsb3QuY3VzdG9tR2V0dGVyKCkpIDogbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAm
JiBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSwgV1RGTW92ZShwcm90b3R5
cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNl
VmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVy
dHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOworCisgICAgICAg
IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2Fz
ZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNs
YXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICAg
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlL
aW5kOjpUcnlCeUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Cisg
ICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICAgICAg
ICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5S2lu
ZDo6QnlWYWw6CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAg
ICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
KworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDog
UmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCit7CisgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0
cnlDYWNoZUdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZXRCeUZ1
bmN0aW9uKGtpbmQpKTsKK30KKworCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVB
cnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5kZXguaXNJbnQzMigpKQorICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9i
YWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0Nl
bGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAg
ICAgIGlmIChiYXNlLT50eXBlKCkgPT0gRGlyZWN0QXJndW1lbnRzVHlwZSkKKyAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRGlyZWN0QXJndW1lbnRzTG9hZDsKKyAg
ICAgICAgZWxzZSBpZiAoYmFzZS0+dHlwZSgpID09IFNjb3BlZEFyZ3VtZW50c1R5cGUpCisgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFNjb3BlZEFyZ3VtZW50c0xv
YWQ7CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTdHJpbmdUeXBlKQorICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOworICAgICAg
ICBlbHNlIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5
cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4
TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJ
bnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVV
aW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5VWludDMyTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJy
YXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmln
SW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2Ut
PmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2gg
KGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyTG9hZDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVMb2FkOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3Vz
TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9y
YWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRBcnJheVN0b3JhZ2VMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nh
c2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBu
dWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVs
bHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAg
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50
c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0
cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpT
VmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAodHJ5
Q2FjaGVBcnJheUdldEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwg
c3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKK30KKworc3Rh
dGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlG
dW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQs
IFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0
cmljdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1
dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0
TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVs
ZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWM7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYzsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGlt
aXppbmdQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5k
IHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgewor
ICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlW
YWw6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBB
U1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlL
aW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgp
KTsKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNG
YWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgCisgICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIXNsb3QuaXNDYWNo
ZWFibGVQdXQoKSAmJiAhc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVh
YmxlU2V0dGVyKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byBkbyBzb21ldGhpbmcgc21hcnRlciBoZXJlLi4u
CisgICAgICAgIGlmIChpc0NvcHlPbldyaXRlKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkp
KQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIC8vIFdlIGNhbid0
IGVuZCB1cCBzdG9yaW5nIHRvIGEgQ29XIG9uIHRoZSBwcm90b3R5cGUgc2luY2UgaXQgc2hvdWxk
bid0IG93biBwcm9wZXJ0aWVzLgorICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc2xvdC5i
YXNlKCktPmluZGV4aW5nTW9kZSgpKSk7CisKKyAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworCisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
CisKKyAgICAgICAgYm9vbCBpc1Byb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+
dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlQ2Vs
bCA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJh
c2VWYWx1ZSA9IGJhc2VDZWxsOworICAgICAgICAgICAgaXNQcm94eSA9IHRydWU7CisKKyAgICAg
ICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBT
ZXR0ZXJzIG9uIEpTUHJveHkuIFdlIGRvbid0CisgICAgICAgICAgICAvLyBjYWNoZSB0cmFuc2l0
aW9ucyBiZWNhdXNlIGdsb2JhbCBvYmplY3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3Ry
dWN0dXJlCisgICAgICAgICAgICAvLyBpbiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgICAgIGJvb2wgaXNDYWNoZWFibGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxlUHV0KCkg
JiYgc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KQorICAg
ICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKQorICAgICAgICAgICAgICAg
IHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKTsKKyAgICAgICAgICAgIGlmICghaXNDYWNoZWFi
bGVQcm94eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc1Byb3h5ICYmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZFNldCB8fCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERl
ZmluZSkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBSZWZQ
dHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFz
ZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgeworICAgICAgICAgICAgaWYgKHNsb3Qu
dHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAgICAgICAg
ICAgICAgIC8vIFRoaXMgYXNzZXJ0IGhlbHBzIGNhdGNoIGJ1Z3MgaWYgd2UgYWNjaWRlbnRhbGx5
IGZvcmdldCB0byBkaXNhYmxlIGNhY2hpbmcKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHRy
YW5zaXRpb24gdGhlbiBzdG9yZSB0byBhbiBleGlzdGluZyBwcm9wZXJ0eS4gVGhpcyBpcyBjb21t
b24gYW1vbmcKKyAgICAgICAgICAgICAgICAvLyBwYXRocyB0aGF0IHJlaWZ5IGxhenkgcHJvcGVy
dGllcy4gSWYgd2UgcmVpZnkgYSBsYXp5IHByb3BlcnR5IGFuZCBmb3JnZXQKKyAgICAgICAgICAg
ICAgICAvLyB0byBkaXNhYmxlIGNhY2hpbmcsIHdlIG1heSBjb21lIGRvd24gdGhpcyBwYXRoLiBU
aGUgUmVwbGFjZSBJQyBkb2VzIG5vdAorICAgICAgICAgICAgICAgIC8vIGtub3cgaG93IHRvIG1v
ZGVsIHRoZXNlIHR5cGVzIG9mIHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAob3IgYW55IHN0cnVjdHVy
ZQorICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gZm9yIHRoYXQgbWF0dGVyKS4KKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2
bSkgPT0gb2xkU3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlk
Q2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNo
ZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkg
eworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
Y29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQs
IHB1dEtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
UmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6UmVwbGFjZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIGlz
UHJveHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWlz
UHJveHkpOworICAgICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0
eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKKworICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJl
LT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvbGQgc3RydWN0dXJlIGlzIGRpY3Rpb25hcnks
IGl0IG1lYW5zIHRoYXQgdGhpcyBpcyBvbmUtb24tb25lIGJldHdlZW4gYW4gb2JqZWN0IGFuZCBh
IHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIE5ld1Byb3BlcnR5IG9w
ZXJhdGlvbiwgZ2VuZXJhdGluZyBJQyBmb3IgdGhpcyBkb2VzIG5vdCBvZmZlciBhbnkgYmVuZWZp
dCBiZWNhdXNlIHRoaXMgdHJhbnNpdGlvbiBuZXZlciBoYXBwZW5zIGFnYWluLgorICAgICAgICAg
ICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3Vy
cmVudGx5KG9sZFN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICgh
bmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFi
bGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAg
ICAgICAgICAgICAvLyBJZiBKU09iamVjdDo6cHV0IGlzIG92ZXJyaWRkZW4gYnkgVXNlck9iamVj
dCwgVXNlck9iamVjdDo6cHV0IHBlcmZvcm1zIHNpZGUtZWZmZWN0IG9uIEpTT2JqZWN0OjpwdXQs
IGFuZCBpdCBuZWdsZWN0cyB0byBtYXJrIHRoZSBQdXRQcm9wZXJ0eVNsb3QgYXMgbm9uLWNhY2hh
ZWJsZSwKKyAgICAgICAgICAgICAgICAvLyB0aGVuIGFyYml0cmFyeSBzdHJ1Y3R1cmUgdHJhbnNp
dGlvbnMgY2FuIGhhcHBlbiBkdXJpbmcgdGhlIHB1dCBvcGVyYXRpb24sIGFuZCB0aGlzIGdlbmVy
YXRlcyB3cm9uZyB0cmFuc2l0aW9uIGluZm9ybWF0aW9uIGhlcmUgYXMgaWYgb2xkU3RydWN0dXJl
IC0+IG5ld1N0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAvLyBJbiByZWFsaXR5LCB0aGUgdHJh
bnNpdGlvbiBpcyBvbGRTdHJ1Y3R1cmUgLT4gc29tZXRoaW5nIHVua25vd24gc3RydWN0dXJlcyAt
PiBiYXNlVmFsdWUncyBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gVG8gZ3VhcmQgYWdh
aW5zdCB0aGUgZW1iZWRkZXIncyBwb3RlbnRpYWxseSBpbmNvcnJlY3QgVXNlck9iamVjdDo6cHV0
IGltcGxlbWVudGF0aW9uLCB3ZSBzaG91bGQgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uIGFuZCBp
ZiBmb3VuZCwgYW5kIGdpdmUgdXAgb24gY2FjaGluZyB0aGUgcHV0LgorICAgICAgICAgICAgICAg
IEFTU0VSVChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gbmV3U3RydWN0dXJl
KTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0p
ICE9IG5ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkg
PT0gb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisgICAgICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgICAg
IGlmIChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCkgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3Qs
IGJhc2VDZWxsLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAg
ICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3ND
aGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWlu
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkgewor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnQuaXNQcml2YXRlTmFtZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVy
dHlNaXNzKHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5p
bXBsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRl
VHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgb2xkU3RydWN0
dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbiksIHN0dWJJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgICAg
IFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisKKyAg
ICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZSBhIHNlbGYg
Y3VzdG9tLCBzaW5jZSB3ZSBtdXN0IGRpc2FsbG93IGRpY3Rpb25hcmllcworICAgICAgICAgICAg
ICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9tIGdvZXMg
YXdheSBzaW5jZSB3ZSBjYWNoZSB0aGUgY29uc3RhbnQKKyAgICAgICAgICAgICAgICAvLyBmdW5j
dGlvbiBwb2ludGVyLgorICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJl
Q2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBi
YXNlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9s
eVByb3RvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9
IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwg
c2xvdC5iYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nl
c3NDaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0
Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2Jh
bE9iamVjdCwgb2xkU3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IHNsb3QuaXNDdXN0b21BY2Nlc3NvcigpID8gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0
ZXIgOiBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsCisgICAgICAgICAgICAgICAgICAgIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHksIHNsb3QuY3VzdG9tU2V0dGVy
KCkucmV0YWdnZWQ8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KCksIHNsb3QuYmFzZSgpICE9IGJhc2VW
YWx1ZSA/IHNsb3QuYmFzZSgpIDogbnVsbHB0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpOworICAgICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWlu
OworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zm
c2V0KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JD
YWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZs
YXR0ZW5lZERpY3Rpb25hcnkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1Bv
bHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4g
PSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGws
IHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNj
ZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNl
U3RydWN0dXJlKHZtLCBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKSktPmdldCh2bSwgaWRlbnQuaW1w
bCgpLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpIHx8ICEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwg
b2xkU3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkuYXR0cmlidXRlcygpICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlO
YW1lLCBvZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiks
IGlzUHJveHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHJlc3Vs
dCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpz
bG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAo
cmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50
LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisKKyAgICAgICAgICAgIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwg
c3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxk
R2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lk
IHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtp
bmQgcHV0S2luZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CisgICAgCisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZv
LCBwdXRCeUtpbmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlG
dW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5k
ZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCkKK3sKKyAgICBpZiAoIWJh
c2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBp
ZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFz
Q2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAg
ICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhT
dG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0
b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmln
SW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCisgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgICAgICBjYXNl
IFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBl
ID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKKyAgICAgICAgICAg
IHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgor
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVT
dG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91
c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
Q29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNz
Q2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Cisg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlm
IChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSks
IElkZW50aWZpZXIoKSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29k
ZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5m
bywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93
KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hB
cnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAo
dHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRl
eCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkp
OworCisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7
CisgICAgICAgIGlmICghYmFzZVZhbHVlLmlzT2JqZWN0KCkgfHwgIW9sZFN0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG9sZFN0cnVjdHVyZS0+aXNQcm94eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKCFzbG90Lmlz
Q2FjaGVhYmxlRGVsZXRlKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5
KCkpIHsKKyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5o
YXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsdWUpLT5mbGF0dGVu
RGljdGlvbmFyeU9iamVjdCh2bSk7CisgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgIFJlZlB0cjxB
Y2Nlc3NDYXNlPiBuZXdDYXNlOworCisgICAgICAgIGlmIChzbG90LmlzRGVsZXRlSGl0KCkpIHsK
KyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IGludmFsaWRPZmZzZXQ7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJv
cGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpLCBuZXdPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFu
ZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAg
ICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkgfHwgbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdPZmZzZXQgPT0gc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91
c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOwor
ICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoaXNWYWxpZE9mZnNldChuZXdPZmZzZXQpKTsKKyAgICAgICAgICAgIG5ld0Nhc2Ug
PSBBY2Nlc3NDYXNlOjpjcmVhdGVEZWxldGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBu
ZXdPZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzbG90LmlzTm9uY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChlY21hTW9kZS5p
c1N0cmljdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vz
c0Nhc2U6OkRlbGV0ZU5vbkNvbmZpZ3VyYWJsZSwgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0
LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpEZWxldGVNaXNzLCBwcm9wZXJ0eU5hbWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwg
eyB9LCBudWxscHRyKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGVjbWFNb2RlLCBwcm9wZXJ0eU5hbWUs
IFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlk
KCkpKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1Yklu
Zm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVw
Tm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0
Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kLCBFQ01BTW9kZSBlY21hTW9k
ZSkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKHRyeUNhY2hlRGVsZXRl
QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QsIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLCBraW5kLCBlY21hTW9kZSkgPT0gR2l2ZVVwT25DYWNo
ZSkgeworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhHZW5lcmljLCBi
YXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6
OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICAgICAgaWYgKGtpbmQgPT0g
RGVsQnlLaW5kOjpCeUlkKQorICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlkR2VuZXJpYyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uRGVsZXRlQnlWYWxHZW5lcmljKTsKKyAgICB9Cit9CisKK2lubGluZSBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5
SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIElu
QnlLaW5kOjpCeVZhbDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsK
KyAgICBjYXNlIEluQnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK2lubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJv
cHJpYXRlR2VuZXJpY0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25JbkJ5SWRHZW5lcmljOworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1
cm4gb3BlcmF0aW9uSW5CeVZhbEdlbmVyaWM7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5h
bWU6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFtZUdlbmVyaWM7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwKKyAgICBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHByb3BlcnR5TmFtZS51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNl
SUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlB
Y2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8ICghd2FzRm91bmQgJiYgIWJhc2UtPnN0cnVjdHVyZSh2
bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGVGb3JBYnNlbmNlKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAod2FzRm91bmQp
IHsKKyAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAg
ICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlm
ICh3YXNGb3VuZCkgeworICAgICAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0
aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRU
b0NhY2hlKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8v
IE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlw
ZSgpID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVh
YmxlVmFsdWUoKQorICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCisg
ICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCisgICAgICAgICAgICAgICAg
JiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRl
bnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CisgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9i
YWxPYmplY3QsIGJhc2UsIHNsb3QpOworICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
ICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgIGlmIChjYWNo
ZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVB
Y2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0
LCBiYXNlLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3ND
aGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkg
fHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUp
LT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNj
ZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNs
b3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkg
PT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBh
cmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisKKyAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46
OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOworICAgICAgICAgICAgICAgIGlm
ICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5
cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0g
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgIFJl
ZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6
OkluTWlzcywgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCA/IHNsb3QuY2FjaGVkT2Zmc2V0KCkgOiBp
bnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbikpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
bG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9w
ZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJh
dGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VX
aXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwor
ICAgICAgICAgICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgICAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJ
Zk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKK30KKwordm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKHRyeUNhY2hlSW5CeShnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCwgc2xvdCwg
c3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpJblJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZU9iamVjdC0+Y2xhc3NJbmZvKGdsb2JhbE9i
amVjdC0+dm0oKSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkp
KTsKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oa2luZCkpOworICAgIH0KK30KKworc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBicmFuZElELnVpZCgpKTsKKworICAgIHsKKyAgICAgICAgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAg
ICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3Ry
dWN0dXJlKHZtKTsKKworICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25G
b3JDZWxsKHZtLCBiYXNlKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkK
KyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0
eSA9IHRydWU7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICBS
ZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBicmFu
ZElELCBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIHsgfSwgeyB9KTsKKworICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7CisKKyAg
ICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJ
bkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwg
c3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxk
R2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lk
IHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlm
aWVyIGJyYW5kSUQsIGJvb2wgd2FzRm91bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisKKyAg
ICBpZiAodHJ5Q2FjaGVIYXNQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VPYmplY3QsIGJyYW5kSUQsIHdhc0ZvdW5kLCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkK
KyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25IYXNQcml2YXRlQnJhbmRHZW5lcmljKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlQ2hlY2tQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIGJyYW5kSUQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
YnJhbmRJRC51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWls
dXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAg
ICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7
CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1
cm4gYWN0aW9uOworCisgICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOworICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgc3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVm
PEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVDaGVja1ByaXZhdGVCcmFu
ZCh2bSwgY29kZUJsb2NrLCBicmFuZElELCBzdHJ1Y3R1cmUpOworCisgICAgICAgIHJlc3VsdCA9
IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
RUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAg
ICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6Q2hlY2tQcml2YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOworCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1Yklm
TmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworCisgICAgcmV0dXJuIHJl
c3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7
Cit9CisKK3ZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAg
aWYgKHRyeUNhY2hlQ2hlY2tQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VPYmplY3QsIGJyYW5kSUQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICBy
ZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVNldFByaXZhdGVCcmFuZCgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAg
aWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOworCisg
ICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24g
PSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0
VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisgICAgICAgIAorICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6c2V0QnJhbmRUcmFuc2l0aW9uRnJv
bUV4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgYnJhbmRJRC51aWQo
KSk7CisgICAgICAgIGlmICghbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVj
dHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVChuZXdT
dHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlNldEJyYW5kKTsK
KyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgIAorICAg
ICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpTZXRQcml2YXRlQnJhbmRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
LCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVNldFByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBi
cmFuZElELCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CisKKyAgICAgICAgcmVzdWx0ID0g
c3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBF
Q01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAg
IGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpTZXRQcml2YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJl
c3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0Fu
ZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAg
IAorICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDog
UmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBi
cmFuZElELCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlU2V0UHJp
dmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1
cmUsICBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRHZW5lcmljKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5zdGFu
Y2VPZigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgYm9vbCB3YXNGb3VuZCkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQodmFsdWVWYWx1ZS5pc0NlbGwoKSk7IC8vIHNob3Vs
ZENvbnNpZGVyQ2FjaGluZyByZWplY3RzIG5vbi1jZWxscy4KKyAgICAKKyAgICBpZiAoZm9yY2VJ
Q0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrLCB2bSk7CisgICAgICAgIAorICAgICAgICBKU0NlbGwqIHZhbHVlID0gdmFs
dWVWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS0+
c3RydWN0dXJlKHZtKTsKKyAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisgICAg
ICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHBy
b3RvdHlwZVZhbHVlKTsKKyAgICAgICAgaWYgKHByb3RvdHlwZSkgeworICAgICAgICAgICAgaWYg
KCFqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHZhbHVlKSkgeworICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBJbnN0YW5jZU9mQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlzcywgc3RydWN0dXJl
LCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICAgICAgICAgICAgICBwcm90
b3R5cGUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJ1Y3R1cmUtPnByb3RvdHlwZVF1ZXJp
ZXNBcmVDYWNoZWFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUZWFjaCB0aGlz
IHRvIGRvIHBvbHkgcHJvdG8uCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTY2MworICAgICAgICAgICAgICAgIHByZXBhcmVDaGFp
bkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgd2FzRm91bmQgPyBwcm90b3R5cGUgOiBu
dWxscHRyKTsKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9mKAorICAgICAgICAgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvdG90eXBl
LCB3YXNGb3VuZCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uU2V0LmlzVmFsaWQo
KSkgeworICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6
OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssCisgICAgICAg
ICAgICAgICAgICAgICAgICB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZIaXQgOiBB
Y2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlzcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBwcm90b3R5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFuZXdDYXNlKQorICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJpYywgQ2FjaGVhYmxlSWRlbnRpZmllcigpKTsKKyAgICAg
ICAgCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5zdGFuY2VPZkFkZEFjY2Vzc0Nhc2UsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIoKSkpOworICAgICAgICAKKyAgICAgICAg
cmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIFdURk1vdmUobmV3Q2FzZSkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZSZXBsYWNlV2l0aEp1bXAsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJl
c3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNo
ZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoSW5zdGFuY2VPZigKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sCisgICAgYm9vbCB3YXNGb3VuZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgaWYgKHRyeUNhY2hlSW5zdGFuY2VPZihnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgdmFsdWVWYWx1ZSwgcHJvdG90eXBlVmFsdWUsIHN0dWJJbmZv
LCB3YXNGb3VuZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7Cit9CisK
K3ZvaWQgbGlua0RpcmVjdENhbGwoCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBBU1NFUlQo
IWNhbGxMaW5rSW5mby5zdHViKCkpOworICAgIAorICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVC
bG9jay0+dm0oKTsKKyAgICAKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsK
KyAgICBjYWxsTGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2Fz
dDxGdW5jdGlvbkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9jaykpOworICAgIGlmIChzaG91bGRE
dW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKKyAgICAgICAgZGF0YUxvZygiTGlu
a2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJ
bmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwg
IiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKKworICAgIGNhbGxMaW5rSW5mby5z
ZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQ
dHIpKTsKKworICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9j
ay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0luZm8pOworfQorCit2b2lk
IGxpbmtTbG93Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbykKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52
bSgpOworICAgIAorICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOworfQorCitzdGF0
aWMgdm9pZCBsaW5rVmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0g
Y2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
ID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworCisgICAgZGF0YUxvZ0xuSWYoc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jayksCisgICAgICAgICJMaW5raW5nIHZpcnR1
YWwgY2FsbCBhdCAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxlckZyYW1l
LT5jb2RlT3JpZ2luKCkpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbExpbmtJ
bmZvLmNhbGxNb2RlKCkpOworICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVh
bFRodW5rKTsKKyAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOworfQorCitu
YW1lc3BhY2Ugeworc3RydWN0IENhbGxUb0NvZGVQdHIgeworICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
OworfTsKK30gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsaW5rUG9seW1vcnBoaWND
YWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKTsKKworICAgIENhbGxG
cmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBsaW5r
UG9seW1vcnBoaWNDYWxsLCB3ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBHQy4K
KyAgICAvLyBHQyBqZXR0aXNvbnMgQ29kZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8gZXRj
LiBhbmQgYnJlYWtzIGFzc3VtcHRpb24gZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2FsbC4K
KyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUodm0pOworICAgIAorICAgIGlm
ICghbmV3VmFyaWFudCkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBj
YWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3VyIGNhbGxl
ciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCisgICAgLy8g
dGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICBBU1NF
UlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKKworICAgIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgIGJvb2wgaXNXZWJB
c3NlbWJseSA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2Vs
bCgpKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxp
ZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3Nl
bWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxv
Y2s7CisgICAgQVNTRVJUKG93bmVyKTsKKworICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OworICAg
IGlmIChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHVi
KCkpCisgICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOworICAgIGVsc2UgaWYgKEpTT2Jq
ZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCisgICAgICAgIGxpc3QgPSBD
YWxsVmFyaWFudExpc3QgeyBDYWxsVmFyaWFudChvbGRDYWxsZWUpIH07CisgICAgCisgICAgbGlz
dCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7CisKKyAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IGNsb3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0cmVh
dCBhbGwgb2YgdGhlbSBhcyBjbG9zdXJlIGNhbGxzLgorICAgIC8vIFRoaXMgbWFrZXMgc3dpdGNo
aW5nIG9uIGNhbGxlZSBjaGVhcGVyLiBJdCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0J3Mg
ZWFzaWVyIG9uIHRoZSBERkc7CisgICAgLy8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50IHRv
IGRlYWwgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNhbGxl
ZXMuCisgICAgYm9vbCBpc0Nsb3N1cmVDYWxsID0gZmFsc2U7CisgICAgZm9yIChDYWxsVmFyaWFu
dCB2YXJpYW50IDogbGlzdCkgIHsKKyAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgp
KSB7CisgICAgICAgICAgICBsaXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsKKyAg
ICAgICAgICAgIGlzQ2xvc3VyZUNhbGwgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGlzQ2xvc3VyZUNhbGwpCisgICAgICAgIGNhbGxM
aW5rSW5mby5zZXRIYXNTZWVuQ2xvc3VyZSgpOworICAgIAorICAgIFZlY3RvcjxQb2x5bW9ycGhp
Y0NhbGxDYXNlPiBjYWxsQ2FzZXM7CisgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7Cisg
ICAgCisgICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCisgICAgZm9yIChDYWxs
VmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFudC5l
eGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxlKCk7CisgICAgICAgICAgICBjb2Rl
QmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9j
a0ZvckNhbGwoKTsKKyAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUs
IGVpdGhlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBhcml0
eSBtaXNtYXRjaCwKKyAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0
aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEgdmlydHVhbCBjYWxsLgorICAgICAgICAgICAgaWYgKCFj
b2RlQmxvY2sgfHwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJ
bmZvLmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNh
bGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7Cisg
ICAgICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24g
d2l0aCBjbG9zdXJlIGNhbGwuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MzExCisgICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1ZSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChhdXRvKiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAg
ICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMuY29u
dGFpbnMobmV3Q2FzZVZhbHVlKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9SOiBB
dHRlbXB0IHRvIGFkZCBkdXBsaWNhdGUgY2FzZSB2YWx1ZS5cbiIpOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIkV4aXN0aW5nIGNhc2UgdmFsdWVzOiAiKTsKKyAgICAgICAgICAgICAgICBDb21t
YVByaW50ZXIgY29tbWE7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhc2VW
YWx1ZXMpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0dGVt
cHRpbmcgdG8gYWRkOiAiLCBuZXdDYXNlVmFsdWUsICJcbiIpOworICAgICAgICAgICAgICAgIGRh
dGFMb2coIlZhcmlhbnQgbGlzdDogIiwgbGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxsQ2Fz
ZSh2YXJpYW50LCBjb2RlQmxvY2spKTsKKyAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3Q2Fz
ZVZhbHVlKTsKKyAgICB9CisgICAgQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZhbHVl
cy5zaXplKCkpOworCisgICAgLy8gSWYgd2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVzZSBh
IG5vcm1hbCB2aXJ0dWFsIGNhbGwuCisgICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxsVmFy
aWFudExpc3RTaXplOworICAgIGlmIChpc1dlYkFzc2VtYmx5KQorICAgICAgICBtYXhQb2x5bW9y
cGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJp
YW50TGlzdFNpemVGb3JXZWJBc3NlbWJseVRvSlMoKTsKKyAgICBlbHNlIGlmIChjYWxsZXJDb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIG1heFBv
bHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2Fs
bFZhcmlhbnRMaXN0U2l6ZUZvclRvcFRpZXIoKTsKKyAgICBlbHNlCisgICAgICAgIG1heFBvbHlt
b3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZh
cmlhbnRMaXN0U2l6ZSgpOworCisgICAgLy8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQgb2Yg
Y2FsbENhc2VzLnNpemUoKSBiZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBmb3Ig
bm93LgorICAgIGlmIChsaXN0LnNpemUoKSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0
U2l6ZSkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0lu
Zm8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+
IGNhbGxzKGNhbGxDYXNlcy5zaXplKCkpOworICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBmYXN0
Q291bnRzOworCisgICAgaWYgKCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+aml0
VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkgeworICAgICAgICBmYXN0Q291bnRzID0g
bWFrZVVuaXF1ZUFycmF5PHVpbnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgbWVt
c2V0KGZhc3RDb3VudHMuZ2V0KCksIDAsIGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWludDMy
X3QpKTsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5mby5j
YWxsZWVHUFIoKTsKKworICAgIGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRhSUMo
KTsKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChjYWxsZXJDb2RlQmxvY2spOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOworICAgIGlmIChj
YWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKSB7CisgICAgICAgIEFTU0VSVChjYWxsTGlu
a0luZm8uaXNUYWlsQ2FsbCgpKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlxdWU8
Q2FsbEZyYW1lU2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0
YSgpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFs
cmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCisgICAg
ICAgIC8vIHVzZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCisgICAgICAg
IGZyYW1lU2h1ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgpOworI2VuZGlmCisgICAgICAgIGZy
YW1lU2h1ZmZsZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKKyAgICB9CisKKyAgICBHUFJSZWcgY29t
cGFyaXNvblZhbHVlR1BSOworICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgIGlmIChm
cmFtZVNodWZmbGVyKQorICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVTaHVm
Zmxlci0+YWNxdWlyZUdQUigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJpc29u
VmFsdWVHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOworCisg
ICAgR1BSUmVnIGZhc3RDb3VudHNCYXNlR1BSOworICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAg
ICAgICBmYXN0Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPQorICAgICAgICAgICAgQXNzZW1i
bHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BS
LCBHUFJJbmZvOjpyZWdUMyk7CisgICAgfQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKKwor
ICAgIGlmICghZnJhbWVTaHVmZmxlciAmJiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Cisg
ICAgICAgIC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBjYWxs
ZWUgc2F2ZSByZWdpc3RlciBpbiB0aGUgc2xvdyBwYXRoLgorICAgICAgICBBU1NFUlQoIWNhbGxl
ckNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOworICAg
ICAgICBzdHViSml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICB9CisKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Cisg
ICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4
ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAo
Y2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChz
dHViSml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFu
Y2hJZk5vdENlbGwoY2FsbGVlR1BSKSk7CisjZWxzZQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZl
IGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorI2VuZGlmCisgICAg
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rp
b24gd2l0aCBjbG9zdXJlIGNhbGwuCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJy
YW5jaElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7CisKKyAgICAgICAgc3R1YkppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhl
Y3V0YWJsZU9yUmFyZURhdGEoKSksIGNvbXBhcmlzb25WYWx1ZUdQUik7CisgICAgICAgIGF1dG8g
aGFzRXhlY3V0YWJsZSA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8s
IGNvbXBhcmlzb25WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhjb21wYXJpc29uVmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhl
Y3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVHUFIp
OworICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJnN0dWJKaXQpOworICAgIH0KKworICAgIEJp
bmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBC
aW5hcnlTd2l0Y2g6OkludFB0cik7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwor
ICAgIHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkgeworICAgICAgICBzaXpl
X3QgY2FzZUluZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOworICAgICAgICAKKyAgICAg
ICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsK
KyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyOworICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwgY2Fs
bExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOworICAg
ICAgICAgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50
LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwo
QXJpdHlDaGVja05vdFJlcXVpcmVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7CisgICAgICAgICAgICBjb2RlUHRyID0g
dm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZmFzdENvdW50cykgeworICAgICAgICAgICAg
c3R1YkppdC5hZGQzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jh
c2VHUFIsIGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgbmVlZHNEb25lSnVtcCA9IGZhbHNlOworICAgICAgICBpZiAoZnJhbWVTaHVmZmxl
cikgeworICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxl
ci0+c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsc1tj
YXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2Ug
aWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxs
ID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChpc0RhdGFJQykKKyAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBz
dHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgICAgICAg
ICAgICAgIG5lZWRzRG9uZUp1bXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7CisgICAgICAgIGlmIChu
ZWVkc0RvbmVKdW1wKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91
Z2goKS5saW5rKCZzdHViSml0KTsKKworICAgIGlmIChmcmFtZVNodWZmbGVyKSB7CisgICAgICAg
IGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKKyAgICAgICAgZnJhbWVTaHVm
Zmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBmcmFtZVNodWZm
bGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVn
cyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKKyNlbHNlCisgICAgICAgIGZyYW1l
U2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Qw
KSk7CisjZW5kaWYKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRoKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6
cmVnVDApOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEp
OworI2VuZGlmCisgICAgfQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIHN0dWJKaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsKKworICAgIC8vIDEuIElmIGl0IGlzIG5vdCBEYXRhSUMsIGxpbmtSZWdpc3RlciBpcyBub3Qg
cG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbi4KKyAgICAvLyAyLiBJZiBpdCBpcyB0YWlsLWNhbGws
IGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbiBmb3Igc2xvdy1j
YWxsIGNhc2UuCisgICAgLy8gVGh1cyB3ZSBuZWVkIHRvIHB1dCBpdCBmb3IgdGhlIHNsb3ctcGF0
aCBjYWxsLgorICAgIGlmICghaXNEYXRhSUMpIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdn
ZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICBzdHViSml0
LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoaXNEYXRhSUMpOworICAgICAgICBpZiAoY2FsbExpbmtJ
bmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cih2bS5nZXRDVElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2Vu
ZXJhdG9yKS5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVn
VDQpOworICAgICAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVD
YWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBj
YWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKENhbGxU
b0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisg
ICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBsaW5raW5n
IG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJlc3MKKyAg
ICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3JtYWwgY2Fs
bCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KKyAgICAgICAg
Ym9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2FsbEhlbHBl
cnM6OkNhbGw6OlRhaWwpOworICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxsID8gY2Fs
bFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29k
ZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQpKSk7
CisjZWxzZQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVu
Y3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7CisjZW5kaWYK
KyAgICB9CisKKyAgICBpZiAoIWRvbmUuZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGF0
YUlDKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxv
Y2F0aW9uKCkpOworICAgIH0KKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxU
aHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgCisgICAgYXV0byBzdHViUm91dGluZSA9IGFk
b3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpF
X0NPREVfRk9SKAorICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklU
U3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKKyAgICAgICAgICAgICAgICBpc1dl
YkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5k
YXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpLAor
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAor
ICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZv
LCBjYWxsQ2FzZXMsCisgICAgICAgIFdURk1vdmUoZmFzdENvdW50cykpKTsKKworICAgIC8vIFRo
ZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxs
CisgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2ls
bCBhbHdheXMKKyAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKKyAgICBsaW5rU2xvd0Zvcih2
bSwgY2FsbExpbmtJbmZvKTsKKworICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMg
c3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBydW5zIGFu
ZCBzZWVzCisgICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4KKyAgICBjYWxsTGlu
a0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5lKSk7CisgICAgCisgICAgLy8gVGhlIGNh
bGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMgYSBjYWxsIGNhY2hlIGFwYXJ0IGZyb20gdGhlIGp1
bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwKKyAgICAvLyBzdHViLgorICAgIGlmIChjYWxsTGlu
a0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2
b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQp
KTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKKyAgICBj
YXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlk
OgorICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgIGNhc2UgR2V0QnlLaW5kOjpQ
cml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR2V0
QnlLaW5kOjpCeVZhbDoKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lk
IHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgUHV0QnlLaW5kIGtpbmQpCit7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5
S2luZDo6QnlJZDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBl
IHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVh
ZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
KQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNp
bmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1
YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkK
KyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplKQor
ICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVBy
aXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemUpCisg
ICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0
ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmlj
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIH0KKworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcElu
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1
dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQpCit7CisgICAgaWYg
KGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CisgICAgZWxz
ZQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKK30K
Kwordm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihraW5k
KSk7CisgICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgIElubGluZUFjY2Vz
czo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgZWxz
ZQorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRIYXNQcml2
YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
Cit9CisKK3ZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOworICAgIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvKTsKK30KKwordm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVC
cmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVz
ZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzYTAzNjUzMjZhYmZiZWRl
ZTA1NzU4OWM0NTQwOWIyZWIzNjU4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5o
IgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOworCitlbnVtIGNsYXNzIEdldEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBC
eVZhbCwKKyAgICBUcnlCeUlkLAorICAgIEJ5SWRXaXRoVGhpcywKKyAgICBCeUlkRGlyZWN0LAor
ICAgIFByaXZhdGVOYW1lLAorICAgIFByaXZhdGVOYW1lQnlJZCwKK307CisKK2VudW0gY2xhc3Mg
UHV0QnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKworZW51bSBjbGFzcyBEZWxC
eUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwKK307CisKK2VudW0gY2xhc3MgSW5CeUtpbmQg
eworICAgIEJ5SWQsCisgICAgQnlWYWwsCisgICAgUHJpdmF0ZU5hbWUKK307CisKK3ZvaWQgcmVw
YXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJh
c2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hHZXRC
eShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlkZW50aWZp
ZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsK
K3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwg
RUNNQU1vZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7Cit2b2lk
IHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3Bl
cnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVj
dHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7Cit2b2lkIHJlcGF0Y2hJbkJ5KEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVy
LCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IEluQnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCos
IENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3Vu
ZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0ds
b2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVwYXRjaEluc3RhbmNlT2Yo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3Rv
dHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsKK3ZvaWQgbGlua01vbm9t
b3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpT
T2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2
b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayos
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtTbG93Rm9y
KENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwordm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExp
bmtJbmZvJik7Cit2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7Cit2b2lkIHJlc2V0R2V0QnkoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwordm9pZCByZXNldFB1dEJ5
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKK3ZvaWQgcmVzZXRE
ZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7Cit2b2lkIHJl
c2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQg
cmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3Zv
aWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lk
IHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
K3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVMb2NhdGlv
bkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pOworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpz
VG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqIGNh
bGxlZSk7CisKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlZmU3YjFiMzM3NjRiZGY0
MmIyZTRmMDJkNGRmMGNkOWU4MWM0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApAQCAtMCwwICsxLDIxNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiUmVwYXRjaC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNsb3dQ
YXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGNhbGxlZUZyYW1lLT5z
ZXRDb2RlQmxvY2sobnVsbHB0cik7CisKKyAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0
Q2FsbERhdGEodm0sIGNhbGxlZSk7CisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENh
bGxEYXRhOjpUeXBlOjpKUyk7CisKKyAgICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERh
dGE6OlR5cGU6Ok5hdGl2ZSkgeworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbGVlRnJhbWUpOworICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxl
ZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVy
blZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2Jh
bE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxs
b3dHQzsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgICAgICB2
bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
S2VlcFRoZUZyYW1lKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoCisgICAgICAgICAgICAgICAgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVF
bnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxN
b2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisK
KyAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwor
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KAorICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FsbExp
bmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKworICAg
IGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNhbGxlZSk7CisgICAg
QVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAg
aWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7CisgICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAg
ICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgdm0u
ZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
bihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAg
ICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAg
ICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OworICAgIH0KKworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5
cGU6Ok5vbmUpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0
ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgcmV0dXJu
IGVuY29kZVJlc3VsdCgKKyAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRo
UmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExp
bmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5rSW5m
by0+aXNEaXJlY3QoKSk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFt
ZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rp
b25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFz
RnVuY3Rpb25DZWxsKSB7CisgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNE
eW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKKworICAgICAgICAgICAgaWYgKCFjYWxsTGlua0lu
Zm8tPnNlZW5PbmNlKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2
bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24s
IGNvZGVQdHIpOworCisgICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtl
ZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0
Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0lu
Zm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+
c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxl
ZS0+ZXhlY3V0YWJsZSgpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIgPSBqc1Rv
V2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKKyAgICAgICAgaWYgKCFjb2RlUHRyKQor
ICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVz
dENoZWNrQXJpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7
CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2lu
ZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2Jh
bE9iamVjdCwgY2FsbGVlKSk7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRp
b24oKTsKKyAgICAgICAgfQorCisgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBj
YWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUs
IHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisKKyAgICAgICAgY29kZUJs
b2NrID0gKmNvZGVCbG9ja1Nsb3Q7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworCisgICAg
ICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICAg
ICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJp
dHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOworICAgIH0KKworICAgIGlmICgh
Y2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4o
KTsKKyAgICBlbHNlCisgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1l
LCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisKKyAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8g
UmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQ
YXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+
c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1l
LT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0g
Z2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFz
RnVuY3Rpb25DZWxsKSkgeworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0
aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25U
cmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7CisgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxN
b2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9i
YWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAg
ICB9CisKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3Bl
VW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+
ZXhlY3V0YWJsZSgpOworICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZv
cihraW5kKSkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFi
bGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKworICAg
ICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAgICAgIHZv
aWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4
ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RD
b25zdHJ1Y3QpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlv
bikpOworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAg
IH0KKworICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFk
ZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVG
b3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5k
LCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBTdXBwb3J0
IHdhc20gSUMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMDMzOQorICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cigKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9
PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCAwZDE5ZTI3OTA1NmU1ZjM3ZTc3MWM1YzQ5
YTJkYjBlNmMyZDg0OGQ3Li5hYzU3MTI3YmNmODkwNzJiZTAzODQxNmRhMTM5YjQxZjE2NGFlNjE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAKQEAgLTQwMyw3ICs0MDMsNiBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjph
bGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMsCiAK
ICNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEt
Pm51bUVudHJpZXM8X19vcD4oKTsKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlf
UFJPRklMRShDT1VOVCkKLSAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9M
SU5LX0lORk8oQ09VTlQpCiAjdW5kZWYgQ09VTlQKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2Zp
bGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgICAg
IG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wR2V0QnlJ
ZD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKaW5kZXggNDAzOTRhOTQzOTkyOTkzZjU0NWEyYWM2MmNmNmVkYzA5ZGY1NTVmYS4u
MWM1OTA0MmUwZDBjMzgxMWIzYzliZTIxNThjZGM1NGMwMWRiYjgxYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTc1LDcg
Kzc1LDYgQEAgY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOwogCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlu
a2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxM
aW5rSW5mbzsKIAogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3Qg
T2Zmc2V0TG9jYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuY3BwCmluZGV4IDVjNzIwNThkY2YyMTk2MGRjZjg1M2UwYTkyYzI3ZTg5YTJkNTZiZWUu
LjVlMzJkMmQyNGYxYjNlZDg3MGMzMzBmMmVmMjNkODVlNGVjZTQ4MzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTMxNSw2ICszMTUsMTAg
QEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1
Y3RfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJh
bXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFt
cG9saW5lOgorICAgIGNhc2UgbGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfY29u
c3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFt
cG9saW5lOgogICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6CiAgICAg
Y2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgogICAgIGNhc2UgY2hlY2twb2lu
dF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgpAQCAtMzI1LDYgKzMyOSw4
IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Jl
dHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNh
c2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
c19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5f
bG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246
CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKICAg
ICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CkBAIC0zMzUsNyArMzQxLDYgQEAg
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9zbG93X3JldHVy
bl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRp
b246CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgotICAg
IGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2Fs
bF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgpAQCAtMzQzLDggKzM0OCw5IEBAIENhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBJCiAgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgogICAgIGNhc2Ug
d2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29w
X2NhbGw6Ci0gICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKICAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxs
X3ZhcmFyZ3M6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdzOgog
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0OgogICAgIGNhc2UganNfdHJh
bXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxs
X3Nsb3c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKaW5kZXggYjQ1MWNkYjYxZjdhMTFiMzMwMmMxODVjNjZiZmYxN2E5
ZmRiZTA5Zi4uZTcyMmY5ZWJkYWNjODkzNjkwNjU2ZDViNjNlOWY2MjQ0NDYxNWY0MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KICAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2Fs
bFZhcmFyZ3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9O
KG9wX2NhbGxfdmFyYXJnc19zbG93KTsKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAg
IGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nf
c2xvdyk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9w
X2NvbnN0cnVjdF92YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDogewogICAgICAgICAgICAgaWYgKGNhbGxJbnN0cnVj
dGlvbi5vcGNvZGVJRCgpID09IG9wX2dldF9ieV9pZCkKQEAgLTIwMSwxMCArMjAxLDEyIEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMo
Q29kZUJsb2NrKiBiYXNlbGluZUNvCiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25z
dHJ1Y3Q6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKICAgICAg
ICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6IHsKLSAgICAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAgICAgICBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0
ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG51
bGxwdHI7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9sb2NrKTsKKyAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExp
bmtJbmZvRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7Ci0KICAg
ICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLnJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKaW5kZXggOTU2ZDY5NDBlN2QyMGI4MjAyZjI1NTNlYzVmZTcwYjdlOGU5ZTYwYS4uZTYxZjg5
NGJlMTA4Y2NiZmExMmRiMjA4OTI5ZWNkZTJjM2RmMGYyNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC04NDcsMTAg
Kzg0NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxT
aXRlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAg
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwpAQCAtODkyLDcgKzg5Miw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXls
b2FkR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewog
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAg
ICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAg
c2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAwZmU3
YTc5MDkxNWE3MjRmNGUxZmZiZDk2YmExNGU3YTg1Y2I4Yzc5Li43NzA3M2YzNGFmYmZkZjk1ZmU1
ODI1YTNjODk4OWMzMjIzZGRhYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTkzOCwxMCArOTM4LDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgbV9qaXQuZW1p
dFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBj
YWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBzY29wZWRMYW1i
ZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xv
d1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgIAogICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xv
d0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVl
R1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwpAQCAtOTg5LDcgKzk4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAg
ICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxl
ZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGUxYzgyZGY4ODM0MTQ5MTk4NGIw
OTgzODFiODBkNWVhMzY3MmQ2ZWIuLjAxOGEyZjg1OGY0MjExZDM4N2I0MmI2OTJlMjViNTE4NjFi
ZTRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKQEAgLTEwNDAzLDEwICsxMDQwMywxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgWyZd
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxG
YXN0UGF0aChqaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRh
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0xMDU1OSwxMCArMTA1NTksMTAgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
c3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2Fs
bCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihb
Jl17CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmso
JmppdCk7CiAgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7
CkBAIC0xMDkwMiwxMCArMTA5MDIsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChq
aXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwpA
QCAtMTExODMsMTAgKzExMTgzLDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBjOGNi
YmVlMDZiZjdkNjY2MmMxOWE0YTRhOGExOGMyMWNlZmQzZjcyLi5lNjQ1ODUzMWViYzkwNGRlNWRk
MDRjZTNhYmE1M2M1YmQzYzcwYjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCkBAIC03NDUsMTggKzc0NSwxOCBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbChHUAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIGVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIEdQUkluZm86OnJlZ1QyLCBpbmZvLT5j
YWxsTW9kZSgpKTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVj
dChWTSYgdm0sIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIENhbGxNb2RlIGNhbGxNb2RlKQogewot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1vdmUo
Y2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNh
bGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKICAgICAgICAgbGlua0J1ZmZlci5hZGRN
YWluVGhyZWFkRmluYWxpemF0aW9uVGFzayhbPSwgJnZtXSAoKSB7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZp
cnR1YWxUaHVua0Zvcih2bSwgKmluZm8pOwotICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIo
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFs
VGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTW9kZSk7CiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAgICAg
fSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCA2NWRkOGVkZWY3NDc5OTZkNWY2ZDhmMTkyNDZlNmFkOTMzNmQ0NzM4Li5hNDRhYTVj
Zjk1NGYyYzE2NTQ3OWVjMmRjZDkyM2Q1ZmY0ZjNkMWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTE3NTIsNyArMTc1Miw3IEBAIGNsYXNzIEFz
c2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiAgICAgfQogICAgIAogICAg
IHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8q
KTsKLSAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0m
LCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdH
bG9iYWxPYmplY3QoVk0mLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZSk7CiAgICAg
CiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1T
cGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmgKaW5kZXggMTU4OTYwM2YxNDljMjc2YzM1OWU3YmIyNmQ2NGY0ZDg1NzI3ZjE1
MC4uMzAwM2IwNzM1MDE4OGU1ZjczZmNjOTY3MjBkNmE5ZTc0MWY4YmNiNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCkBAIC02Miw3ICs2Miw2IEBAIGNs
YXNzIEpJVENvbnN0YW50UG9vbCB7CiAKICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsK
ICAgICAgICAgR2xvYmFsT2JqZWN0LAotICAgICAgICBDYWxsTGlua0luZm8sCiAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvLAogICAgICAgICBGdW5jdGlvbkRlY2wsCiAgICAgICAgIEZ1bmN0aW9u
RXhwciwKQEAgLTkzLDcgKzkyLDYgQEAgY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERp
cmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIH5CYXNlbGluZUpJVENvZGUo
KSBvdmVycmlkZTsKICAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBv
dmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAKLSAgICBCYWc8
Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgIEZpeGVkVmVjdG9yPFVubGlu
a2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKICAgICBGaXhlZFZlY3Rv
cjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAppbmRleCA5Mjk0MjQ2MDczNDAwOTExYjZjMzU3Yzc4YTRhMGM2YTc0ZTlhYWQ0Li4y
OGFlNmY3NzBkZGFjZDcxYzZmMTgyYzlkMTc5ZmQxY2NlYjhkZmJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCkBAIC0xMDEsMTIgKzEwMSw5IEBAIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5r
CiAgICAgcmV0dXJuIHN0ZDo6dHVwbGUgeyBzdHViSW5mbywgc3R1YkluZm9JbmRleCB9OwogfQog
Ci1zdGQ6OnR1cGxlPFVubGlua2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudD4gSklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpCitVbmxpbmtlZENhbGxMaW5rSW5m
byogSklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpCiB7Ci0gICAgdm9pZCogdW5saW5rZWRD
YWxsTGlua0luZm9JbmRleCA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihtX3VubGlua2VkQ2FsbHMuc2l6ZSgpKSk7Ci0gICAgVW5saW5rZWRDYWxsTGlua0luZm8q
IGluZm8gPSAmbV91bmxpbmtlZENhbGxzLmFsbG9jKCk7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZm9JbmRleCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4KTsKLSAg
ICByZXR1cm4gc3RkOjp0dXBsZSB7IGluZm8sIGNhbGxMaW5rSW5mb0luZGV4IH07CisgICAgcmV0
dXJuICZtX3VubGlua2VkQ2FsbHMuYWxsb2MoKTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpA
QCAtMTAxMCw3ICsxMDA3LDYgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV91
bmxpbmtlZENhbGxzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+KG1fdW5saW5r
ZWRDYWxscy5zaXplKCkpOwogICAgIGlmIChtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXpl
KCkpCiAgICAgICAgIHN0ZDo6bW92ZShtX3VubGlua2VkQ2FsbHMuYmVnaW4oKSwgbV91bmxpbmtl
ZENhbGxzLmVuZCgpLCBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5iZWdpbigpKTsKLSAgICBt
X2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5m
b3MpOwogICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8+KG1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKICAg
ICBpZiAobV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSkKICAgICAgICAgc3Rk
Ojptb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MuYmVnaW4oKSwgbV91bmxpbmtlZFN0dWJJbmZvcy5l
bmQoKSwgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLmJlZ2luKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKaW5kZXggZGUyYzVjZTc3MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlh
MS4uNjdiNDNkOGZhMzBiNzJjYmQ0OTQ0NjIyOGM2NDI5NjRmM2QzMzUxNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCkBAIC0xNTMsNyArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3Ry
dWN0IENhbGxDb21waWxhdGlvbkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
ZG9uZUxvY2F0aW9uOwogICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxs
TGlua0luZm87Ci0gICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZv
Q29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVl
RnVuY3Rpb24pOwpAQCAtMjk0LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92
YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAg
ICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6
Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29u
c3RhbnQpOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBi
b29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpAQCAtNzA2LDYgKzcwNSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBS
ZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVy
bkZyb21CYXNlbGluZUdlbmVyYXRvcihWTSYpOworCisgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hh
bmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFu
ZGxlckdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVu
a0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQpAQCAtOTU4
LDcgKzk2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlLCB2b2lkKiBw
YXlsb2FkID0gbnVsbHB0cik7CiAgICAgICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8oKTsKLSAgICAgICAgc3RkOjp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogCiAg
ICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC0xMDI5LDcgKzEwMzEsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBWZWN0b3I8SklUQ29uc3RhbnRQb29sOjpWYWx1
ZT4gbV9jb25zdGFudFBvb2w7CiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9n
bG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSB9OwotICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxs
czsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1f
dW5saW5rZWRTdHViSW5mb3M7CiAgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4g
bV9zd2l0Y2hKdW1wVGFibGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5k
ZXggMDkxOTkxNTg0NjhjMGZlMTAyYjVkZmJmYTJiZTRmZTE3MzE5N2UyYi4uODE1MWZmZGU2YTlm
MmViMGMzMjQ3NWQ1YmZkZGFhZWRhMTAwMDM4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCkBAIC01OSwxNyArNTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1
bHQgaW4gcmV0dXJuVmFsdWVHUFIgKHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAz
Mi1iaXQpLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0
PigpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJu
VmFsdWVKU1IpOwotCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtl
ZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgp
KTsKLSNlbmRpZgorICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5G
cm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQor
eworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKKyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9m
ZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4
dHJhQ1RJVGh1bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNv
ZGUpCkBAIC04NCw3ICs4OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlE
ICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAg
ICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAg
ICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNG
b3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwpAQCAtOTcsNyArMTAxLDcgQEAgSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQp
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVy
T2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBK
U1IpOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAg
ICAgbG9hZDMyKEFkZHJlc3ModG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgdG1wR1BSKTsKLSAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBi
eXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50
Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZz
ZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRt
cEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkg
KyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtMTEwLDcgKzExNCw3IEBAIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitKSVQ6
OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtMTYwLDcgKzE2NCw3IEBA
IEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mCiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBj
b3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
UGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29u
c3RhbnQsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgcmVnVDApOwogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsKICAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gz
MihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1Qw
LCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkp
OwpAQCAtMjAzLDY0ICsyMDcsNTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5r
SW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgaW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwotCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0
ID0gLWJ5dGVjb2RlLm1fYXJndjsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJP
ZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWRWYWx1ZShB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbGVlSlNSKTsKICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiA9IHJlZ1QyOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BDYWxsRXZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNh
bGxMaW5rSW5mb0dQUik7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9i
amVjdCgqbV92bSwgY2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAgcmVz
ZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQor
Ym9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29s
IEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitib29sIEpJVDo6Y29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5m
byosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNo
dWZmbGVEYXRhPigpOwotICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUu
bV9hcmdjOwotICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSID0gcmVnVDI7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFRhaWxDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJ
bmZvR1BSKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWls
Q2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlu
a0luZm9HUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKKyAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZURhdGEgc2h1ZmZsZURhdGEgeyB9OworICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJz
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVy
VGFnUmVnaXN0ZXI7CisgICAgICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BS
SW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CiAjZW5kaWYKLSAgICBzaHVmZmxlRGF0YS0+bnVtTG9j
YWxzID0KLSAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
IC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNv
ZGUubV9hcmdjKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdj
OyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQotICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKLSAg
ICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwotICAgIH0KKyAgICAgICAgc2h1ZmZsZURhdGEu
bnVtTG9jYWxzID0KKyAgICAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3Mu
cmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBieXRlY29kZS5tX2FyZ2M7ICsraSkgeworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tp
XSA9CisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAor
ICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRK
Uyk7CisgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9y
bWF0SlMpOworICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOwogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWly
KGNhbGxlZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHNo
dWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BS
KCksIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOwogI2VuZGlmCi0gICAgc2h1ZmZsZURhdGEtPnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotCi0gICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIgPSByZWdUMjsKLSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQs
IGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIo
KSwgY2FsbExpbmtJbmZvR1BSLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVm
ZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURhdGEgfTsKKyAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIHNodWZmbGVy
IHsgKnRoaXMsIHNodWZmbGVEYXRhIH07CiAgICAgICAgIHNodWZmbGVyLmxvY2tHUFIoY2FsbExp
bmtJbmZvR1BSKTsKICAgICAgICAgc2h1ZmZsZXIucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAg
fSk7CisgICAgfSkpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKLSAgICBzaHVmZmxl
RGF0YS0+c2hyaW5rVG9GaXQoKTsKLSAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92
ZShzaHVmZmxlRGF0YSk7Ci0KICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBk
b25lTG9jYXRpb247CiAgICAgCkBAIC0yODgsMTcgKzI4NywxNCBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZAogICAgICovCiAKICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxw
dHI7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01B
WDsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIHN0ZDo6dGll
KGluZm8sIGluZm9Db25zdGFudCkgPSBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOworICAgICAg
ICBpbmZvID0gYWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsKICAgICAgICAgaW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxs
TGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKICAgICAgICAgQVNTRVJUKG1fY2FsbENv
bXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlu
a0luZm8gPSBpbmZvOwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OwogICAgIH0KLSAgICBj
b21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKKyAgICBjb21waWxlU2V0
dXBGcmFtZShieXRlY29kZSk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCku
Yml0cygpOwpAQCAtMzE2LDE2ICszMTIsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoY2FsbGVlSlNSKSk7CiAjZW5kaWYKIAotICAg
IGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBp
bmZvQ29uc3RhbnQpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNh
bGxMaW5rSW5mb0luZGV4KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKLSAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50
LCBjYWxsTGlua0luZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0lu
Zm9HUFIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIFsmXSB7CisgICAgICAg
IGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRM
YW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7Ci0g
ICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CiAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRp
b247CkBAIC0zNDQsMTUgKzM0MCwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCkKIHsKICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwot
ICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCks
IHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjYs
NyArMzYzLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUKIAogICAgIHJlc2V0U1AoKTsKIAot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAppbmRleCBmODQ0NTg3ODAzYzI2MThjNjgwMzk4MzZjZWU2YzdiMzRmZDJjMzA0Li4y
ZmUyM2M0OWZkMGY5NDA5MWY2ODYwNWI3NTdhZTJjZTMyMjAxNGEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTM3MCwyMSArMzcwLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0K
LSAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAg
IGppdC5yZXQoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9y
ZXRfaGFuZGxlciIpOwotfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvUHJpbWl0aXZlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKaW5kZXggZjE1ZDJlMTczYmU1ZmI3OWE4YTVhZDU2ODI5MWE5YWQ5YzIxOTk3NS4u
NDMyNzE1ZmI4N2FmNDhhMzY5N2UzMzNkYWFkYzQ1MGRlNDgwOTEwZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC02MCw3ICs2MCw3IEBACiAjaW5j
bHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNp
bmNsdWRlICJSZWdFeHBPYmplY3QuaCIKLSNpbmNsdWRlICJSZXBhdGNoLmgiCisjaW5jbHVkZSAi
UmVwYXRjaElubGluZXMuaCIKICNpbmNsdWRlICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKQEAgLTE0NDYs
MTg2ICsxNDQ2LDkgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFs
LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG8KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxl
SG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBjYWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIp
OwotCi0gICAgaWYgKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZv
ckNhbGwpIHsKLSAgICAgICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUp
OwotICAgICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOwot
Ci0gICAgICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsK
LSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1l
KTsKLSAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7
Ci0gICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5h
dGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVG
cmFtZSk7Ci0gICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRy
VGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0
Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAot
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUp
KTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxs
RGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0g
ICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICB2bS5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50
cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgIH0KLQotICAgIEFTU0VSVChjYWxsTGlu
a0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpOwotCi0gICAg
YXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0Q29uc3RydWN0RGF0YSh2bSwgY2FsbGVlKTsKLSAgICBB
U1NFUlQoY29uc3RydWN0RGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7Ci0KLSAgICBp
ZiAoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOwotICAgICAg
ICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICB2bS5l
bmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKLSAgICAg
ICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAot
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENh
bGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgdGhyb3dF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3Io
Z2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAg
ICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci19Ci0KIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAo
Q2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQogewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
Y2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXph
dGlvbktpbmQoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkp
OwotICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50
ZWVkSlNWYWx1ZUNhbGxlZSgpOwotICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBn
ZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNl
bGwpIHsKLSAgICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0
PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50
ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghIWNvZGVQdHIpOwotCi0gICAgICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9u
Y2UoKSkKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVG
cmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7
Ci0KLSAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1v
ZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2Jh
bE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAg
IH0KLQotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hl
Y2tlZCgpOwotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRh
YmxlKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cjsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGV4ZWN1dGFi
bGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2Rl
UHRyKHZtLCBraW5kLCBjYWxsZWUpOwotICAgICAgICBpZiAoIWNvZGVQdHIpCi0gICAgICAgICAg
ICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0
eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
LQotICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAg
ICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFy
Z2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsK
LQotICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0
cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKLSAgICAgICAgICAg
IHJldHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29k
ZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2so
KTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0
aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2Vw
dGlvbigpKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKLSAgICAgICAg
QVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7Ci0gICAg
ICAgIGlmIChjYWxsZWVGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRp
Y19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5m
by0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAg
ICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBh
cml0eSk7Ci0gICAgfQotCi0gICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwotICAgIGVsc2UKLSAgICAgICAgbGlua01vbm9t
b3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2Fs
bGVlLCBjb2RlUHRyKTsKLQotICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxN
b2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7
Ci19Ci0KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi17
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsK
LSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFz
VmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKLSAgICAgICAgaWYgKGpzRHluYW1p
Y0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRD
VElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKLSAgICAgICAgICAgIEFTU0VS
VCghIWNvZGVQdHIpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
aGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwg
Y2FsbExpbmtJbmZvKSk7Ci0gICAgfQotICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNTY29wZSog
c2NvcGUgPSBmdW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFl
eGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewotICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpOwotCi0gICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBb
Jl0gKCkgewotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50
cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwotICAgICAgICB9OwotCi0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9u
RXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5v
dENvbnN0cnVjdCkgewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGZ1bmN0
aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+
YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtp
bmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFN1cHBv
cnQgd2FzbSBJQy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIwMzM5Ci0gICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAg
IHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7
CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rUG9seW1vcnBoaWND
YWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTQ4ZDUxY2RhNGUyYTIxYTkyMTc5YjUxNWY5ODRhZjJjNjhkNmRmYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjAyMyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlJlcGF0Y2guaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNs
dWRlICJCaW5hcnlTd2l0Y2guaCIKLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRl
ICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZm
bGVyLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0
aXZlSklULmgiCi0jaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiRGly
ZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiRlRMVGh1bmtzLmgiCi0jaW5jbHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKLSNpbmNsdWRl
ICJGdW5jdGlvbkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5o
IgotI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vz
c0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0YXRzLmgiCi0jaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgi
Ci0jaW5jbHVkZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklUSW5saW5l
cy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdC5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKLSNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIk1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgot
I2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIgotI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlUmFyZURhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSAiU3Vw
ZXJTYW1wbGVyLmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PiBvcGVyYXRpb24pCi17Ci0gICAgSlNDX1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9W
QUxJREFUSU9OKG9wZXJhdGlvbik7Ci19Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJ
bnRlcm5hbFB0clRhZz4gY2FsbCkKLXsKLSAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFS
R0VUX1dJVEhfVkFMSURBVElPTihjYWxsKTsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKQotICAgICAgICByZXR1cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5m
by5tX3Nsb3dPcGVyYXRpb24pOwotICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4gY2FsbCA9IHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb247Ci0jaWYgRU5BQkxFKEZU
TF9KSVQpCi0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkg
ewotICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJn
ZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldp
dGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2Fs
bFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKGNvZGVCbG9jayk7Ci0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgcmV0dXJuIHJl
dGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKGNhbGwpOwotfQotCi12b2lkIGZ0bFRodW5rQXdh
cmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKQotewotI2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKLSAgICAgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOwotICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKLSAg
ICAgICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVy
OjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7Ci0gICAgICAgIGF1dG8gc2xv
d1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAg
ICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxU
aHVuayhzbG93UGF0aFRodW5rKTsKLSAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5l
d0NhbGxlZUZ1bmN0aW9uKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNh
bGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1
bmsodm0sIGtleSkuY29kZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZWxzZSAvLyBF
TkFCTEUoRlRMX0pJVCkKLSAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKLSNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3
Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKLX0KLQotc3RhdGlj
IHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKQotewotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAg
IHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbiA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9w
ZXJhdGlvblB0clRhZz4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9u
LCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19Ci0KLWVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewotICAg
IEdpdmVVcE9uQ2FjaGUsCi0gICAgUmV0cnlDYWNoZUxhdGVyLAotICAgIEF0dGVtcHRUb0NhY2hl
Ci19OwotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVy
ZSh2bSk7Ci0KLSAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsK
LSAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCi0gICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSkgewotICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVm
b3JlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgLy8gRmxh
dHRlbmluZyBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZv
ciBhbm90aGVyIHRyeS4KLSAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5
T2JqZWN0KHZtKTsKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7
Ci19Ci0KLXN0YXRpYyBib29sIGZvcmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKLXsKLSAg
ICByZXR1cm4gT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKTsKLX0KLQotQUxXQVlTX0lOTElORSBz
dGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQmIHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1
YkFuZEZpcmVXYXRjaHBvaW50cygpKSB7Ci0gICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHMo
dm0pOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0
KGxvY2tlciwgY29kZUJsb2NrKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlv
bihHZXRCeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5
S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAg
ICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGNh
c2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZUJ5SWRPcHRpbWl6ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBw
cm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2lu
ZCkgewotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
R2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAgICAgICByZXR1
cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzOwotICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlk
OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5S2lu
ZDo6QnlJZERpcmVjdDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7Ci0g
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlW
YWxHZW5lcmljOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRl
TmFtZUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7Ci0g
ICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7
Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGds
b2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMu
Ci0gICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0gICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxs
KCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgaXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lIHx8IGtpbmQgPT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7Ci0KLSAgICAg
ICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChpc0pTQXJy
YXkoYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgp
ID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VDZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXND
YWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+
KGJhc2VDZWxsKSkpIHsKLQotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHVi
SW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdH
ZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRBcnJheUxlbmd0aChsb2NrZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAg
ICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ss
IHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0
aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRz
KiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2Vs
bCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3
ZSBjYW4gaGFuZGxlIHRoaXMgYXMgYSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKLSAg
ICAgICAgICAgICAgICAvLyB0aGlzIHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRk
IGFuIElDIGNhc2UgZm9yIHRoYXQgbG9hZCBpZiBuZWVkZWQuCi0gICAgICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCi0gICAgICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0
QXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChT
Y29wZWRBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRz
Kj4odm0sIGJhc2VDZWxsKSkgewotICAgICAgICAgICAgICAgIC8vIERpdHRvLgotICAgICAgICAg
ICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQotICAgICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nh
c2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFz
ZUNlbGwtPmluaGVyaXRzPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNV
bnNldCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xv
dC5tb2R1bGVOYW1lc3BhY2VTbG90KCkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUs
IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNw
YWNlU2xvdC0+ZW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNj
b3BlT2Zmc2V0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkg
ewotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAgICAg
ICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChiYXNl
Q2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlzUHJpdmF0ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2Vs
bCktPnRhcmdldCgpOwotICAgICAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2Vs
bCgpOwotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0p
OwotICAgICAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JD
ZWxsKHZtLCBiYXNlQ2VsbCk7Ci0gICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0Nh
Y2hlKQotICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAgICAgICAgIC8vIE9w
dGltaXplIHNlbGYgYWNjZXNzLgotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgp
ID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKQotICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUK
LSAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAg
ICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQp
KTsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotCi0gICAgICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hl
ZE9mZnNldCgpOwotCi0gICAgICAgICAgICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxm
IGN1c3RvbXMsIHdlIG11c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKLSAgICAg
ICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5
IHNpbmNlIHdlIGNhY2hlIHRoZQotICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9u
IHBvaW50ZXIuCi0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmco
Z2xvYmFsT2JqZWN0LCBzbG90LnNsb3RCYXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1
ZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9y
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0s
IGpzQ2FzdDxKU09iamVjdCo+KGJhc2VDZWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7IC8vIFdlIG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0
cy4KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERp
cmVjdCBvciBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3Rp
Z2F0ZSBwcm90b3R5cGUgY2hhaW5zIGZ1cnRoZXIuCi0gICAgICAgICAgICAgICAgLy8gQ2FjaGVh
YmlsaXR5IGp1c3QgZGVwZW5kcyBvbiB0aGUgaGVhZCBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAg
ICAgaWYgKGtpbmQgIT0gR2V0QnlLaW5kOjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hp
bmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERp
Y3Rpb25hcnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMg
bWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8gZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2Vz
UG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2Vs
bCwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0No
YWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3Ry
dWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2Ug
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3Vs
ZCBiZSBpbnNpZGUgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlCbGFoLgotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NTIxNQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvcGVydHlNaXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xv
dC5zbG90QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWUudWlkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9mZnNldCgpID09IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUu
dWlkKCksIHNsb3QuYXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBKU0Z1bmN0aW9uKiBnZXR0ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWND
YXN0PEpTRnVuY3Rpb24qPih2bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOwotCi0g
ICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJp
YnV0ZTsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5k
b21BdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0
dHJpYnV0ZSgpOwotCi0gICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQp
IHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90
LmlzVW5zZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0R2V0dGVyOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQo
KSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgfSBlbHNlIGlm
ICghbG9hZFRhcmdldEZyb21Qcm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNz
Q2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUp
KQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgZ2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0No
YWluKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3ND
YXNlOjpMb2FkLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29k
ZUJsb2NrLCBzbG90LmlzVW5zZXQoKSA/IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpM
b2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRT
ZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yKQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nh
c2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRo
aXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRy
aWJ1dGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3Jl
YXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVy
dHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVBy
b3h5LAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihz
bG90LmN1c3RvbUdldHRlcigpKSA6IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/
IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb21B
dHRyaWJ1dGUsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJv
cGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBs
YWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5j
b2RlKCkpOwotICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgICAgICBjYXNlIEdl
dEJ5S2luZDo6QnlJZDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6
Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKLSAgICAgICAgICAgIGNhc2Ug
R2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lQnlJZDoKLSAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICAgICAgY2FzZSBHZXRC
eUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBh
dGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdl
dEJ5S2luZCBraW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKLSAgICAKLSAgICBpZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBH
aXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlvbihraW5kKSk7Ci19Ci0KLQotc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VW
YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAo
IWluZGV4LmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAgICBKU0Nl
bGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0KLSAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFy
Z3VtZW50c1R5cGUpCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZERpcmVjdEFyZ3VtZW50c0xvYWQ7Ci0gICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBT
Y29wZWRBcmd1bWVudHNUeXBlKQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRTY29wZWRBcmd1bWVudHNMb2FkOwotICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBl
KCkgPT0gU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkU3RyaW5nTG9hZDsKLSAgICAgICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xh
c3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgewotICAgICAgICAgICAgc3dpdGNo
IChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgVHlwZUludDg6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
TG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDE2
OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUludDE2TG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VHlwZVVpbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBUeXBlSW50MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMK
LSAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgotICAgICAgICAgICAgY2FzZSBUeXBlQmln
VWludDY0OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVN
YXNrOwotICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIEludDMyU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRJbnQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIERvdWJsZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkRG91YmxlTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkQ29udGlndW91c0xvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKLQotICAgICAgICBpZiAocmVzdWx0Lmdl
bmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlS
ZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVy
KCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1Yklu
Zm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNo
QXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCi17Ci0gICAgaWYgKHRyeUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZz
bG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgc3dpdGNo
IChwdXRCeUtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogewotICAgICAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
RGVmaW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Ci0g
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogewotICAgICAgICBzd2l0Y2ggKHB1
dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOwotICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxE
ZWZpbmVQcml2YXRlRmllbGRHZW5lcmljOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
LSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVy
aWM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICAvLyBNYWtl
IHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsK
LSAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgotICAg
ICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
LSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIE1ha2Ugd2luIHBvcnQg
Y29tcGlsZXIgaGFwcHkKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21V
aWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkp
OwotCi0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhc2VWYWx1
ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAK
LSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSAmJiAhc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8g
c29tZXRoaW5nIHNtYXJ0ZXIgaGVyZS4uLgotICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRT
dHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAvLyBXZSBjYW4ndCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUg
cHJvdG90eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBvd24gcHJvcGVydGllcy4KLSAgICAgICAgQVNT
RVJUKCFpc0NvcHlPbldyaXRlKHNsb3QuYmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOwotCi0gICAg
ICAgIGlmICghb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBKU0NlbGwqIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotCi0gICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNl
OwotICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlw
ZSkgewotICAgICAgICAgICAgYmFzZUNlbGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+
dGFyZ2V0KCk7Ci0gICAgICAgICAgICBiYXNlVmFsdWUgPSBiYXNlQ2VsbDsKLSAgICAgICAgICAg
IGlzUHJveHkgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNo
ZSBSZXBsYWNlIGFuZCBKUy9DdXN0b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAotICAg
ICAgICAgICAgLy8gY2FjaGUgdHJhbnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxs
IG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0cnVjdHVyZQotICAgICAgICAgICAgLy8gaW4gb3VyIGN1
cnJlbnQgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkg
PSAoc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6RXhpc3RpbmdQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxl
U2V0dGVyKCkKLSAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Ci0g
ICAgICAgICAgICBpZiAoIWlzQ2FjaGVhYmxlUHJveHkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0KLSAgICAg
ICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkp
IHsKLSAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0
aW5nUHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRj
aCBidWdzIGlmIHdlIGFjY2lkZW50YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCi0gICAg
ICAgICAgICAgICAgLy8gd2hlbiB3ZSB0cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3Rp
bmcgcHJvcGVydHkuIFRoaXMgaXMgY29tbW9uIGFtb25nCi0gICAgICAgICAgICAgICAgLy8gcGF0
aHMgdGhhdCByZWlmeSBsYXp5IHByb3BlcnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0
eSBhbmQgZm9yZ2V0Ci0gICAgICAgICAgICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBt
YXkgY29tZSBkb3duIHRoaXMgcGF0aC4gVGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKLSAgICAgICAg
ICAgICAgICAvLyBrbm93IGhvdyB0byBtb2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbnMgKG9yIGFueSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9u
IGZvciB0aGF0IG1hdHRlcikuCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG9sZFN0cnVjdHVyZSk7Ci0KLSAgICAgICAg
ICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3R1
YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAg
ICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICAm
JiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAg
ICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5
RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlh
YmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2Us
IHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCgpLCBpc1Byb3h5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
c2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xk
IHN0cnVjdHVyZSBpcyBkaWN0aW9uYXJ5LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9u
ZSBiZXR3ZWVuIGFuIG9iamVjdCBhbmQgYSBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8g
SWYgdGhpcyBpcyBOZXdQcm9wZXJ0eSBvcGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMg
ZG9lcyBub3Qgb2ZmZXIgYW55IGJlbmVmaXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIg
aGFwcGVucyBhZ2Fpbi4KLSAgICAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQot
ICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0
KTsKLSAgICAgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBp
cyBvdmVycmlkZGVuIGJ5IFVzZXJPYmplY3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRl
LWVmZmVjdCBvbiBKU09iamVjdDo6cHV0LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0
UHJvcGVydHlTbG90IGFzIG5vbi1jYWNoYWVibGUsCi0gICAgICAgICAgICAgICAgLy8gdGhlbiBh
cmJpdHJhcnkgc3RydWN0dXJlIHRyYW5zaXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQg
b3BlcmF0aW9uLCBhbmQgdGhpcyBnZW5lcmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlv
biBoZXJlIGFzIGlmIG9sZFN0cnVjdHVyZSAtPiBuZXdTdHJ1Y3R1cmUuCi0gICAgICAgICAgICAg
ICAgLy8gSW4gcmVhbGl0eSwgdGhlIHRyYW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0
aGluZyB1bmtub3duIHN0cnVjdHVyZXMgLT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgotICAgICAg
ICAgICAgICAgIC8vIFRvIGd1YXJkIGFnYWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkg
aW5jb3JyZWN0IFVzZXJPYmplY3Q6OnB1dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNr
IGZvciB0aGlzIGNvbmRpdGlvbiBhbmQgaWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcg
dGhlIHB1dC4KLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUodm0pID09IG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSAhPSBuZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluOwotICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKLSAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJl
Y3QpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFp
bkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMt
PnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vz
c0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJh
c2VDZWxsLCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGREZWZpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50
LmlzUHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVy
dHlOYW1lLCBvZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKSkgewotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgewotICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHBy
b3RvdHlwZUFjY2Vzc0NoYWluOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0
aGlzIGV2ZW4gaWYgd2UncmUgYSBzZWxmIGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBk
aWN0aW9uYXJpZXMKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5m
b3JtZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50
Ci0gICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24gcG9pbnRlci4KLSAgICAgICAgICAgICAgICBh
dXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJh
c2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRl
KGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNl
KCksIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpOb25lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vz
c0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0
ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBpbnZh
bGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBp
c1Byb3h5LCBzbG90LmN1c3RvbVNldHRlcigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFn
PigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hl
YWJsZVNldHRlcigpKTsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0No
YWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hl
U3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBz
bG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0
ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3Rv
dHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVy
ZSh2bSkpLT5nZXQodm0sIGlkZW50LmltcGwoKSwgYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50
LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNv
bmRpdGlvbigpLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9mZnNldCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVy
LCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1v
dmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRT
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7
Ci0gICAgICAgIAotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tl
ciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9k
ZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShu
ZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0g
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwot
Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRz
QW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1
dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5k
KSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQpCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCi0gICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEpT
Q2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLQotICAgICAgICBBY2Nlc3NDYXNlOjpB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFz
c0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgICAgICAg
ICAgY2FzZSBUeXBlSW50ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgotICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50
MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgVHlwZVVpbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgVHlwZUludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZs
b2F0NjQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJ
QwotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMTE4MwotICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6Ci0gICAgICAgICAgICBjYXNl
IFR5cGVCaWdVaW50NjQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2s7Ci0gICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICAg
ICAgICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6Ci0gICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCBnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3Qo
KSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUs
IG51bGxwdHIpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsK
LSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKLQotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVh
clN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGlu
ZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCi17Ci0gICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsK
LX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5
U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAg
IHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUo
Z2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
ICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOwotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVj
dCgpIHx8ICFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBv
bGRTdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotCi0gICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZURlbGV0ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICBpZiAoYmFzZVZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAganNDYXN0PEpTT2Jq
ZWN0Kj4oYmFzZVZhbHVlKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwotICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvbGRT
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKLQotICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLQotICAgICAgICBp
ZiAoc2xvdC5pc0RlbGV0ZUhpdCgpKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdP
ZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwotICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVj
dHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zm
c2V0KTsKLSAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBB
U1NFUlQobmV3T2Zmc2V0ID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgQVNT
RVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25L
aW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0
KSk7Ci0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBj
b2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgbmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoZWNtYU1vZGUuaXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHBy
b3BlcnR5TmFtZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUo
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZh
bGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7Ci0KLSAgICAgICAgcmVzdWx0
ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBlY21hTW9kZSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBp
ZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJl
cGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xl
YXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2Fj
aGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtp
bmQga2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
LQotICAgIGlmICh0cnlDYWNoZURlbGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90
LCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwg
ZWNtYU1vZGUpID09IEdpdmVVcE9uQ2FjaGUpIHsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpE
ZWxCeVJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxP
YmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KSk7Ci0gICAgICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKLSAgICAgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJ
ZEdlbmVyaWMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7Ci0gICAg
fQotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9w
dGltaXppbmdJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQp
IHsKLSAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5C
eUlkT3B0aW1pemU7Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOwotICAgIH0K
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtp
bmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluQnlLaW5kOjpCeUlk
OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkR2VuZXJpYzsKLSAgICBjYXNlIEluQnlL
aW5kOjpCeVZhbDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOwotICAg
IGNhc2UgSW5CeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVHZW5lcmljOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVj
dCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCi0gICAgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwot
ICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwotCi0gICAgewot
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhc2Ut
PnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0Zv
dW5kICYmICFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
Rm9yQWJzZW5jZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHdhc0ZvdW5kKSB7Ci0gICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNo
ZWFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1
cmUodm0pOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBw
cm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OwotICAgICAgICBpZiAod2FzRm91bmQpIHsKLSAgICAgICAgICAgIElubGlu
ZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICAg
ICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
YWN0aW9uOwotCi0gICAgICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICAgICAg
ICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAg
ICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAmJiBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZQotICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9p
bnRTZXQoKQotICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
ewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihs
b2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNsb3Quc2xv
dEJhc2UoKSAhPSBiYXNlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHBy
ZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERp
Y3Rpb25hcnkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFp
bjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFz
ZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90
QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwg
YmFzZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBz
bG90KTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cygKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRB
Y2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKLQotICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OmNyZWF0ZSgKLSAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNz
Q2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQg
PyBzbG90LmNhY2hlZE9mZnNldCgpIDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRp
b25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLQotICAgICAgICByZXN1bHQg
PSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQot
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwotCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5k
OjpCeUlkKQotICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmly
ZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ss
IHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdp
dmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluQnkoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlm
ICh0cnlDYWNoZUluQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3Bl
cnR5TmFtZSwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hl
KSB7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VP
YmplY3QtPmNsYXNzSW5mbyhnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQp
KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZh
dGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNG
b3VuZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7
Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVj
dCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICAgICAgSW5saW5lQ2Fj
aGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChh
Y3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0g
ICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFz
ZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6
IEFjY2Vzc0Nhc2U6OkluTWlzcywgYnJhbmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7
IH0sIHsgfSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2Nr
ZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQs
IFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5l
QWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRz
QW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOwotCi0gICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1
YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Ci19Ci0K
LXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09i
amVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7
Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9
IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRU
b0NhY2hlKQotICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgICAgICBib29sIGlzQmFz
ZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVC
cmFuZEFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQ
cm9wZXJ0eSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlQ2hlY2tQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0
dXJlKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RG
TW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgp
KSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFj
ZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJl
V2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywg
cmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVC
cmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0g
R2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1zdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoCi0gICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNl
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAot
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwot
Ci0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3Qp
KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlQob2xkU3RydWN0dXJlKTsKLQotICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAg
SW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAg
ICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0
aW9uOwotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6OnNldEJyYW5kVHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShv
bGRTdHJ1Y3R1cmUsIGJyYW5kSUQudWlkKCkpOwotICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkK
LSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIGlmIChuZXdTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1
cmUpOwotICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRy
YW5zaXRpb25LaW5kOjpTZXRCcmFuZCk7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7
Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwg
b2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAg
ICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2
YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1
cmUpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZN
b3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkp
IHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdp
dGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8s
IGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBh
dGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
LQotICAgIGlmICh0cnlDYWNoZVNldFByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVV
cE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUluc3RhbmNlT2YoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1
ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIGJvb2wg
d2FzRm91bmQpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVl
VmFsdWUuaXNDZWxsKCkpOyAvLyBzaG91bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2Vs
bHMuCi0gICAgCi0gICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIAotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICAKLSAg
ICAgICAgSlNDZWxsKiB2YWx1ZSA9IHZhbHVlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdmFsdWUtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFJlZlB0cjxB
Y2Nlc3NDYXNlPiBuZXdDYXNlOwotICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5h
bWljQ2FzdDxKU09iamVjdCo+KHZtLCBwcm90b3R5cGVWYWx1ZSk7Ci0gICAgICAgIGlmIChwcm90
b3R5cGUpIHsKLSAgICAgICAgICAgIGlmICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2
YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
SW5zdGFuY2VPZk1pc3MsIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
c3RydWN0dXJlLT5wcm90b3R5cGVRdWVyaWVzQXJlQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGVhY2ggdGhpcyB0byBkbyBwb2x5IHByb3RvLgotICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKLSAg
ICAgICAgICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUs
IHdhc0ZvdW5kID8gcHJvdG90eXBlIDogbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
SW5zdGFuY2VPZigKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZSwgd2FzRm91bmQpOwotCi0gICAgICAgICAgICAgICAg
aWYgKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nl
c3NDYXNlOjpJbnN0YW5jZU9mSGl0IDogQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmICghbmV3Q2FzZSkKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hl
YWJsZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Oklu
c3RhbmNlT2ZBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVy
KCkpKTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
bG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxs
cHRyLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQuZ2Vu
ZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5j
ZU9mUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRH
aXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQg
cmVwYXRjaEluc3RhbmNlT2YoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17
Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIGlm
ICh0cnlDYWNoZUluc3RhbmNlT2YoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUs
IHByb3RvdHlwZVZhbHVlLCBzdHViSW5mbywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCi0g
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9u
SW5zdGFuY2VPZkdlbmVyaWMpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCi17Ci0gICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRo
Q2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQ
dHJUYWc+KCkpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCi17Ci0gICAg
bGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3Ip
LnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlu
a1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZp
cnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwg
Y2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1
YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci19Ci0K
LXN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiBjYWxsZWUpCi17Ci0jaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIC8vIEVhY2ggV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc2hh
cmVzIHRoZSBzdHVicyBmcm9tIHRoZWlyIFdlYkFzc2VtYmx5Lk1vZHVsZSwgd2hpY2ggYXJlIHRo
ZXJlZm9yZSB0aGUgYXBwcm9wcmlhdGUgb3duZXIuCi0gICAgcmV0dXJuIGpzQ2FzdDxKU1dlYkFz
c2VtYmx5TW9kdWxlKj4oY2FsbGVlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi19Ci0KLXZvaWQgbGlua01vbm9tb3JwaGlj
Q2FsbCgKLSAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgSlNPYmplY3QqIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCi17Ci0g
ICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKLQotICAgIENhbGxGcmFtZSogY2FsbGVy
RnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgLy8gT3VyIGNhbGxlciBtdXN0
IGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9t
IFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotCi0gICAgLy8gV2ViQXNzZW1ibHkgLT4g
SlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9jay4KLSAgICBKU0NlbGwqIG93bmVy
ID0gaXNXZWJBc3NlbWJseU1vZHVsZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8g
d2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVy
Q29kZUJsb2NrOwotICAgIEFTU0VSVChvd25lcik7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5m
by5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0s
IG93bmVyLCBjYWxsZWUsIGNvZGVQdHIpOwotICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNh
bGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7Ci0KLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5
Rm9yKGNhbGxlckNvZGVCbG9jaykpCi0gICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAi
LCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2lu
KCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQg
YXQgIiwgY29kZVB0ciwgIlxuIik7Ci0KLSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAg
ICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlu
a0luZm8pOwotCi0gICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtT
bG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbGlua1Nsb3dGb3Iodm0s
IGNhbGxMaW5rSW5mbyk7Ci19Ci0KLXZvaWQgbGlua0RpcmVjdENhbGwoCi0gICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxl
ZUNvZGVCbG9jaywKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29k
ZVB0cikKLXsKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwotICAgIAotICAgIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAg
IFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBBU1NFUlQoIWNhbGxM
aW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBj
YWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9j
aykpOwotICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkK
LSAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxl
ckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1
bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsK
LQotICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0g
ICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxs
TGlua0luZm8pOwotfQotCi12b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0mIHZt
ID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxs
TGlua0luZm8pOwotfQotCi1zdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4gY29kZVJlZikKLXsKLSAgICBpZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKLSAg
ICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29kZUJsb2NrKCk7Ci0gICAgICAgIGlmICghY2FsbExp
bmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8uaW5p
dGlhbGl6ZURpcmVjdENhbGwoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWNhbGxMaW5r
SW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0gICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2
bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKLQotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by5zdHViKCkpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxUb1N0dWIo
KTsKLSAgICAgICAgfQotICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsgLy8gVGhp
cyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJvdGggZm9yIGRhdGEgYW5kIGNvZGUtYmFz
ZWQgY2FjaGVzLgotICAgIH0KLSAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7Ci0gICAgY2Fs
bExpbmtJbmZvLmNsZWFyU3R1YigpOwotICAgIGNhbGxMaW5rSW5mby5jbGVhclNsb3dTdHViKCk7
Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQotICAgICAgICBjYWxsTGlua0luZm8u
cmVtb3ZlKCk7Ci19Ci0KLXZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQotewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
LCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7
Ci0gICAgCi0gICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsK
LX0KLQotc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIGRhdGFMb2dMbklm
KHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spLAotICAgICAgICAiTGlu
a2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBj
YWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwg
Y2FsbExpbmtJbmZvKTsKLSAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxU
aHVuayk7Ci0gICAgY2FsbExpbmtJbmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1bmspKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJl
ZEJ5VmlydHVhbCgpOwotfQotCi1uYW1lc3BhY2Ugewotc3RydWN0IENhbGxUb0NvZGVQdHIgewot
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotfTsKLX0gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKLQot
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlh
bnQgbmV3VmFyaWFudCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8uYWxsb3dT
dHVicygpKTsKLQotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgLy8gRHVy
aW5nIGV4ZWN1dGlvbiBvZiBsaW5rUG9seW1vcnBoaWNDYWxsLCB3ZSBzdHJvbmdseSBhc3N1bWUg
dGhhdCB3ZSBuZXZlciBkbyBHQy4KLSAgICAvLyBHQyBqZXR0aXNvbnMgQ29kZUJsb2NrcywgY2hh
bmdlcyBDYWxsTGlua0luZm8gZXRjLiBhbmQgYnJlYWtzIGFzc3VtcHRpb24gZG9uZSBiZWZvcmUg
YW5kIGFmdGVyIHRoaXMgY2FsbC4KLSAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hp
bGUodm0pOwotICAgIAotICAgIGlmICghbmV3VmFyaWFudCkgewotICAgICAgICBsaW5rVmlydHVh
bEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4g
V2hlbiBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVl
IGlzIGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsK
LQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgIGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKTsKLQotICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0
dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlz
V2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0Nl
bGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKG93bmVyKTsKLQotICAgIENhbGxW
YXJpYW50TGlzdCBsaXN0OwotICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1
YiA9IGNhbGxMaW5rSW5mby5zdHViKCkpCi0gICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygp
OwotICAgIGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVl
KCkpCi0gICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3QgeyBDYWxsVmFyaWFudChvbGRDYWxs
ZWUpIH07Ci0gICAgCi0gICAgbGlzdCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3
VmFyaWFudCk7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNsb3N1cmUgY2FsbHMgdGhlbiBp
dCBtYWtlcyBzZW5zZSB0byB0cmVhdCBhbGwgb2YgdGhlbSBhcyBjbG9zdXJlIGNhbGxzLgotICAg
IC8vIFRoaXMgbWFrZXMgc3dpdGNoaW5nIG9uIGNhbGxlZSBjaGVhcGVyLiBJdCBhbHNvIHByb2R1
Y2VzIHByb2ZpbGluZyB0aGF0J3MgZWFzaWVyIG9uIHRoZSBERkc7Ci0gICAgLy8gdGhlIERGRyBk
b2Vzbid0IHJlYWxseSB3YW50IHRvIGRlYWwgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGNsb3N1cmUg
YW5kIG5vbi1jbG9zdXJlIGNhbGxlZXMuCi0gICAgYm9vbCBpc0Nsb3N1cmVDYWxsID0gZmFsc2U7
Ci0gICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgIHsKLSAgICAgICAgaWYgKHZh
cmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7Ci0gICAgICAgICAgICBsaXN0ID0gZGVzcGVjaWZpZWRW
YXJpYW50TGlzdChsaXN0KTsKLSAgICAgICAgICAgIGlzQ2xvc3VyZUNhbGwgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzQ2xvc3Vy
ZUNhbGwpCi0gICAgICAgIGNhbGxMaW5rSW5mby5zZXRIYXNTZWVuQ2xvc3VyZSgpOwotICAgIAot
ICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7Ci0gICAgVmVjdG9yPGlu
dDY0X3Q+IGNhc2VWYWx1ZXM7Ci0gICAgCi0gICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNl
cyBhcmUuCi0gICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgewotICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmV4ZWN1
dGFibGUoKSAmJiAhdmFyaWFudC5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAg
ICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxl
KCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKLSAgICAgICAgICAgIC8vIElmIHdlIGNh
bm5vdCBoYW5kbGUgYSBjYWxsZWUsIGVpdGhlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBDb2Rl
QmxvY2sgb3IgYmVjYXVzZSBhcml0eSBtaXNtYXRjaCwKLSAgICAgICAgICAgIC8vIGFzc3VtZSB0
aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEgdmlydHVhbCBjYWxs
LgotICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2sgfHwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAg
bGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQ2NF90
IG5ld0Nhc2VWYWx1ZSA9IDA7Ci0gICAgICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAg
ICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuZXhlY3V0
YWJsZSgpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGgg
Zm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCi0gICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MzExCi0gICAgICAgICAg
ICBpZiAoIW5ld0Nhc2VWYWx1ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KGZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXdDYXNl
VmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAg
ICAgaWYgKGNhc2VWYWx1ZXMuY29udGFpbnMobmV3Q2FzZVZhbHVlKSkgewotICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkVSUk9SOiBBdHRlbXB0IHRvIGFkZCBkdXBsaWNhdGUgY2FzZSB2YWx1ZS5c
biIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4aXN0aW5nIGNhc2UgdmFsdWVzOiAiKTsK
LSAgICAgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9y
IChhdXRvJiB2YWx1ZSA6IGNhc2VWYWx1ZXMpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
Y29tbWEsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8gYWRkOiAiLCBuZXdDYXNlVmFsdWUsICJcbiIp
OwotICAgICAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhbnQgbGlzdDogIiwgbGlzdER1bXAoY2Fs
bENhc2VzKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNhbGxDYXNlcy5hcHBl
bmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50LCBjb2RlQmxvY2spKTsKLSAgICAgICAgY2Fz
ZVZhbHVlcy5hcHBlbmQobmV3Q2FzZVZhbHVlKTsKLSAgICB9Ci0gICAgQVNTRVJUKGNhbGxDYXNl
cy5zaXplKCkgPT0gY2FzZVZhbHVlcy5zaXplKCkpOwotCi0gICAgLy8gSWYgd2UgYXJlIG92ZXIg
dGhlIGxpbWl0LCBqdXN0IHVzZSBhIG5vcm1hbCB2aXJ0dWFsIGNhbGwuCi0gICAgdW5zaWduZWQg
bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplOwotICAgIGlmIChpc1dlYkFzc2VtYmx5
KQotICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjpt
YXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JXZWJBc3NlbWJseVRvSlMoKTsKLSAg
ICBlbHNlIGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjp0b3BUaWVy
SklUKCkpCi0gICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlv
bnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZvclRvcFRpZXIoKTsKLSAgICBl
bHNlCi0gICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6
Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSgpOwotCi0gICAgLy8gV2UgdXNlIGxp
c3Quc2l6ZSgpIGluc3RlYWQgb2YgY2FsbENhc2VzLnNpemUoKSBiZWNhdXNlIHdlIHJlc3BlY3Qg
Q2FsbFZhcmlhbnQgc2l6ZSBmb3Igbm93LgotICAgIGlmIChsaXN0LnNpemUoKSA+IG1heFBvbHlt
b3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwg
Y2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
VmVjdG9yPENhbGxUb0NvZGVQdHI+IGNhbGxzKGNhbGxDYXNlcy5zaXplKCkpOwotICAgIFVuaXF1
ZUFycmF5PHVpbnQzMl90PiBmYXN0Q291bnRzOwotCi0gICAgaWYgKCFpc1dlYkFzc2VtYmx5ICYm
IGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkgewot
ICAgICAgICBmYXN0Q291bnRzID0gbWFrZVVuaXF1ZUFycmF5PHVpbnQzMl90PihjYWxsQ2FzZXMu
c2l6ZSgpKTsKLSAgICAgICAgbWVtc2V0KGZhc3RDb3VudHMuZ2V0KCksIDAsIGNhbGxDYXNlcy5z
aXplKCkgKiBzaXplb2YodWludDMyX3QpKTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVnIGNhbGxl
ZUdQUiA9IGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKTsKLQotICAgIGJvb2wgaXNEYXRhSUMgPSBj
YWxsTGlua0luZm8uaXNEYXRhSUMoKTsKLSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChjYWxsZXJD
b2RlQmxvY2spOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVyPiBmcmFt
ZVNodWZmbGVyOwotICAgIGlmIChjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKSB7Ci0g
ICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKTsKLSAgICAgICAgZnJhbWVT
aHVmZmxlciA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlu
a0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBj
ZWxsLCBhbmQgd2UgY2FuCi0gICAgICAgIC8vIHVzZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0
aGlzIGJ1eXMgdXMuCi0gICAgICAgIGZyYW1lU2h1ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgp
OwotI2VuZGlmCi0gICAgICAgIGZyYW1lU2h1ZmZsZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKLSAg
ICB9Ci0KLSAgICBHUFJSZWcgY29tcGFyaXNvblZhbHVlR1BSOwotICAgIGlmIChpc0Nsb3N1cmVD
YWxsKSB7Ci0gICAgICAgIGlmIChmcmFtZVNodWZmbGVyKQotICAgICAgICAgICAgY29tcGFyaXNv
blZhbHVlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNj
cmF0Y2hHUFIoY2FsbGVlR1BSKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcGFyaXNvblZhbHVl
R1BSID0gY2FsbGVlR1BSOwotCi0gICAgR1BSUmVnIGZhc3RDb3VudHNCYXNlR1BSOwotICAgIGlm
IChmcmFtZVNodWZmbGVyKQotICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZs
ZXItPmFjcXVpcmVHUFIoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIg
PQotICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQ
UiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgfQotICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZh
c3RDb3VudHNCYXNlR1BSKTsKLQotICAgIGlmICghZnJhbWVTaHVmZmxlciAmJiBjYWxsTGlua0lu
Zm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgIC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IGNh
bGxlZUdQUiBpcyBub3QgYSBjYWxsZWUgc2F2ZSByZWdpc3RlciBpbiB0aGUgc2xvdyBwYXRoLgot
ICAgICAgICBBU1NFUlQoIWNhbGxlckNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5m
aW5kKGNhbGxlZUdQUikpOwotICAgICAgICBzdHViSml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIGlm
IChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5j
dGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkKLSAgICAgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIsIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSKSk7Ci0jZWxzZQotICAg
ICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMg
YSBjZWxsLgotI2VuZGlmCi0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBh
dGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCi0gICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7Ci0KLSAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpT
RnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIGNvbXBhcmlzb25WYWx1
ZUdQUik7Ci0gICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNvbXBhcmlzb25WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKLSAgICAgICAgc3R1YkppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb21wYXJpc29uVmFsdWVHUFIsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
LCBjb21wYXJpc29uVmFsdWVHUFIpOwotICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJnN0dWJK
aXQpOwotICAgIH0KLQotICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZh
bHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7Ci0gICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOwotICAgIHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShzdHVi
Sml0KSkgewotICAgICAgICBzaXplX3QgY2FzZUluZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRl
eCgpOwotICAgICAgICAKLSAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tj
YXNlSW5kZXhdLnZhcmlhbnQoKTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgICAgICBpZiAodmFyaWFudC5leGVjdXRh
YmxlKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklU
Q29kZUZvckNhbGwoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvZGVQdHIgPSBqc1Rv
V2FzbUlDQ29kZVB0cih2bSwgY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpLCB2YXJp
YW50LmZ1bmN0aW9uKCkpOwotICAgICAgICAgICAgaWYgKCFjb2RlUHRyKQotICAgICAgICAgICAg
ICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNh
bGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7Ci0g
ICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3IoQ29kZUZvckNhbGwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZmFzdENv
dW50cykgewotICAgICAgICAgICAgc3R1YkppdC5hZGQzMigKLSAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbmVlZHNEb25lSnVtcCA9IGZhbHNlOwotICAg
ICAgICBpZiAoZnJhbWVTaHVmZmxlcikgewotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
c3R1YkppdCwgZnJhbWVTaHVmZmxlci0+c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
Ci0gICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2Fs
bCgpOwotICAgICAgICB9IGVsc2UgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAg
ICAgICAgICAgIHN0dWJKaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAg
Y2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc0RhdGFJQykKLSAgICAgICAgICAgICAgICBjYWxs
c1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5u
ZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIG5lZWRzRG9uZUp1bXAgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNv
ZGVQdHI7Ci0gICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKQotICAgICAgICAgICAgZG9uZS5hcHBl
bmQoc3R1YkppdC5qdW1wKCkpOwotICAgIH0KLSAgICAKLSAgICBzbG93UGF0aC5saW5rKCZzdHVi
Sml0KTsKLSAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKLQot
ICAgIGlmIChmcmFtZVNodWZmbGVyKSB7Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VH
UFIoY2FsbGVlR1BSKTsKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJp
c29uVmFsdWVHUFIpOwotICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3Vu
dHNCYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBmcmFtZVNodWZmbGVy
LT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApKTsKLSNlbHNlCi0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFs
dWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7Ci0jZW5kaWYKLSAgICAgICAgZnJh
bWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
c3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgfQotICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BS
SW5mbzo6cmVnVDMpOwotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICBpZiAoaXNEYXRhSUMgJiYg
IWNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgLy8gV2Ugd2VyZSBjYWxsZWQg
ZnJvbSB0aGUgZmFzdCBwYXRoLCBnZXQgcmlkIG9mIGFueSByZW1uYW50cyBvZiB0aGF0Ci0gICAg
ICAgIC8vIHdoaWNoIG1heSBleGlzdC4gVGhpcyByZWFsbHkgb25seSBtYXR0ZXJzIGZvciB4ODYs
IHdoaWNoIGFkanVzdHMKLSAgICAgICAgLy8gU1AgZm9yIGNhbGxzLgotICAgICAgICBzdHViSml0
LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUNCk7Ci0gICAgfQot
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJl
Z1Q0KTsKLSAgICAKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86OnJlZ1Q0KTsKLSAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJK
aXQuanVtcCgpOwotICAgICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQs
IG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAg
ICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXpl
KCkgPT0gY2FsbHMuc2l6ZSgpKTsKLSAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0
ciA6IGNhbGxzKSB7Ci0jaWYgQ1BVKEFSTV9USFVNQjIpCi0gICAgICAgIC8vIFRhaWwgY2FsbCBz
cGVjaWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJl
IGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJlc3MKLSAgICAgICAgLy8gd2l0aCBhIG5vbi1k
ZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdp
dGggYSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KLSAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2Fs
bFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOwotICAg
ICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRh
dGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7
Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0
cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNy
ZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQpKSk7Ci0jZWxzZQotICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRh
Zz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoIWRv
bmUuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8u
ZG9uZUxvY2F0aW9uKCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRo
dW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAKLSAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRv
cHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVf
Q09ERV9GT1IoCi0gICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRT
dHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9y
ICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2Vi
QXNzZW1ibHkgPyAiV2ViQXNzZW1ibHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRh
dGEoKSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0g
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCi0g
ICAgICAgIHZtLCBvd25lciwgY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8s
IGNhbGxDYXNlcywKLSAgICAgICAgV1RGTW92ZShmYXN0Q291bnRzKSkpOwotCi0gICAgLy8gVGhl
IG9yaWdpbmFsIHNsb3cgcGF0aCBpcyB1bnJlYWNoYWJsZSBvbiA2NC1iaXRzLCBidXQgc3RpbGwK
LSAgICAvLyByZWFjaGFibGUgb24gMzItYml0cyBzaW5jZSBhIG5vbi1jZWxsIGNhbGxlZSB3aWxs
IGFsd2F5cwotICAgIC8vIHRyaWdnZXIgdGhlIHNsb3cgcGF0aAotICAgIGxpbmtTbG93Rm9yKHZt
LCBjYWxsTGlua0luZm8pOwotCi0gICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBz
dHViIHJvdXRpbmUsIHRoYXQgb25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5k
IHNlZXMKLSAgICAvLyB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgotICAgIGNhbGxMaW5r
SW5mby5zZXRTdHViKFdURk1vdmUoc3R1YlJvdXRpbmUpKTsKLSAgICAKLSAgICAvLyBUaGUgY2Fs
bCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhhcyBhIGNhbGwgY2FjaGUgYXBhcnQgZnJvbSB0aGUganVt
cCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbAotICAgIC8vIHN0dWIuCi0gICAgaWYgKGNhbGxMaW5r
SW5mby5pc09uTGlzdCgpKQotICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZv
aWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkp
OwotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgIGNh
c2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6
Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lQnlJZDoKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5VmFsOgotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQg
cmVzZXRQdXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBQdXRCeUtpbmQga2luZCkKLXsKLSAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG9wdGltaXplZEZ1bmN0aW9uOwotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgUHV0QnlL
aW5kOjpCeUlkOiB7Ci0gICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5cGUg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFk
UHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwotICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUp
Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAg
ICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRp
bWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERl
ZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogewotICAgICAgICB1c2lu
ZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHVi
SW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplKQot
ICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpCi0g
ICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJp
dmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRHZW5lcmljIHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZSkKLSAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRl
RmllbGRPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgfQotCi0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHV0
QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCkKLXsKLSAgICBpZiAo
a2luZCA9PSBEZWxCeUtpbmQ6OkJ5SWQpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKLSAgICBlbHNl
Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQot
Ci12b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKGtpbmQp
KTsKLSAgICBpZiAoa2luZCA9PSBJbkJ5S2luZDo6QnlJZCkKLSAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICBlbHNl
Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEhhc1ByaXZh
dGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsK
LX0KLQotdm9pZCByZXNldEluc3RhbmNlT2YoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNj
ZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NO
b3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNl
dFNldFByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6
cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9X
YXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVj
dCogY2FsbGVlKQotewotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBpZiAoIWNhbGxlZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5
bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgY2FsbGVlKSkKLSAgICAgICAgcmV0
dXJuIHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlwb2ludCgpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0odm0pOwotICAgIFVOVVNFRF9QQVJBTShraW5kKTsKLSAgICBVTlVTRURfUEFSQU0oY2Fs
bGVlKTsKLSNlbmRpZgotICAgIHJldHVybiBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlY2UzNzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50
aWZpZXIuaCIKLSNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgotI2luY2x1ZGUgIlB1dEtpbmQuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWVudW0gY2xhc3MgR2V0QnlLaW5kIHsKLSAgICBCeUlkLAot
ICAgIEJ5VmFsLAotICAgIFRyeUJ5SWQsCi0gICAgQnlJZFdpdGhUaGlzLAotICAgIEJ5SWREaXJl
Y3QsCi0gICAgUHJpdmF0ZU5hbWUsCi0gICAgUHJpdmF0ZU5hbWVCeUlkLAotfTsKLQotZW51bSBj
bGFzcyBQdXRCeUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlWYWwsCi19OwotCi1lbnVtIGNsYXNz
IERlbEJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBCeVZhbAotfTsKLQotZW51bSBjbGFzcyBJbkJ5
S2luZCB7Ci0gICAgQnlJZCwKLSAgICBCeVZhbCwKLSAgICBQcml2YXRlTmFtZQotfTsKLQotdm9p
ZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFs
dWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRj
aEdldEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtp
bmQpOwotdm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRL
aW5kLCBFQ01BTW9kZSk7Ci12b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsK
LXZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRl
UHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwg
U3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQsIEVDTUFNb2RlKTsKLXZvaWQgcmVwYXRjaElu
QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50
aWZpZXIsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2Jq
ZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdh
c0ZvdW5kLCAgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJy
YW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5k
KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoSW5zdGFu
Y2VPZihKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUg
cHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGJvb2wgd2FzRm91bmQpOwotdm9pZCBsaW5r
TW9ub21vcnBoaWNDYWxsKFZNJiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2Nr
KiwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KTsKLXZvaWQgbGlua0RpcmVjdENhbGwoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJs
b2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua1Ns
b3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7Ci12b2lkIHVubGlua0NhbGwoVk0mLCBD
YWxsTGlua0luZm8mKTsKLXZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKLXZvaWQgcmVzZXRHZXRC
eShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0
UHV0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwotdm9pZCBy
ZXNldERlbEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKLXZv
aWQgcmVzZXRJbkJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwot
dm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owotdm9pZCByZXNldEluc3RhbmNlT2YoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
LXZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwotdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxv
Y2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4ganNUb1dhc21JQ0NvZGVQdHIoVk0mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVj
dCogY2FsbGVlKTsKLQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5k
ZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1ZjdiNzg2NDExZDg1NWIyYTFkZTQ3Yy4uZGJkNWFiZDM3ODhk
NzFiODAzMDViYjg1MWZiY2MyNzEzZTg3YjAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtMzQ0LDQ4ICszNDQsMjUgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yUmVndWxh
ckNhbGwoVk0mIHZtKQogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpS
ZWd1bGFyLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QoVk0mIHZtKQot
ewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2Rl
Rm9yQ29uc3RydWN0KTsKLX0KLQogc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdmlydHVhbFRodW5rRm9yVGFpbENhbGwoVk0mIHZtKQogewogICAgIHJldHVybiB2
aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0Zv
clRhaWxDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0s
IENhbGxNb2RlOjpUYWlsLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2Fs
bChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OkNv
bnN0cnVjdCwgQ29kZUZvckNhbGwpOwotfQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDb25zdHJ1Y3QoVk0mIHZt
KQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpDb25zdHJ1Y3Qs
IENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0
dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKLSAgICBhdXRvIG1vZGUg
PSBjYWxsTGlua0luZm8uY2FsbE1vZGUoKTsKLSAgICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8u
c3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgYXV0byBnZW5lcmF0b3IgPSBbJl0gKCkgLT4gVGh1
bmtHZW5lcmF0b3IgewotICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChj
YWxsTW9kZSkgewogICAgICAgICBjYXNlIENhbGxNb2RlOjpSZWd1bGFyOgotICAgICAgICAgICAg
aWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxU
aHVua0ZvclJlZ3VsYXJDYWxsOwotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJl
Z3VsYXJDb25zdHJ1Y3Q7CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxh
ckNhbGw7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OlRhaWw6Ci0gICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9y
VGFpbENhbGw7Ci0gICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVj
dDsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsKICAgICAgICAg
Y2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZv
ckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENh
bGw7CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29uc3RydWN0
OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCAwZjlmNmUyZDM2
ZjZkZDIzZTE4NzI2YWNlNjMxNGEzMGEyMDFkYmNlLi5hYjdjZjY2YzQyMTUxZWUwMTk1OGMxYWIy
MmYyOWZjZDhkZDcwMTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0KIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihW
TSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBo
aWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9y
KFZNJiwgQ2FsbE1vZGUpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IGU4ZGFmZjdkODhiMzBjNmJmODQ3MjMxNGJl
MmYxYzc5NjBmMjQ3ZjUuLmQwYjM3Mzg5MjFhNGYwMDE1MTJlN2RlZTNhODQ0M2M1MTkzYmQyNmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBAIC01OCw2ICs1
OCw3IEBAIGV4dGVybiAiQyIgdm9pZCB3YXNtX2VudHJ5KHZvaWQqLCB2b2lkKiwgdm9pZCopOwog
ZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lKHZvaWQpOwogZXh0
ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMi
IHZvaWQgdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lKHZvaWQpOworZXh0ZXJuICJD
IiB2b2lkIHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRl
cm4gIkMiIHZvaWQgZXhjZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMi
IHZvaWQgcmV0dXJuRnJvbUxMSW50VHJhbXBvbGluZSh2b2lkKTsKICNlbmRpZgpAQCAtMTUzLDcg
KzE1NCw3IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgICAgICBj
b2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZykpOworICAg
ICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJU
YWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3Qo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
Pjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0
aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9s
aW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC0xNjEsMTEgKzE2MiwxOSBAQCB2b2lkIGluaXRp
YWxpemUoKQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3Jl
YXRlVGFpbENhbGxHYXRlKEpTRW50cnlTbG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgY29k
ZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJv
bUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUp
KSkpOwogICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2ln
bmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFB0clRhZyldID0gY29kZVJlZi5nZXQo
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CisgICAgeworICAgICAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+PiBjb2RlUmVmOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAg
ICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRh
ZywgZmFsc2UpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3Qo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
Pjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0
aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pT
RW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRy
VGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQog
ICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlv
bnM6OnVzZUpJVCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKaW5kZXggMGM0ODUzNGE4Mjk5ZjM2MDYyZWQ0YjQxMTg2MjdjNTc4NDYzN2E3OC4u
NjZiOGRlOGY1YjkyZjYzNTNkNWVjNWIwZDBjZGY5MTRjMDJjMmUwMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC02Miw2ICs2Miw3IEBA
CiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm90
b0NhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRl
ICJSZXBhdGNoSW5saW5lcy5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKICNpbmNsdWRl
ICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKQEAgLTU4Miw2ICs1ODMs
MTcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3RhY2tfY2hlY2spCiAgICAgTExJTlRfUkVUVVJO
X1RXTyhwYywgY2FsbEZyYW1lKTsKIH0KIAorZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
bGxpbnRfbGlua19jYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICByZXR1cm4g
bGlua0ZvcihjYWxsZWVGcmFtZSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSwgY2FsbExpbmtJbmZvKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxp
bnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICBKU0NlbGwq
IGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhG
dW5jdGlvbihqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBjYWxsZWVGcmFt
ZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworfQorCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X29iamVjdCkKIHsKICAgICBMTElOVF9CRUdJ
TigpOwpAQCAtMTgxOSw3ICsxODMxLDggQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAg
ICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAg
ICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5j
dGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAg
ICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBMTElOVF9DQUxM
X1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1
cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0
clRhZyk7CisgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVy
RnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRV
Uk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVF
bnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzbG93UGF0aExvZygiQ2FsbCBjYWxsZWUgaXMg
bm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwgIlxuIik7CkBAIC0xODM4LDcgKzE4NTEsOCBAQCBz
dGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFz
T2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9
IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9i
amVjdCh2bSksIGNhbGxlZUZyYW1lKTsKICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwot
ICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTElu
dDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVl
RnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgIExMSU5U
X0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5
UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc2xvd1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxl
ZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4NDcsNyArMTg2MSw3
IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsCiAgICAgTExJTlRfQ0FMTF9USFJPVyhnbG9iYWxP
YmplY3QsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7
CiB9CiAKLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1Zh
bHVlLCBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbnVsbHB0cikKK2lubGluZSBT
bG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKQogewogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTg2
MiwxNCArMTg3Niw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAgICAgIGlmIChhdXRv
KiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0s
IGNhbGxlZUFzVmFsdWUpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0KLSAgICAgICAgICAg
IGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJs
b2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKLSAgICAgICAgICAgIH0KLQogICAgICAg
ICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3Qs
IGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcp
OworICAgICAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1l
QW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGds
b2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRy
eVB0clRhZyk7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIGhhbmRsZUhvc3RDYWxsKGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7CiAg
ICAgfQpAQCAtMTkwNCw3NCArMTkxMyw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0
VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAg
fQogCiAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgCi0gICAgaWYgKCFMTElOVF9BTFdBWVNf
QUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBjYWxsTGlua0luZm8t
Pmxpbmsodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICAgICAgaWYg
KGNvZGVCbG9jaykKLSAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxs
RnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgfQotCiAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpT
RW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgTExJTlRfQ0FM
TF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1pbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgT3AmJiBieXRlY29kZSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXggPSAwKQotewotICAgIC8vIFRoaXMgbmVl
ZHMgdG86Ci0gICAgLy8gLSBTZXQgdXAgYSBjYWxsIGZyYW1lLgotICAgIC8vIC0gRmlndXJlIG91
dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBpbGUgaXQgaWYgbmVjZXNzYXJ5LgotICAgIC8vIC0gSWYg
cG9zc2libGUsIGxpbmsgdGhlIGNhbGwncyBpbmxpbmUgY2FjaGUuCi0gICAgLy8gLSBSZXR1cm4g
YSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwg
ZnJhbWUuCi0gICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxs
RnJhbWUsIGNhbGxlZUZvcihieXRlY29kZSwgY2hlY2twb2ludEluZGV4KSk7Ci0gICAgCi0gICAg
Q2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIHN0YWNrT2Zmc2V0SW5SZWdpc3Rl
cnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpOwotICAgIAotICAgIGNhbGxlZUZy
YW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludEluZGV4KSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVu
Y2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVl
QXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAg
ICAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0g
ICAgcmV0dXJuIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSwgJmNh
bGxMaW5rSW5mb0ZvcihtZXRhZGF0YSwgY2hlY2twb2ludEluZGV4KSk7Ci19Ci0KLUxMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsKQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9Q
QygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFz
PE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3RhaWxfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcFRhaWxDYWxs
PigpLCBDb2RlRm9yQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Y29uc3RydWN0KQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBn
ZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ29uc3RydWN0PigpLCBD
b2RlRm9yQ29uc3RydWN0KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9p
dGVyYXRvcl9vcGVuX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBn
ZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JPcGVuPigp
LCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGwpKTsKLX0KLQotTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCkKLXsKLSAgICBMTElO
VF9CRUdJTigpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1l
LCBwYy0+YXM8T3BJdGVyYXRvck5leHQ+KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yTmV4dDo6
Y29tcHV0ZU5leHQpKTsKKyAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVy
RnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2Jh
bE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0
clRhZyk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zv
cl92YXJhcmdzKQpAQCAtMjA0Myw4ICsxOTg3LDggQEAgZW51bSBjbGFzcyBTZXRBcmd1bWVudHNX
aXRoIHsKICAgICBDdXJyZW50QXJndW1lbnRzCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwg
U2V0QXJndW1lbnRzV2l0aCBzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgU2V0QXJndW1lbnRz
V2l0aCBzZXQ+CitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kKQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwogCkBAIC0yMDUzLDExICsxOTk3
LDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9m
IG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3A+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9
IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSk7CiAKICAgICBDYWxsRnJh
bWUqIGNhbGxlZUZyYW1lID0gdm0ubmV3Q2FsbEZyYW1lUmV0dXJuVmFsdWU7Ci0KLSAgICBpZiAo
c2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCkgeworICAgIHVuc2lnbmVkIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID0gdm0udmFyYXJnc0xlbmd0aCArIDE7CisgICAgaWYgY29uc3Rl
eHByIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KSB7CiAgICAgICAgIHNldHVwVmFy
YXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUs
IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGdldE9wZXJhbmQo
Y2FsbEZyYW1lLCBieXRlY29kZS5tX2FyZ3VtZW50cyksIGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmcs
IHZtLnZhcmFyZ3NMZW5ndGgpOwogICAgICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihn
bG9iYWxPYmplY3QpOwogICAgIH0gZWxzZQpAQCAtMjA2NywyNyArMjAxMiwzMCBAQCBpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJh
bWUtPnNldEN1cnJlbnRWUEMocGMpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOworICAgIG1l
dGFkYXRhLm1fY2FsbExpbmtJbmZvLnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKworICAgIGF1dG8qIGNhbGxlclNQID0gY2Fs
bGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRf
UkVUVVJOX1RXTyhwYywgY2FsbGVyU1ApOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFy
YXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVj
dCk7CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNX
aXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2
YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxs
LCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BU
YWlsQ2FsbFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywg
Q29kZUZvckNhbGwpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWls
Q2FsbEZvcndhcmRBcmd1bWVudHM+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1
bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzKTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9w
VGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1l
bnRzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1Nl
dHVwPE9wQ29uc3RydWN0VmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCwg
U2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29u
c3RydWN0VmFyYXJncywgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBD
b2RlRm9yQ29uc3RydWN0KTsKIH0KIAogaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25D
YWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmV0dXJuUG9pbnQpCkBAIC0yMTEwLDcg
KzIwNTgsOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAogICAgIHZtLmVuY29kZWRI
b3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGV2YWwoZ2xvYmFsT2JqZWN0LCBj
YWxsZWVGcmFtZSwgYnl0ZWNvZGUubV9lY21hTW9kZSkpOwogICAgIERpc2FsbG93R0MgZGlzYWxs
b3dHQzsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBM
TEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVG
cmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxM
X1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5W
YWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRh
Zyk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBlMjBh
MGRmYzZiODdhY2Q2MjI2OGU4OGFhNmFhOTY0ZmI2ZTA5YjY2Li5kNDM4ZmNiMzM5ZGFmZTM3YTNj
MTQxZGJlMjRhNmFkMjExMjliYjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuaApAQCAtMzgsNiArMzgsOCBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV9vcGVyYW5kKENhbGxGcmFt
ZSosIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpIFJFRkVS
RU5DRURfRlJPTV9BU007CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFj
ZV92YWx1ZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSBSRUZFUkVOQ0VEX0ZST01fQVNNOworZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxGcmFtZSosIEpTQ2VsbCosIENh
bGxMaW5rSW5mbyosIEpTQ2VsbCopOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxp
bnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2Vs
bCopOwogZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUq
LCBKU0NlbGwqKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIAogI2RlZmluZSBM
TElOVF9TTE9XX1BBVEhfREVDTChuYW1lKSBcCkBAIC0xMTksOSArMTIxLDYgQEAgTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhw
KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMp
OwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuY19l
eHApOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zZXRfZnVuY3Rpb25f
bmFtZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGwpOwotTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpOwotTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3QpOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKTsKIExMSU5UX1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1
bWVudHMpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFy
Z3MpOwpAQCAtMTMxLDggKzEzMCw2IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jYWxsX2V2YWwpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9jYWxsX2V2YWxfd2lkZTE2KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfY2FsbF9ldmFsX3dpZGUzMik7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX2l0ZXJhdG9yX29wZW5fY2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX3RlYXJfb2ZmX2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX3N0cmNhdCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX3RvX3ByaW1pdGl2ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmNwcAppbmRleCA0NjJjYmZiZTRlMzQ1Njg0NWUwNWFhOGJjMGM0ODExNTNjYmI4ZDBhLi4x
NjAzYzJjNzg1NGM5OTliZTllNmM1NzA1MzM2Y2ZmNzQyNzI5MGIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTM0Niw5ICszNDYsOSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVu
ayh2b2lkKiBwb2ludGVyLCBQdAogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQu
Y2FsbChHUFJJbmZvOjpyZWdUMywgdGFnKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBqaXQuZmFySnVtcChH
UFJJbmZvOjpyZWdUMywgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpy
ZWdUNSwgdGFnKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9p
bnRlciksIEdQUkluZm86OnJlZ1Q1KTsKKyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUNSwg
T3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkxMSW50VGh1bmspOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTElu
dCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKQEAgLTM2NiwxMyArMzY2LDE1IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1
bmsodm9pZCogcG9pbnRlciwKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
TmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAiTExJbnQgJXMgd2FzbSBjYWxsIGdhdGUgdGh1bmsiLCBu
YW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4g
Y3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyB0YWcpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZywgYm9vbCB1
bnRhZykKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgaml0LnVudGFnUHRyKEdQUklu
Zm86OmFyZ3VtZW50R1BSMiwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSAgICBqaXQudmFsaWRhdGVV
bnRhZ2dlZFB0cihBUk02NFJlZ2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0g
ICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDAsIHRhZyk7CisgICAgaWYgKHVudGFnKSB7Cisg
ICAgICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJz
Ojpscik7CisgICAgICAgIGppdC52YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjps
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICB9CisgICAgaml0LmZhckp1bXAoR1BSSW5m
bzo6YXJndW1lbnRHUFI3LCB0YWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywg
IkxMSW50IHRhaWwgY2FsbCBnYXRlIHRodW5rIik7CkBAIC01NzMsOCArNTc1LDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJldHVybkxvY2F0aW9uVGh1bmsoT3Bjb2Rl
SUQgb3Bjb2RlSUQsIE9wY28KICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3Jf
b3BlbikKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3JfbmV4dCkKICAgICBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0KQotICAgIExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdykKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3Bf
Y29uc3RydWN0X3ZhcmFyZ3Nfc2xvdykKKyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2Fs
bF92YXJhcmdzKQorICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJn
cykKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X2lkKQogICAgIExMSU5UX1JF
VFVSTl9MT0NBVElPTihvcF9nZXRfYnlfdmFsKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihv
cF9wdXRfYnlfaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCmlu
ZGV4IGI4N2M0MjBjYmU0MDJhMWYwY2YwODY4MTA3YjVhZmQ2ZGJjZjU0YWMuLjA1ZWM2MDFjMDE2
NGNiOTU0YjczYTIxYzczNTFmZjAxMGZlYTcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFRodW5rcy5oCkBAIC04OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGppdENhZ2VQdHJUaHVuaygpOwogI2lmIENQVShBUk02
NEUpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVK
U0dhdGVUaHVuayh2b2lkKiwgUHRyVGFnLCBjb25zdCBjaGFyKik7CiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqLCBQ
dHJUYWcsIGNvbnN0IGNoYXIqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcpOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZywgYm9v
bCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBsb29wT1NS
RW50cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+IHdhc21PU1JFbnRyeUdhdGVUaHVuaygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4
IGJiODhiNmZkYjA5OWI0OTlhZTZmZjRlODEwMTAxNTA0ZGFhNmQ0ZTMuLjNhMjUyMzMwN2I0Y2Qw
MGU5MjYwMWRmNjAwZDczNWJiNGY4OTY3MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTU1MSw2ICs1NTEsNyBAQCBj
b25zdCBTeW1ib2xUeXBlID0gY29uc3RleHByIFN5bWJvbFR5cGUKIGNvbnN0IE9iamVjdFR5cGUg
PSBjb25zdGV4cHIgT2JqZWN0VHlwZQogY29uc3QgRmluYWxPYmplY3RUeXBlID0gY29uc3RleHBy
IEZpbmFsT2JqZWN0VHlwZQogY29uc3QgSlNGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIgSlNGdW5j
dGlvblR5cGUKK2NvbnN0IEludGVybmFsRnVuY3Rpb25UeXBlID0gY29uc3RleHByIEludGVybmFs
RnVuY3Rpb25UeXBlCiBjb25zdCBBcnJheVR5cGUgPSBjb25zdGV4cHIgQXJyYXlUeXBlCiBjb25z
dCBEZXJpdmVkQXJyYXlUeXBlID0gY29uc3RleHByIERlcml2ZWRBcnJheVR5cGUKIGNvbnN0IFBy
b3h5T2JqZWN0VHlwZSA9IGNvbnN0ZXhwciBQcm94eU9iamVjdFR5cGUKQEAgLTExNTEsMjcgKzEx
NTIsMjcgQEAgbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmkKICAgICAgICAgY2xvb3BDYWxsSlNGdW5j
dGlvbiBjYWxsZWUKICAgICBlbHNpZiBBUk02NEUKICAgICAgICAgbWFjcm8gY2FsbE5hcnJvdygp
Ci0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlND
Q29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0clNpemUs
IGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0
clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRP
ZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkgKiBQdHJT
aXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNh
bGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9saW5lXyVvcGNvZGVOYW1lJToKLSAgICAg
ICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJU
YWcKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUxNigpCi0gICAgICAgICAg
ICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1h
cCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXplLCBhMgot
ICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcK
KyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0ND
b25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0
clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
Y2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUx
NjoKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUs
IGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUzMigpCi0g
ICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29u
ZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJT
aXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNh
bGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zm
c2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lk
ZTMyKSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5h
bWUlX3dpZGUzMjoKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAg
IGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKLSAgICAgICAgbW92ZSBjYWxsZWUs
IHQzCisgICAgICAgIG1vdmUgY2FsbGVlLCB0NQogICAgICAgICBzaXplKGNhbGxOYXJyb3csIGNh
bGxXaWRlMTYsIGNhbGxXaWRlMzIsIG1hY3JvIChnZW4pIGdlbigpIGVuZCkKICAgICBlbHNlCiAg
ICAgICAgIGNhbGwgY2FsbGVlLCBjYWxsUHRyVGFnCkBAIC0xMjA5LDEyICsxMjEwLDIzIEBAIG1h
Y3JvIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZh
bHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAgICAgZW5kCiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJl
Z3VsYXJDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcp
Ci0gICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKK21hY3JvIHByZXBhcmVGb3JSZWd1
bGFyQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKIGVuZAogCi0jIHNwIHBvaW50cyB0
byB0aGUgbmV3IGZyYW1lCi1tYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwg
dGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKK21hY3JvIGludm9rZUZvclJlZ3VsYXJD
YWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRh
ZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0
LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUs
IGNhbGxQdHJUYWcpCitlbmQKKworIyB0NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBv
bHltb3JwaGljUmVndWxhckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1
ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQor
ZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwoKQorZW5kCisKKyMgc3AgcG9p
bnRzIHRvIHRoZSBuZXcgZnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDU2l6ZQorIyBXZSBsZWF2ZSBj
ZnIgdGVtcDQgdG8gdXNlIGl0IGZvciB1bnRhZ2dpbmcuCittYWNybyBwcmVwYXJlRm9yVGFpbENh
bGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNl
ZEJ5TExJbnQoKQogCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzW2Nmcl0sIHRlbXAyCkBAIC0xMjMyLDE4ICsxMjQ0LDE3IEBAIG1hY3JvIHByZXBh
cmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRy
VGFnKQogICAgIG1vdmUgY2ZyLCB0ZW1wMQogICAgIGFkZHAgdGVtcDIsIHRlbXAxCiAKLSAgICBs
b2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbc3BdLCB0ZW1w
MgorICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAt
IENhbGxlckZyYW1lQW5kUENTaXplW3NwXSwgdGVtcDIKICAgICAjIFdlIGFzc3VtZSA8IDJeMjgg
YXJndW1lbnRzCiAgICAgbXVsaSBTbG90U2l6ZSwgdGVtcDIKICAgICBhZGRpIFN0YWNrQWxpZ25t
ZW50IC0gMSArIENhbGxGcmFtZUhlYWRlclNpemUsIHRlbXAyCiAgICAgYW5kaSB+U3RhY2tBbGln
bm1lbnRNYXNrLCB0ZW1wMgogCiAgICAgaWYgQVJNdjcgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIENf
TE9PUCBvciBDX0xPT1BfV0lOIG9yIE1JUFMgb3IgUklTQ1Y2NAotICAgICAgICBhZGRwIENhbGxl
ckZyYW1lQW5kUENTaXplLCBzcAogICAgICAgICBzdWJpIENhbGxlckZyYW1lQW5kUENTaXplLCB0
ZW1wMgogICAgICAgICBsb2FkcCBDYWxsZXJGcmFtZUFuZFBDOjpyZXR1cm5QQ1tjZnJdLCBscgog
ICAgIGVsc2UKLSAgICAgICAgYWRkcCBQdHJTaXplLCBzcAorICAgICAgICBzdWJwIFB0clNpemUs
IHNwCiAgICAgICAgIHN1YmkgUHRyU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgUHRyU2l6ZVtj
ZnJdLCB0ZW1wMwogICAgICAgICBzdG9yZXAgdGVtcDMsIFtzcF0KQEAgLTEyNzAsOSArMTI4MSwx
MiBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAz
LCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBlbmQKIAogICAgIG1vdmUgdGVtcDEsIHNwCitlbmQK
KworbWFjcm8gaW52b2tlRm9yVGFpbENhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0
LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUs
IG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFnKQogICAgIGlmIEFSTTY0RQotICAgICAgICBtb3ZlIHRl
bXA0LCBhMgotICAgICAgICBtb3ZlIGNhbGxlZSwgYTAKKyAgICAgICAgbW92ZSBtYXliZU9sZENG
UiwgYTIKKyAgICAgICAgbW92ZSBjYWxsZWUsIGE3CiAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsg
Y29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRl
Ojp0YWlsQ2FsbCVjYWxsUHRyVGFnJSkgKiBQdHJTaXplLCBhMQogICAgICAgICBqbXAgW2ExXSwg
TmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJUYWclCiAgICAgZWxzZQpAQCAtMTI4MCw2
ICsxMjk0LDIyIEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1w
MiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIGVuZAogZW5kCiAKKyMgdDUgaXMgbWV0
YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgY2FsbFB0clRhZykKKyAgICBpZiBBUk02NEUKKyAgICAgICAgbG9hZHAgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGlj
Q2FsbERlc3RpbmF0aW9uW3Q1XSwgYTcKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4
cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnRhaWxD
YWxsV2l0aG91dFVudGFnJWNhbGxQdHJUYWclKSAqIFB0clNpemUsIGExCisgICAgICAgIGptcCBb
YTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyAlY2FsbFB0clRhZyUKKyAgICBlbHNlCisgICAg
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRh
SUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIGExCisgICAgICAgIGptcCBhMSwg
Y2FsbFB0clRhZworICAgIGVuZAorZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93VGFpbENhbGwo
KQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50KCkKK2VuZAorCiBtYWNybyBzbG93
UGF0aEZvckNvbW1vbkNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRj
aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBzbG93UGF0
aCwgcHJlcGFyZUNhbGwpCiBlbmQKQEAgLTEyOTEsNyArMTMyMSw3IEBAIG1hY3JvIHNsb3dQYXRo
Rm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUs
IGRzdFZpcnR1CiAgICAgICAgIG1hY3JvIChjYWxsZWUsIGNhbGxlZUZyYW1lUHRyKQogICAgICAg
ICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAogICAgICAgICAgICAgbW92
ZSBjYWxsZWVGcmFtZVB0ciwgc3AKLSAgICAgICAgICAgIHByZXBhcmVDYWxsKGNhbGxlZSwgdDIs
IHQzLCB0NCwgdDEsIEpTRW50cnlTbG93UGF0aFB0clRhZykKKyAgICAgICAgICAgIHByZXBhcmVD
YWxsKHQyLCB0MywgdDQsIHQxKQogICAgICAgICAuZG9udFVwZGF0ZVNQOgogICAgICAgICAgICAg
Y2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwg
SlNFbnRyeVNsb3dQYXRoUHRyVGFnKQogICAgICAgICBlbmQpCkBAIC0xODIwLDEyICsxODUwLDE2
IEBAIGlmIEFSTTY0RQogICAgIGdsb2JhbCBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZQogICAg
IF90YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3Mg
YTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRy
eVB0clRhZwogCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUK
ICAgICBfdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1Jl
dHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcKKyAg
ICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCisKKyAgICBnbG9iYWwgX3RhaWxDYWxsV2l0aG91
dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUKKyAgICBfdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5
VHJhbXBvbGluZToKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwg
X2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lCiAgICAgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9s
aW5lOgpAQCAtMjMyNSwxNyArMjM1OSwxNyBAQCBlbmQpCiAKIAogIyB3ZSBjYW4ndCB1c2UgY2Fs
bE9wIGJlY2F1c2Ugd2UgY2FuJ3QgcGFzcyBgY2FsbGAgYXMgdGhlIG9wY29kZSBuYW1lLCBzaW5j
ZSBpdCdzIGFuIGluc3RydWN0aW9uIG5hbWUKLWNvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxpbnRf
c2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0
dSwgbWV0YWRhdGEpCitjb21tb25DYWxsT3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxs
LCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHBy
ZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxs
LCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJyYXlQcm9maWxlRm9yQ2FsbChPcENhbGws
IGdldHUpCiBlbmQpCiAKIAotbWFjcm8gY2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
cHJlcGFyZUNhbGwsIGZuKQotICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGlu
dF9zbG93X3BhdGhfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikK
K21hY3JvIGNhbGxPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZv
a2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCisgICAgY29t
bW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1lJSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUs
IG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhp
YywgcHJlcGFyZVNsb3dDYWxsLCBmbikKIGVuZAogCiAKLWNhbGxPcCh0YWlsX2NhbGwsIE9wVGFp
bENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY2FsbE9w
KHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWls
Q2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENh
bGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBhcnJheVByb2ZpbGVGb3JDYWxsKE9wVGFp
bENhbGwsIGdldHUpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIHJl
bG9hZCBtZXRhZGF0YSBzaW5jZSBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKSBtaWdodCBo
YXZlIHRyYXNoZWQgdDUKQEAgLTIzNDMsNyArMjM3Nyw3IEBAIGNhbGxPcCh0YWlsX2NhbGwsIE9w
VGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogZW5k
KQogCiAKLWNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNh
bGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQorY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25z
dHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBh
cmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBt
YWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCiBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihl
eGNlcHRpb25UYXJnZXQpCkBAIC0yMzU0LDcgKzIzODgsNyBAQCBtYWNybyBicmFuY2hJZkV4Y2Vw
dGlvbihleGNlcHRpb25UYXJnZXQpCiAubm9FeGNlcHRpb246ICAgIAogZW5kCiAKLW1hY3JvIGRv
Q2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgZnJh
bWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorbWFjcm8gZG9DYWxsVmFyYXJncyhv
cGNvZGVOYW1lLCBzaXplLCBnZXQsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJl
U2xvd0NhbGwpCiAgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCiAgICAgYnJhbmNoSWZF
eGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAgIyBj
YWxsZWVGcmFtZSBpbiByMQpAQCAtMjM2OSwzMiArMjQwMyw3MCBAQCBtYWNybyBkb0NhbGxWYXJh
cmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1Bh
dGgsIHNsbwogICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAg
ICAgICAgIGVuZAogICAgIGVuZAotICAgIHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisg
ICAgY2FsbENhbGxTbG93UGF0aCgKKyAgICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhvc2Ug
YXJlIHIwIGFuZCByMQorICAgICAgICBtYWNybyAocmVzdG9yZWRQQ09yVGhyb3csIGNhbGxlZUZy
YW1lUHRyKQorICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAor
ICAgICAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgICAgICBtb3ZlIGNh
bGxlZUZyYW1lUHRyLCBzcAorICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MSkKKyAgICAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQorICAgICAgICAgICAgbWV0
YWRhdGEodDUsIHQyKQorCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgICAgICAg
ICAgYnRweiB0MSwgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFz
ayksIC5ub3RQb2x5bW9ycGhpYworICAgICAgICAgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBk
b2VzIG5vdCB1bnRhZyByZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGlu
IHRoZSB0cmFtcG9saW5lIHNlcGFyYXRlbHkuCisgICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQg
bm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQg
YmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBh
cmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAg
ICAgICAgICBqbXAgLmdvUG9seW1vcnBoaWMKKworICAgICAgICAubm90UG9seW1vcnBoaWM6Cisg
ICAgICAgICAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93CisgICAgICAgICAgICBwcmVwYXJl
Q2FsbCh0MiwgdDMsIHQ0LCB0MSkKKworICAgICAgICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAg
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRh
SUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBpbnZv
a2VDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwg
ZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisg
ICAgICAgIC5vcENhbGxTbG93OgorICAgICAgICAgICAgIyB0MCBpcyBjYWxsZWUKKyAgICAgICAg
ICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBK
U0dsb2JhbE9iamVjdAorICAgICAgICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAg
ICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1Bh
dGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIHQzCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwg
dDMKKyAgICAgICAgICAgIHByZXBhcmVTbG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0
RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcp
CisgICAgICAgIC5kb250VXBkYXRlU1A6CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUKKyAgICAgICAgZW5kKQogZW5kCiAKIAotbGxpbnRPcChv
cF9jYWxsX3ZhcmFyZ3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
KQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBzaXplLCBPcENhbGxWYXJhcmdz
LCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxp
bnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9jYWxsX3ZhcmFyZ3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3Bf
Y2FsbF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ2FsbFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3Qs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJh
cmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxs
LCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGws
IHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwpCiBlbmQpCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxs
X3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkK
K2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJh
cmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBj
aGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQogICAgICMgV2UgbGllIGFuZCBwZXJmb3JtIHRo
ZSB0YWlsIGNhbGwgaW5zdGVhZCBvZiBwcmVwYXJpbmcgaXQgc2luY2Ugd2UgY2FuJ3QKICAgICAj
IHByZXBhcmUgdGhlIGZyYW1lIGZvciBhIGNhbGwgb3Bjb2RlCi0gICAgZG9DYWxsVmFyYXJncyhv
cF90YWlsX2NhbGxfdmFyYXJncywgc2l6ZSwgT3BUYWlsQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBf
bGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhf
dGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdz
KG9wX3RhaWxfY2FsbF92YXJhcmdzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxWYXJhcmdzLCBtX3By
b2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9m
cmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJl
cGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGlj
VGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwpCiBlbmQpCiAKIAotbGxpbnRPcChvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hU
b0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxs
IGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRo
ZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgZGlz
cGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMs
IF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9y
VGFpbENhbGwpCisgICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMsIHNpemUsIGdldCwgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1fcHJvZmlsZSwgbV9k
c3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9m
b3J3YXJkX2FyZ3VtZW50cywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQ
b2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxs
aW50T3Aob3BfY29uc3RydWN0X3ZhcmFyZ3MsIE9wQ29uc3RydWN0VmFyYXJncywgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZG9DYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJn
cywgc2l6ZSwgT3BDb25zdHJ1Y3RWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9z
aXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdz
LCBwcmVwYXJlRm9yUmVndWxhckNhbGwpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX2NvbnN0cnVj
dF92YXJhcmdzLCBPcENvbnN0cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFy
Z3MsIHNpemUsIGdldCwgT3BDb25zdHJ1Y3RWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywg
X2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxs
LCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGws
IHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwpCiBlbmQpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGMwNGZmZDZi
MGJjM2YyNmUxOTJmMDZmMmJiZjc0YjA2NGRjYjI3OWEuLjk4NzZlZjZlZjc0MmFjZWVkYWUyNjlh
MmFiNDU0YzViNjJjZDUxNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKQEAgLTEyOSw2ICsxMjksOCBAQCB1c2luZyBXZWJD
b25maWc6OmdfY29uZmlnOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FsbExpbmtJbmZv
OworCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIENMb29wUmVnaXN0ZXIgaXMgdGhlIHN0b3Jh
Z2UgZm9yIGFuIGVtdWxhdGVkIENQVSByZWdpc3Rlci4KIC8vIEl0IGRlZmluZXMgdGhlIHBvbGlj
eSBvZiBob3cgaW50cyBzbWFsbGVyIHRoYW4gaW50cHRyX3QgYXJlIHBhY2tlZCBpbnRvIHRoZQpA
QCAtMTY2LDYgKzE2OCw3IEBAIGNsYXNzIENMb29wUmVnaXN0ZXIgewogICAgIG9wZXJhdG9yIFBy
b3RvQ2FsbEZyYW1lKigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxQcm90b0NhbGxGcmFtZSo+KG1f
dmFsdWUpOyB9CiAgICAgb3BlcmF0b3IgUmVnaXN0ZXIqKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFJlZ2lzdGVyKj4obV92YWx1ZSk7IH0KICAgICBvcGVyYXRvciBWTSooKSB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8Vk0qPihtX3ZhbHVlKTsgfQorICAgIG9wZXJhdG9yIENhbGxMaW5rSW5mbyooKSB7
IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2FsbExpbmtJbmZvKj4obV92YWx1ZSk7IH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzaXplb2YoVCkg
PT0gc2l6ZW9mKHVpbnRwdHJfdCk+PgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcj0o
VCB2YWx1ZSkgeyBtX3ZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCmluZGV4IDkwM2U1YTQ1YjFiNjY4MmZkMjg3OGI5Nzk0ODUyYWVmZDY3NTFk
NWUuLjg2ZTNlZWY3YTlkMGRiMzk5YWE3MjlkMjM4YWFkZjNjNTA1NDNmOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCkBAIC0xMTgsNyArMTE4LDkgQEAgbWFjcm8gY0NhbGwyVm9pZChmdW5jdGlvbikKIGVu
ZAogCiBtYWNybyBjQ2FsbDQoZnVuY3Rpb24pCi0gICAgaWYgQVJNdjcgb3IgTUlQUworICAgIGlm
IENfTE9PUCBvciBDX0xPT1BfV0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlv
biwgYTAsIGExLCBhMiwgYTMKKyAgICBlbHNpZiBBUk12NyBvciBNSVBTCiAgICAgICAgIGNhbGwg
ZnVuY3Rpb24KICAgICBlbHNpZiBYODYgb3IgWDg2X1dJTgogICAgICAgICBwdXNoIGEzCkBAIC0y
MTUxLDEyICsyMTUzLDEyIEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0
LCBnZXR1KQogICAgIGJpbmVxIFRoaXNBcmd1bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQz
LCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICBsb2FkaSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQYXls
b2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJ
RFt0MF0sIHQwCi0gICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBz
dG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0
U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBlbmQKIAorIyB0NSBob2xkcyBtZXRhZGF0YS4K
IG1hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFs
dWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKQotICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXRDYWxsZWUo
dDApCiAKICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
Lm1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0W3Q1XSwgdDIKQEAgLTIxODgsNyAr
MjE5MCw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2Rl
U3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAK
ICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkKLSAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0
MCkKKyAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAg
IG1hY3JvIGdldEFyZ3VtZW50U3RhcnQoZHN0KQpAQCAtMjE5OSw2ICsyMjAxLDcgQEAgbWFjcm8g
Y29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVD
YWxsLCBwcm9sb2d1ZSkKICAgICAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2Fy
Z2MsIGRzdCkKICAgICAgICAgZW5kCiAgICAgICAgIAorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFk
YXRhCiAgICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVj
dCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVu
ZCkKIGVuZApAQCAtMjg2Niw2ICsyODY5LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVy
YXRvcl9vcGVuLCBPcEl0ZXJhdG9yT3BlbiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAg
ICAgICAgbW92ZSAxLCBkc3QKICAgICBlbmQKIAorICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBj
YWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Bl
bl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0
YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJ
bmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXRCeUlkU3RhcnQ6CkBAIC0yOTI3LDYgKzI5MzEsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1ZSBz
bG90IGFzIGEgdG1wIHNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4KKyAg
ICBtZXRhZGF0YSh0NSwgdDApCiAgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxp
bnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJl
c3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dl
dERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGlu
Z1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3Rh
cnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCmluZGV4IGE5MTMxNGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJlMmY1OWMwYTgz
NzAuLjMzYmJkZDI2ODdlZDI5ZmUxMjI3MmMyNzJiMGZiZTBiMDZjYzlkYTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CkBAIC0xNDMsNyArMTQzLDkgQEAgZW5kCiAjIFRoaXMgYmFyZWx5IHdvcmtzLiBhcmczIGFuZCBh
cmc0IHNob3VsZCBwcm9iYWJseSBiZSBpbW1lZGlhdGVzLgogbWFjcm8gY0NhbGw0KGZ1bmN0aW9u
KQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHQ0LCAweGJhZDBjMDA0KQotICAgIGlm
IFg4Nl82NCBvciBBUk02NCBvciBBUk02NEUgb3IgUklTQ1Y2NAorICAgIGlmIENfTE9PUCBvciBD
X0xPT1BfV0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBh
MiwgYTMKKyAgICBlbHNpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKICAg
ICAgICAgY2FsbCBmdW5jdGlvbgogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBPbiBX
aW42NCwgcmN4LCByZHgsIHI4LCBhbmQgcjkgYXJlIHVzZWQgZm9yIHBhc3NpbmcgdGhlIGZpcnN0
IGZvdXIgcGFyYW1ldGVycy4KQEAgLTMwOSwxMiArMzExLDEyIEBAIG1hY3JvIG1ha2VKYXZhU2Ny
aXB0Q2FsbChlbnRyeSwgcHJvdG9DYWxsRnJhbWUsIHRlbXAxLCB0ZW1wMikKICAgICBpZiBDX0xP
T1Agb3IgQ19MT09QX1dJTgogICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAg
ZWxzaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgZW50cnksIHQzCi0gICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGEyCi0gICAgICAgIGptcCBb
YTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisgICAgICAgIG1vdmUg
ZW50cnksIHQ1CisgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0
T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0
KSAqIFB0clNpemUsIGE3CisgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcg
IyBKU0VudHJ5UHRyVGFnCiAgICAgICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1w
b2xpbmUKICAgICAgICAgX3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lOgotICAgICAgICBj
YWxsIHQzLCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGNhbGwgdDUsIEpTRW50cnlQdHJUYWcKICAg
ICBlbHNlCiAgICAgICAgIGNhbGwgZW50cnksIEpTRW50cnlQdHJUYWcKICAgICBlbmQKQEAgLTIz
NjAsNDEgKzIzNjIsNTggQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3Qs
IGdldHUpCiAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAg
IGJ0cW56IHQwLCBub3RDZWxsTWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0
dXJlSURbdDBdLCB0MwotICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisg
ICAgc3RvcmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1f
bGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3JvIGNhbGxIZWxwZXIo
b3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KQotICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisjIHQ1IGhvbGRzIG1l
dGFkYXRhLgorbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBp
bnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIGdldENhbGxlZSh0MSkKIAotICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2Fs
bGVlV2l0aExpbmtCaXRbdDVdLCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDAsIHQzKQotICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQxLCB0MCkKIAorICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lCiAgICAgZ2V0QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAg
ICAgbmVncCB0MwogICAgIGFkZHAgY2ZyLCB0MwotICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQog
ICAgIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKQotICAgIHN0b3JlUEMoKQogICAg
IHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3Qz
XQorCisgICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3Vy
ZSBzcC4KKyAgICBzdG9yZVBDKCkKKyAgICBzdG9yZXEgdDAsIENhbGxlZVt0M10KICAgICBtb3Zl
IHQzLCBzcAotICAgIGlmIEFSTTY0RQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAg
ICBwcmVwYXJlQ2FsbCh0MCwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAg
IGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5l
Q29kZVRhcmdldFt0NV0sIHQwCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rl
ciwgZGlzcGF0Y2gsIHQwLCBKU0VudHJ5UHRyVGFnKQotICAgIGVsc2UKLSAgICAgICAgcHJlcGFy
ZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVD
b2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNh
bGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJv
ZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQ
dHJUYWcpCi0gICAgZW5kCi0ub3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAgICBhZGRwIENh
bGxlckZyYW1lQW5kUENTaXplLCBzcAogCi1tYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwg
c2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQorICAgIGxvYWRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVC
bG9ja1t0NV0sIHQxCisgICAgYnRweiB0MSwgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHlt
b3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9ycGhpYworICAgICMgcHJlcGFyZUNhbGwgaW4g
TExJbnQgZG9lcyBub3QgdW50YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcg
dGhhdCBpbiB0aGUgdHJhbXBvbGluZSBzZXBhcmF0ZWx5LgorICAgICMgQnV0IHdlIHNob3VsZCBu
b3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBi
ZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgorICAgIHByZXBhcmVQb2x5bW9y
cGhpYyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRz
dFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgam1wIC5nb1Bv
bHltb3JwaGljCisKKy5ub3RQb2x5bW9ycGhpYzoKKyAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxT
bG93CisgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgor
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRh
SUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworLm9wQ2FsbFNs
b3c6CisgICAgIyB0MCBpcyBjYWxsZWUKKyAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAj
IHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisg
ICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMK
KyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICBwcmVwYXJl
U2xvd0NhbGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6
ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRp
c3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKK2VuZAorCittYWNybyBjb21tb25DYWxsT3Aob3Bj
b2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGws
IHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkK
IApAQCAtMjQwMyw3ICsyNDIyLDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNs
b3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5k
LCBtZXRhZGF0YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICAg
Z2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAgICAg
ICBlbmQKIAogICAgICAgICBtYWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTI0MTQsNyAr
MjQzMyw4IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2Rl
U3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9w
Y29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGNhbGxIZWxw
ZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwg
cHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1
bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRh
CisgICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwg
bV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9y
cGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxl
ZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKIApA
QCAtMjUzMyw2ICsyNTUzLDg4IEBAIG9wKGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xp
bmUsIG1hY3JvICgpCiAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9s
aW5lCiBlbmQpCiAKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMg
aXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3JvIGxpbmtTbG93UGF0aEZvcihmdW5jdGlv
bikKKyAgICBmdW5jdGlvblByb2xvZ3VlKCkKKyAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV92
bVt0M10sIHQxCisgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MV0KKyAgICBtb3Zl
IHQyLCBhMgorICAgIG1vdmUgdDMsIGExCisgICAgbW92ZSBjZnIsIGEwCisgICAgY0NhbGw0KGZ1
bmN0aW9uKQorICAgIGZ1bmN0aW9uRXBpbG9ndWUoKQorICAgIHVudGFnUmV0dXJuQWRkcmVzcyBz
cAorICAgIGJ0cHogcjEsIC5kb05vdFRyYXNoCisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0
ZXJDYWxsKHQxKQorICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0MSwgdDIsIHQzLCB0NCkKKyAgICB1
bnRhZ1JldHVybkFkZHJlc3MgdDQKKy5kb05vdFRyYXNoOgorICAgICMgRklYTUU6IFVzZSBpbnZv
a2VGb3JUYWlsQ2FsbD8KKyAgICBqbXAgdDAsIEpTRW50cnlQdHJUYWcKK2VuZAorCisjIHQwIGlz
IGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFs
T2JqZWN0CittYWNybyB2aXJ0dWFsVGh1bmtGb3Iob2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hl
Y2ssIGludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lLCBwcmVwYXJlQ2FsbCwgc2xvd0Nhc2UpCisg
ICAgYWRkaSAxLCBDYWxsTGlua0luZm86Om1fc2xvd1BhdGhDb3VudFt0Ml0KKyAgICBtb3ZlIE5v
dENlbGxNYXNrLCB0MQorICAgIGJ0cW56IHQwLCB0MSwgc2xvd0Nhc2UKKyAgICBiYm5lcSBKU0Nl
bGw6Om1fdHlwZVt0MF0sIEpTRnVuY3Rpb25UeXBlLCAubm90SlNGdW5jdGlvbgorICAgIGxvYWRw
IEpTRnVuY3Rpb246Om1fZXhlY3V0YWJsZU9yUmFyZURhdGFbdDBdLCB0MQorICAgIGJ0cHogdDEs
IChjb25zdGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCAuaXNFeGVjdXRhYmxlCisgICAg
bG9hZHAgKEZ1bmN0aW9uUmFyZURhdGE6Om1fZXhlY3V0YWJsZSAtIChjb25zdGV4cHIgSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpKVt0MV0sIHQxCisuaXNFeGVjdXRhYmxlOgorICAgIGxvYWRwIG9m
ZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrW3QxXSwgdDEKKyAgICBidHB6IHQxLCBzbG93Q2Fz
ZQorLmNhbGxDb2RlOgorICAgIHByZXBhcmVDYWxsKHQ1LCB0MiwgdDMsIHQ0KQorICAgIGptcCB0
MSwgSlNFbnRyeVB0clRhZworLm5vdEpTRnVuY3Rpb246CisgICAgYmJuZXEgSlNDZWxsOjptX3R5
cGVbdDBdLCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgc2xvd0Nhc2UKKyAgICBwcmVwYXJlQ2FsbCh0
NSwgdDIsIHQzLCB0NCkKKyAgICBqbXAgaW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmUKK2VuZAor
CisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidz
IEpTR2xvYmFsT2JqZWN0CitvcChsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkK
KyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X2xpbmtfY2FsbCkKK2VuZCkKKworIyB0MCBpcyBj
YWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9i
amVjdAorb3AobGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmly
dHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1w
MSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAg
bGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgdDAgaXMgY2Fs
bGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmpl
Y3QKK29wKGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAg
dmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjaywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5l
LCBtYWNybyAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNsb3dDYXNlKQorLnNs
b3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQor
CisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidz
IEpTR2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lLCBt
YWNybyAoKQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrLCBfbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9s
aW5lLCBtYWNybyAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCisgICAgICAgIHByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0ZW1wMSkKKyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxs
KHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQorICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3Mg
dGVtcDQKKyAgICBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhG
b3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkKK2VuZCkKIAogbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xp
bmUoZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pCiAgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCkBA
IC0zMDQ2LDggKzMxNDgsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4s
IE9wSXRlcmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAgICBtb3Zl
IDEsIGRzdAogICAgIGVuZAogCi0KLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9s
bGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVy
YXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290
b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1
ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRh
dGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3df
cGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmls
ZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2Fs
bCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxh
ckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwg
Z2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0Nv
dW50KQogCiAuZ2V0QnlJZFN0YXJ0OgogICAgIG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNoKHZh
bHVlKQpAQCAtMzEwNCw3ICszMjA2LDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRv
cl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBl
bmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcg
dG8gd3JpdGUgdG8gaXQgbGF0ZXIuCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBf
bGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4
dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290
b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1
ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRh
dGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3df
cGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9m
aWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxs
LCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFy
Q2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBn
ZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291
bnQpCiAKIC5nZXREb25lU3RhcnQ6CiAgICAgbWFjcm8gc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1
ZShkb25lVmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9jbG9vcC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCmlu
ZGV4IGNhZDIxNWFlMzQzY2M4NmIzYTEwYTVmYWY2NjI4NDI0YTljMDJmMjguLmM3MDE2NjRhYjJi
ZmZmMjA3ZDEyZTVlMjIyZjk2NGNmYTkxMmEyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL2Nsb29wLnJiCkBAIC01NzIsNiArNTcyLDE0IEBAIGRlZiBjbG9vcEVtaXRDYWxs
U2xvd1BhdGhWb2lkKG9wZXJhbmRzKQogICAgICRhc20ucHV0YyAiI3tvcGVyYW5kc1swXS5jTGFi
ZWx9KCN7b3BlcmFuZHNbMV0uY2xEdW1wfSwgI3tvcGVyYW5kc1syXS5jbER1bXB9KTsiCiBlbmQK
IAorZGVmIGNsb29wRW1pdENhbGxTbG93UGF0aDQob3BlcmFuZHMpCisgICAgJGFzbS5wdXRjICJ7
IgorICAgICRhc20ucHV0YyAiICAgIGNsb29wU3RhY2suc2V0Q3VycmVudFN0YWNrUG9pbnRlcihz
cC52cCgpKTsiCisgICAgJGFzbS5wdXRjICIgICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9
ICN7b3BlcmFuZHNbMF0uY0xhYmVsfSgje29wZXJhbmRzWzFdLmNsRHVtcH0sICN7b3BlcmFuZHNb
Ml0uY2xEdW1wfSwgI3tvcGVyYW5kc1szXS5jbER1bXB9LCAje29wZXJhbmRzWzRdLmNsRHVtcH0p
OyIKKyAgICAkYXNtLnB1dGMgIiAgICBkZWNvZGVSZXN1bHQocmVzdWx0LCB0MCwgdDEpOyIKKyAg
ICAkYXNtLnB1dGMgIn0iCitlbmQKKwogY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICBkZWYgbG93ZXJD
X0xPT1AKICAgICAgICAgY2FzZSBvcGNvZGUKQEAgLTExNzUsNiArMTE4Myw5IEBAIGRlZiBsb3dl
ckNfTE9PUAogICAgICAgICB3aGVuICJjbG9vcENhbGxTbG93UGF0aFZvaWQiCiAgICAgICAgICAg
ICBjbG9vcEVtaXRDYWxsU2xvd1BhdGhWb2lkKG9wZXJhbmRzKQogCisgICAgICAgIHdoZW4gImNs
b29wQ2FsbFNsb3dQYXRoNCIKKyAgICAgICAgICAgIGNsb29wRW1pdENhbGxTbG93UGF0aDQob3Bl
cmFuZHMpCisKICAgICAgICAgIyBGb3IgZGVidWdnaW5nIG9ubHkuIFRoaXMgaXMgdXNlZCB0byBp
bnNlcnQgaW5zdHJ1bWVudGF0aW9uIGludG8gdGhlCiAgICAgICAgICMgZ2VuZXJhdGVkIExMSW50
QXNzZW1ibHkuaCBkdXJpbmcgbGxpbnQgZGV2ZWxvcG1lbnQgb25seS4gRG8gbm90IHVzZQogICAg
ICAgICAjIGZvciBwcm9kdWN0aW9uIGNvZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
b2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKaW5kZXggOWNiYTVkNjhmM2NhZDMxY2ZhMmQ5NmVh
NGM5YmJhOGRmZTlkYTliMi4uYzAwYjUxNmIzM2VjNWFkMTI5ZDU2YzNmZmQyM2U5ZjVlYzIwNWY3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rp
b25zLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9u
cy5yYgpAQCAtNDU5LDYgKzQ1OSw3IEBACiAgICAgICJjbG9vcENhbGxOYXRpdmUiLCAgICAgICAg
ICMgb3BlcmFuZHM6IGNhbGxlZQogICAgICAiY2xvb3BDYWxsU2xvd1BhdGgiLCAgICAgICAjIG9w
ZXJhbmRzOiBjYWxsVGFyZ2V0LCBjdXJyZW50RnJhbWUsIGN1cnJlbnRQQwogICAgICAiY2xvb3BD
YWxsU2xvd1BhdGhWb2lkIiwgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBjdXJyZW50RnJhbWUs
IGN1cnJlbnRQQworICAgICAiY2xvb3BDYWxsU2xvd1BhdGg0IiwgICAgICAjIG9wZXJhbmRzOiBj
YWxsVGFyZ2V0LCBhMCwgYTEsIGEyLCBhMwogCiAgICAgICMgRm9yIGRlYnVnZ2luZyBvbmx5Ogog
ICAgICAjIFRha2VzIG5vIG9wZXJhbmRzIGJ1dCBzaW1wbHkgZW1pdHMgd2hhdGV2ZXIgZm9sbG93
cyBpbiAvLyBjb21tZW50cyBhcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZUJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGVCYXNlLmgKaW5kZXggOTU4MTA1ZDMyNjZkZGZmODViZTVkNzZkODdjZGU1Y2IzMzEz
MTRjMy4uNDhmZDkyZjhiNmE4ZWQyOTQ0YTcyNDhiMTU3ZDJhZjcyNzczYzViNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCkBAIC01Nyw2ICs1
Nyw3IEBAIGlubGluZSBib29sIGlzQ2FsbChDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAK
IGNsYXNzIEV4ZWN1dGFibGVCYXNlIDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNz
IEpJVDsKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVu
ZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxs
R2VuZXJhdG9yKFZNKik7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggNWFhNTQyYTEyZjI3MWRiZGZm
MDIwYjkxMGVkYmNjOWExMWM4MzY1Ni4uMmU5YjUwNjYwNWNmYzZmMWM1ZWRkMjJkYWQ5NzNlNzNl
YWE4ZjYxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgog
I2luY2x1ZGUgPHd0Zi9Cb3guaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaAppbmRl
eCBmNmEwNWIwNjVlMzJkOGFlY2Q1NjdiZjZhYjc0YWFlNjM4OTk3Nzc4Li5lNDc3OTJiODc2NGU5
MWQ1MDYxMGU0Y2RkYWUzMjMxYzE0NTllMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HYXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2F0ZS5oCkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoaml0Q2FnZVB0
ciwgTm9QdHJUYWcpIFwKICAgICB2KHRhaWxDYWxsSlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwK
ICAgICB2KHRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoUHRyVGFnLCBOb1B0clRhZykgXAorICAgIHYo
dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnLCBOb1B0clRhZykgXAogICAgIHYobG9v
cE9TUkVudHJ5LCBOb1B0clRhZykgXAogICAgIHYoZW50cnlPU1JFbnRyeSwgTm9QdHJUYWcpIFwK
ICAgICB2KHdhc21PU1JFbnRyeSwgTm9QdHJUYWcpIFwKQEAgLTQ2LDIwICs0NywyMSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2RlZmluZSBKU0NfSlNfR0FURV9PUENPREVTKHYpIFwKICAgICB2KG9w
X2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbCwgSlNFbnRyeVB0clRh
ZykgXAogICAgIHYob3BfY29uc3RydWN0LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9pdGVy
YXRvcl9uZXh0LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9pdGVyYXRvcl9vcGVuLCBKU0Vu
dHJ5UHRyVGFnKSBcCi0gICAgdihvcF9jYWxsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykg
XAotICAgIHYob3BfdGFpbF9jYWxsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAg
IHYob3BfY29uc3RydWN0X3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3Bf
Y2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFp
bF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBc
Ci0gICAgdihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcp
IFwKKyAgICB2KG9wX2NhbGxfdmFyYXJncywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29u
c3RydWN0X3ZhcmFyZ3MsIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfc2xvdywgSlNF
bnRyeVB0clRhZykgXAorICAgIHYob3BfdGFpbF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwK
KyAgICB2KG9wX2NvbnN0cnVjdF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVy
YXRvcl9uZXh0X3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9yX29wZW5f
c2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50
cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJU
YWcpIFwKKyAgICB2KG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93LCBKU0VudHJ5
UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFn
KSBcCiAgICAgdihvcF9jYWxsX2V2YWxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0g
ICAgdihvcF9pdGVyYXRvcl9uZXh0X3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAg
IHYob3BfaXRlcmF0b3Jfb3Blbl9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmlu
ZGV4IDljZjVmZWEwMTk4NDlkYjZlNjYwOTEwYmI5NDUxY2QyN2MyNWZiYzUuLmVjNDgyMmY1YTkw
M2Q0ZmI4NWNiNDg0MWE0Y2Q2OGYwYzEwYmZiZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTEzOCw2ICsxMzgsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcu
aCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2lu
Y2x1ZGUgIkxMSW50RXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIk1pbmltdW1SZXNlcnZlZFpvbmVT
aXplLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCkBAIC05MTAsNiArOTExLDQxIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1w
b2xpbmVGb3IoQ29kCiAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lKTsKIH0KIAorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElMaW5rQ2FsbCgpCit7
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJl
dHVybiBnZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2Vk
PEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8
SlNFbnRyeVB0clRhZz4obGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUpOworfQorCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSVRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aCgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpCisgICAgICAgIHJldHVybiBnZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyNl
bmRpZgorICAgIHJldHVybiBMTEludDo6Y2FsbFRvVGhyb3coKnRoaXMpLnRlbXBsYXRlIHJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4gVk06OmdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlIGNhbGxNb2RlKQor
eworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yKCp0aGlzLCBjYWxsTW9kZSk7CisjZW5kaWYKKyAgICBzd2l0
Y2ggKGNhbGxNb2RlKSB7CisgICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoKKyAgICAgICAgcmV0
dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFs
X2NhbGxfdHJhbXBvbGluZSk7CisgICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgcmV0
dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFs
X3RhaWxfY2FsbF90cmFtcG9saW5lKTsKKyAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6Cisg
ICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxp
bnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7CisgICAgfQorICAgIHJldHVybiBMTElu
dDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3Ry
YW1wb2xpbmUpOworfQorCiBWTTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEoKQogewogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMzg4MzgwNTRlMzczYWMwNzRmMjFmMGMyMWRk
ZDNhMGY1OGEzNjc3OS4uMDk2NDVhYmRjNDNjY2VmM2MyMTViMTFiNzBkNjk4YzM0ODk0MzlkNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMDYsNiArMTA2LDggQEAgY2xhc3Mg
QmFzaWNCbG9ja0xvY2F0aW9uOwogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK2NsYXNzIENhbGxMaW5r
SW5mbzsKK2VudW0gY2xhc3MgQ2FsbE1vZGU7CiBzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CkBAIC05MDIsNiArOTA0
LDkgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMg
RG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+IHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRCb3Vu
ZEZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uLCBib29sIGNhbkNvbnN0cnVjdCk7CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlv
blRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENUSUxpbmtDYWxsKCk7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz4gZ2V0Q1RJVmlydHVhbENhbGwoQ2FsbE1vZGUpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBl
eGNlcHRpb25PZmZzZXQoKQogICAgIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjQzZmQ3NTllYjM3NTkwNTQ3YTM4ZGU4ZWMyMjE2Yzgw
MmIwMmFiNi4uNGMzMzg2OWRjZWEzNzQzMjYxMTE4YjlhYTY0NTBlYjJhMDkyNjVmZCAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMCBAQAorMjAyMS0xMS0xMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgor
CisgICAgICAgIFtKU0NdIFVzZSBDYWxsTGlua0luZm8gaW4gTExJbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjc0NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2lzLWNhbGxhYmxlLWlu
LWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qczoKKyAgICAgICAgKiBzdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanM6CisgICAgICAgIChwbGF0Zm9ybVN1
cHBvcnRzU2FtcGxpbmdQcm9maWxlci52bS5pc1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0
cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0
c1NhbXBsaW5nUHJvZmlsZXIudm0uaXNXYXNtU3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mv
c2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qczoKKyAgICAgICAgKGRvZXNUcmVl
SGF2ZVN0YWNrVHJhY2UpOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogd2FzbS9mdW5j
dGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qczoKKwogMjAyMS0xMS0xMSAgTWljaGFlbCBTYWJvZmYg
IDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBJbmxpbmUgUmVnRXhwLnRlc3QgSklUIGNv
ZGUgaW4gREZHIGFuZCBGVEwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxl
LWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2lz
LWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcwppbmRleCA1MGNh
ZWVkMTE0ODQyOWZkMWI1Y2UwYjBmZWFlNmJkZGRlNjcxMGI4Li45NGRhYjQ2ZDJkNzE4NGYzNWQ0
M2UyZGI0YTJkZDU2NDE5OGJlZmY1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxs
YWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMKKysrIGIvSlNUZXN0cy9z
dHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCkBA
IC0xLDQgKzEsNCBAQAotLy9AIHJ1bkRlZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUgLS11
c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhy
ZXNob2xkRm9ySklUU29vbj0xMCIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwg
Ii0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JP
cHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249
MTAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhy
ZXNob2xkRm9yRlRMT3B0aW1pemVTb29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0t
dXNlRlRMSklUPXRydWUiKQorLy9AIHJ1bkRlZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUi
LCAiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwg
Ii0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVw
PTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6
ZVNvb249MTAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwg
Ii0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVl
IiwgIi0tdXNlRlRMSklUPXRydWUiKQogCiBmdW5jdGlvbiBtYWluKCkgewogICAgIGxldCB2MTYy
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1l
LXNlY3Rpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUt
c2VjdGlvbi5qcwppbmRleCA2ODlhMDA1YWI1NTVhMWZjNjAxYTU0ZTRlYmY5NGU5OWE2NjhmNzdl
Li41YzIyMGZkNzZjZGM1YzQwZTU5Y2M2NmU1NzM0MmM3MmQ4YzdmM2FhIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcworKysg
Yi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwpA
QCAtNjksNSArNjksNSBAQAogICAgIHZhciB3YXNtRW50cnkgPSBmdW5jdGlvbigpIHsKICAgICAg
ICAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMuX3BhcnJvdCgxKTsKICAgICB9OwotICAgIHJ1blRl
c3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25b
X2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25b
X3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwgIndhc20tc3R1YiIsICIyNCIs
ICJ3YXNtRW50cnkiXSk7CisgICAgcnVuVGVzdCh3YXNtRW50cnksIFsiX3NpbGx5IiwgIih1bmtu
b3duKSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfZWdnc10iLCAiPD8+Lndhc20tZnVuY3Rpb25bX2Jh
Y29uXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3Bh
cnJvdF0iLCAiKHVua25vd24pIiwgIndhc21FbnRyeSJdKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1w
bGluZy1wcm9maWxlci13YXNtLmpzCmluZGV4IGNkMjFmMjg4YzE0OGE0Yjc0MDViZjg2OGRlZjli
NTQ1NzM0MDUwNDUuLjA2ZGYwMTI0OTU5NjllMjg0MjE4Nzc4NjkwMTM1YmYwOTAxMGVjNmQgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMKKysrIGIv
SlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qcwpAQCAtOCw1ICs4LDUgQEAK
ICAgICB2YXIgd2FzbUVudHJ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5j
ZS5leHBvcnRzLmxvb3AoMTAwMDAwMDApOwogICAgIH07Ci0gICAgcnVuVGVzdCh3YXNtRW50cnks
IFsiPD8+Lndhc20tZnVuY3Rpb25bMF0iLCAid2FzbS1zdHViIiwgIjAiLCAid2FzbUVudHJ5Il0p
OworICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIih1bmtu
b3duKSIsICJ3YXNtRW50cnkiXSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1w
bGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxp
bmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcwppbmRleCA5NjQyZGRjN2MxZTZmMDZlM2Ix
MzI3OWMwZTRhMDI1YjU0ZGNhYmYxLi4xYjkyZTk0ODU0YWY2M2Y2N2QwOGY1NDg4N2M1MjE3OTE0
ZWUyYmY1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1w
bGluZ1Byb2ZpbGVyLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3Nh
bXBsaW5nUHJvZmlsZXIuanMKQEAgLTcwLDExICs3MCwxMyBAQCBmdW5jdGlvbiBjaGVjayhub2Rl
KSB7CiAgICAgCiAgICAgbGV0IG5vZGUgPSB0cmVlOwogICAgIGZvciAobGV0IGkgPSBzdGFja1Ry
YWNlLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgbGV0IHByZXYgPSBub2RlOwogICAgICAgICBu
b2RlID0gbm9kZS5jaGlsZHJlbltzdGFja1RyYWNlW2ldXTsKICAgICAgICAgaWYgKCFub2RlKSB7
CiAgICAgICAgICAgICBpZiAoVkVSQk9TRSkgewogICAgICAgICAgICAgICAgIHByaW50KCJmYWls
aW5nIG9uICIgKyBpICsgIiA6ICIgKyBzdGFja1RyYWNlW2ldKTsKICAgICAgICAgICAgICAgICBw
cmludChKU09OLnN0cmluZ2lmeSh0cmVlKSk7CisgICAgICAgICAgICAgICAgcHJpbnQoT2JqZWN0
LmtleXMocHJldi5jaGlsZHJlbikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CkBAIC0xMDgsNyArMTEwLDcgQEAgZnVuY3Rpb24gcnVuVGVzdChm
dW5jLCBzdGFja1RyYWNlT3JTdHJpbmcpIHsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKERhdGUu
bm93KCkgLSBzdGFydFRpbWUgPCB0aW1lVG9GYWlsKTsKICAgICBwcmludChKU09OLnN0cmluZ2lm
eShyb290LCB1bmRlZmluZWQsIDIpKTsKLSAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3Qs
IHN0YWNrVHJhY2UsIHRydWUsIHRydWUpOworICAgIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2Uocm9v
dCwgc3RhY2tUcmFjZU9yU3RyaW5nLCB0cnVlLCB0cnVlKTsKICAgICB0aHJvdyBuZXcgRXJyb3Io
IkJhZCBzdGFjayB0cmFjZSIpOwogfQogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvbmFtZVNlY3Rpb24uanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFt
ZVNlY3Rpb24uanMKaW5kZXggNjgwNWU2ODlmNWM4NzllMmNhNTA5Yzg4ZDNlN2IzNzZkZTA5ZmFh
YS4uMzNjODZiZjFjZGU5YThkYWIxMThlMGU0Y2IwYmFjZDU5Yjc0OTFlOSAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCisrKyBiL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qcwpAQCAtNjksNCArNjksNCBAQAogYXNz
ZXJ0LmVxKHN0YWNrdHJhY2VbM10sICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dQFt3YXNtIGNv
ZGVdIik7CiBhc3NlcnQuZXEoc3RhY2t0cmFjZVs0XSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFt
XUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5j
dGlvbltfcGFycm90XUBbd2FzbSBjb2RlXSIpOwotYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3
YXNtLXN0dWJAW3dhc20gY29kZV0iKTsgLy8gd2FzbSBlbnRyeQorYXNzZXJ0LmVxKHN0YWNrdHJh
Y2VbNl0sICJ3YXNtLXN0dWJAW25hdGl2ZSBjb2RlXSIpOyAvLyB3YXNtIGVudHJ5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444021</attachid>
            <date>2021-11-11 16:31:59 -0800</date>
            <delta_ts>2021-11-11 18:09:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111163158.patch</filename>
            <type>text/plain</type>
            <size>398626</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDVkZDgyYWRiMWUzNWI4NmIyZTdmMzk1ZTI4ZTMzNmE5YTk0MWE5Li5jZTY0ZjkyMWE1OWNmZTNk
ZWI5N2EyOWQxNWVjN2JkODlmNzIxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTUgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oOgor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwOgor
ICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oOgorICAgICAgICAoSlNDOjpjYWxsTGlua0luZm9Gb3IpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJT
dHViKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZSk6
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnZpc2l0V2Vhayk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9TdHViKToKKyAgICAgICAgKiBieXRl
Y29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjppc0xpbmtl
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c3R1YiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRTbG93U3R1Yik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJTbG93U3R1Yik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGlu
ZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
ZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludE9y
QmFzZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hM
TEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9SZXBhdGNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAuCisgICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAg
ICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU93bmVy
KToKKyAgICAgICAgKEpTQzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OnJl
dmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6anNU
b1dhc21JQ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAg
IChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2gu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oLgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpo
YW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjp2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJl
ZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFi
aWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8pOgorICAgICAgICAoSlND
OjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpK
SVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6
CisgICAgICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
dmlydHVhbEZvcldpdGhGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgIChK
U0M6OnZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF9saW5rX2NhbGwpOgorICAgICAg
ICAoSlNDOjpMTEludDo6bGxpbnRfdmlydHVhbF9jYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAg
ICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwp
OgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOiBEZWxldGVkLgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAgICAgICAoSlND
OjpMTEludDo6Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVy
bkxvY2F0aW9uVGh1bmspOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wUmVnaXN0ZXI6Om9wZXJhdG9y
IENhbGxMaW5rSW5mbyopOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAg
ICAgKiBvZmZsaW5lYXNtL2Nsb29wLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rp
b25zLnJiOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2F0ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJTGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisKIDIwMjEtMTEtMTEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBWTTo6d3JpdGVCYXJyaWVyKCkgYW5kIFZNOjptdXRhdG9yRmVuY2Uo
KS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmM0YTVjODI3N2NhNzcw
MWQ4NDllZmY2NDY3YmQ4ODc5NTkwMDA4Li5jYzQxZmMwM2QwYTA4NmNjNzdjZTRlN2QwMDJkZTE3
Yzg2NDMyMDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC02NTksNyAr
NjU5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAogICAgIGJ5dGVj
b2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmgKLSAg
ICBieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCiAgICAgYnl0ZWNvZGUvTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKICAgICBieXRlY29kZS9MYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg5YzljMTc0YmIyMjNiMzZjMzk2YmFmYzQ2ZmUx
MTY2YTY4MjBmNDMuLjMxNWI0ZjBmOTZlNDE3MzdmMzdiMDExOWY3MGM2YjY5OTcxNDg4YTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDcsNyArMTQ3LDYgQEAKIAkJMEYwQ0FF
RkMxRUM0REE2QjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclByaXZhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENBRUZBMUVDNERBNjIwMDk3
MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0FFRkYxRUM0REE4ODAwOTcwRDEyIC8qIEhl
YXBGaW5hbGl6ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxs
YmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQw
MDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJ
bnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTBGMUEz
MUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0
b20uaCAqLzsgfTsKIAkJMEYxMkRFMTAxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enou
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTJERTBF
MTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8q
IERlZmVyR0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE4Niw3ICsxODUsNiBAQAogCQkwRjI0
RTU0NDE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1M0YxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUklu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3
IC8qIEpJVE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0
ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3
IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi87IH07CiAJCTBGMjRF
NTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkw
MEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU1NjE3RjBCNzFDMDBBQkIyMTcg
LyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1l
U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCAqLzsgfTsKQEAgLTE4OTIsNiArMTg5MCw3IEBACiAJCUUzM0Y1MDg3MUI4
NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzRjUwODYxQjg0NDlF
RjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJ
CUUzNDAwRUMxMjJBMUNDN0IwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzQwMEVDMDIy
QTFDQzc4MDA5REVENTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5lcy5oICovOyB9OwogCQlF
MzQ5QTc4MTI0OTFGMTYxMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNDlBNzgwMjQ5MUYxNUEwMDFC
QTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUUzNEQxQUU1MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNo
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJbmxpbmVzLmggKi87IH07CiAJCUUz
NEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQYXJzZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEU2NTczMjA2NjhFOEQwMEZCODFBQyAvKiBQ
YXJzZUhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRFREJGNjFEQjVGRkMxMDBE
Qzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTM0RjkzMEUyMzIyRDg4MjAwMkI4REI0IC8qIEpTR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRGOTMw
QzIzMjJEODgxMDAyQjhEQjQgLyogSlNHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkwNiw2ICsxOTA1LDcgQEAKIAkJRTM1QTBC
OUQyMjBBRDg3QTAwQUM0NDc0IC8qIEV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1QTBCOUMyMjBBRDg3QTAwQUM0
NDc0IC8qIEV4ZWN1dGFibGVCYXNlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNUNBMTU0MURCQzNBNUMwMEY4MzUxNiAvKiBET01K
SVRIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNUNBMTUyMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVDQTE1NjFEQkMz
QTVGMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9N
SklUQWJzdHJhY3RIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRTM1RTM2M0UyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUUzNjNDMjczREM4QzYw
MERCMjRDQyAvKiBSZXBhdGNoLmggKi87IH07CiAJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAv
KiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzVFODlGQjI1QzUwRjg2MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNUU4OUZFMjVD
NTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTg5RkMyNUM1MEY4NzAwNzFFRTFFIC8qIEJpZ1Vp
bnQ2NEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTM2MzdFRTkyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNjM3RUU3MjM2RTU2
QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzOTEsNyArMjM5MSw2IEBACiAJCTBGMENBRUZF
MUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZpbmFsaXplckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJ
bmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5k
ZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0lu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0Qy
IC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDdXN0
b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRnV6ei5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNl
cHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkZ1
enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NTQsOCArMjQ1Myw2IEBACiAJ
CTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRPcGVyYXRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAv
KiBUZW1wUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVt
cFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjRFNTQ5MTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjI0
RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRF
NTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTUzMTdGMEI3MUMwMEFCQjIxNyAvKiBJ
bmxpbmVDYWxsRnJhbWVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lQ2FsbEZyYW1lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMDcsNiArNTIwNCw3IEBACiAJCUUzNDAwRUMwMjJBMUND
NzgwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTM0OUE3N0YyNDkxRjE1OTAwMUJBMzM2IC8qIERGR0NvZGVPcmlnaW5Qb29sLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0NvZGVPcmlnaW5Qb29sLmNwcDsgcGF0aCA9IGRmZy9ERkdDb2Rl
T3JpZ2luUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNDlBNzgwMjQ5
MUYxNUEwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdD
b2RlT3JpZ2luUG9vbC5oOyBwYXRoID0gZGZnL0RGR0NvZGVPcmlnaW5Qb29sLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNEQxQUU0MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNo
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRFNjU3MzIwNjY4RThEMDBGQjgx
QUMgLyogUGFyc2VIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNl
SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRFNjU3NDIwNjY4RThFMDBG
QjgxQUMgLyogUGFyc2VIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhcnNlSGFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEVEQkY2
MURCNUZGQzEwMERDODdBNSAvKiBGcmFtZVRyYWNlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRnJhbWVUcmFjZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01MjI5LDYgKzUyMjcsOCBAQAogCQlFMzVDQTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklU
QWJzdHJhY3RIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVEFi
c3RyYWN0SGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVDQTE1MTFEQkMz
QTU2MDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERPTUpJVEhlYXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzNUNBMTUyMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSklUSGVhcFJhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBh
dGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1RTM2M0QyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0
Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUU4OUZCMjVDNTBGODYwMDcxRUUxRSAv
KiBCaWdJbnQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZ0lu
dDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1RTg5RkMyNUM1MEY4
NzAwNzFFRTFFIC8qIEJpZ1VpbnQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJpZ1VpbnQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
NjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtUaW1lQ29uc3RhbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTY0NTgsOCArNjQ1OCw2IEBACiAJCQkJNjIzQTM3RUIxQjg3QTdCRDAw
NzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8sCiAJCQkJMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMy
IC8qIFJlZ2lzdGVyU2V0LmNwcCAqLywKIAkJCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyog
UmVnaXN0ZXJTZXQuaCAqLywKLQkJCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRj
aC5jcHAgKi8sCi0JCQkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLywK
IAkJCQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcCAqLywKIAkJCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFy
YXJnc0ZyYW1lLmNwcCAqLywKQEAgLTg4MTUsNyArODgxMyw2IEBACiAJCQkJMEZCNTQ2NzYxNEY1
OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi8sCiAJCQkJRTM2MzdF
RTgyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuY3BwICovLAogCQkJCUUzNjM3
RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggKi8sCi0JCQkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8sCiAJCQkJNTNGQTJB
RTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTE0Rjc5
RjZFMjE2RUFENTAwMDA0NkQzOSAvKiBNZXRhZGF0YVRhYmxlLmNwcCAqLywKQEAgLTg4NjIsNiAr
ODg1OSw5IEBACiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVz
ZXMuaCAqLywKIAkJCQkwRkY2MEFCRjE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFj
ZS5jcHAgKi8sCiAJCQkJMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3Bh
Y2UuaCAqLywKKwkJCQlFMzVFMzYzRDI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5jcHAgKi8s
CisJCQkJRTM1RTM2M0MyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guaCAqLywKKwkJCQlFMzRE
MUFFNDI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCAqLywKIAkJCQk4NjVEQTBD
OTI1Qjg5NjJBMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcCAqLywKIAkJCQk4
NjVEQTBDNzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi8sCiAJ
CQkJODY1REEwQzYyNUI4OTU5RTAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFZhcmlhbnQuY3Bw
ICovLApAQCAtOTc0Nyw2ICs5NzQ3LDcgQEAKIAkJCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEg
LyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERERTE5ODMy
RDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzZE
NEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOUZB
N0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZlckdDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZDNzEyREYxN0NEODc3QzAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVy
cmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0NjM4NzUxRTcwRERFQzAwRjEy
QUMxIC8qIERlZmVycmVkV29ya1RpbWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzIzLDggKzEw
MzI0LDYgQEAKIAkJCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUREN0Y1MjNDMUJCQjUwMDkwNUYxMyAvKiBK
U0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVD
MjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTA1MjYsNyArMTA1
MjUsNiBAQAogCQkJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJh
bFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBERTlBMDkxQkU3RDY5RTAwNUQ4OUQ5IC8q
IExMSW50QXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMEZDNDVBMTRCRDE1RjUwMEI4
MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDcyNiw3ICsxMDcyNCw4IEBACiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJl
bW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgy
RTY5IC8qIFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTky
RjU2QjcxRTRFODRCMjAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBp
biBIZWFkZXJzICovLAotCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFMzVFMzYzRTI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTM0RDFBRTUyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTlGM0ZCOTI2MTNDNzg5MDA2OUU4OUYgLyog
UmVzb3VyY2VFeGhhdXN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBFOEM2RDRB
MDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQjY0MkYyNUQ2
RkI0RDAwMUFEREI0IC8qIFJvb3RNYXJrUmVhc29uLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNzg0
LDcgKzEwNzgzLDYgQEAKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJv
dmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUz
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAotCQkJ
CUZFOUZBN0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZlckdDSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBT
cGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0
MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTA1
Miw2ICsxMTA1MCw4IEBACiAJCQkJRTMyODJCQkIxRkU5MzBBRjAwRURBRjcxIC8qIFlhcnJFcnJv
ckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZ
YXJyRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2NzA0Qjg3MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTNCQzQzRjI2RDAxM0E2
MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNGMEZD
OTUyNkExMUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDc5M2Y0NmY3
YmM1OGU1MDhjZGE2Y2I5MDE1YWEwOTJlOGM5ODYwZDkuLmI2OTU1NTdhZmU2MGYxNDc1MTAwOWIx
YjUwNWY1NTEzMzQwNWI5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTI3Myw2
ICsyNzMsNyBAQCBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKIGJ5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRlY29kZS9SZWR1Y2VXaGl0
ZXNwYWNlLmNwcAorYnl0ZWNvZGUvUmVwYXRjaC5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFu
ZFN0YXR1cy5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCiBieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTY3Niw3ICs2NzcsNiBAQCBqaXQvUmVnLmNwcAogaml0
L1JlZ2lzdGVyQXRPZmZzZXQuY3BwCiBqaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCiBqaXQv
UmVnaXN0ZXJTZXQuY3BwCi1qaXQvUmVwYXRjaC5jcHAKIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuY3BwCiBqaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCiBqaXQvU2xvd1BhdGhDYWxsLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKaW5k
ZXggYTZjYTVjODFjNTEwOTVmODE5OGQ5YjgyZGIxNGE1ODFhMjVjZTYwOS4uMDc1MDRiYTA0ZTU5
YjZkMWRjYTIzNTg4YmVmYjU0ZGYxOTE4NWEyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKIAotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0KIG5h
bWVzcGFjZSBKU0MgewogCiBlbnVtIGNsYXNzIE5lYXJDYWxsTW9kZSA6IHVpbnQ4X3QgeyBSZWd1
bGFyLCBUYWlsIH07CkBAIC0yNjksNSArMjY3LDMgQEAgaW5saW5lIENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252ZXJ0aWIK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKaW5kZXgg
MDYyNDBlODc0MzYzODczYjlkZjJjYzlmMzdmMzgyOTE4ZmU3ZTI5ZS4uZmY5MzA1ODlkYjI3MTE4
MGQwOTllMjM1NmM5OTdkYzU5YjM1NmU3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRGlz
YXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIK
LSNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAKICNpZiBPUyhMSU5VWCkKICNpbmNs
dWRlICJQZXJmTG9nLmgiCkBAIC00MywyOSArNDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIHNpemVf
dCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNpemVzW0xpbmtCdWZmZXI6
Om51bWJlck9mUHJvZmlsZXNdOwogc2l6ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0
aXZlTGlua2VkQ291bnRzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmlsZXNdOwogCi1ib29sIHNo
b3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAo
Y29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUo
KSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKTsKLX0KLQotYm9vbCBzaG91
bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAg
aWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2Rl
OjpCQlFNb2RlOgotICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEJCUURpc2Fzc2VtYmx5KCk7
Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGU6Ci0gICAgY2FzZSBXYXNt
OjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZToKLSAgICAgICAgcmV0dXJuIE9w
dGlvbnM6OmR1bXBPTUdEaXNhc3NlbWJseSgpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIExpbmtCdWZmZXI6OkNvZGVSZWY8TGlu
a0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5
SW1wbCgpCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCA1YTNmMDBmMDVjNjg1ODI5NTc3MjY2
N2ZjMjIzNTY3ZjY4ZTkyYjg3Li4yODVkZjBkMWExODA5ZGIyMGI0Nzk0Y2QzMTIwNTllZmM2ZWUw
MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApA
QCAtNDMsMTIgKzQzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSBXYXNtIHsK
LWVudW0gY2xhc3MgQ29tcGlsYXRpb25Nb2RlIDogdWludDhfdDsKLX0KLQotY2xhc3MgQ29kZUJs
b2NrOwotCiAvLyBMaW5rQnVmZmVyOgogLy8KIC8vIFRoaXMgY2xhc3MgYXNzaXN0cyBpbiBsaW5r
aW5nIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBtYWNybyBhc3NlbWJsZXIsIG9uY2UgY29kZSBnZW5l
cmF0aW9uCkBAIC00NDYsOCArNDQwLDYgQEAgY2xhc3MgTGlua0J1ZmZlciB7CiAgICAgICAgIDog
KGxpbmtCdWZmZXJSZWZlcmVuY2UpLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseTxyZXN1
bHRQdHJUYWc+KCkpCiAjZW5kaWYKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29k
ZUJsb2NrKik7Ci0KICNkZWZpbmUgRklOQUxJWkVfQ09ERV9GT1IoY29kZUJsb2NrLCBsaW5rQnVm
ZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIC4uLikgIFwKICAgICBGSU5BTElaRV9DT0RFX0lG
KChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY29kZUJsb2NrKSB8fCBPcHRpb25zOjphc3luY0Rp
c2Fzc2VtYmx5KCkpLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIF9fVkFfQVJH
U19fKQogCkBAIC00NzYsOCArNDY4LDYgQEAgYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
Q29kZUJsb2NrKik7CiAjZGVmaW5lIEZJTkFMSVpFX1JFR0VYUF9DT0RFKGxpbmtCdWZmZXJSZWZl
cmVuY2UsIHJlc3VsdFB0clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKSAgXAogICAg
IEZJTkFMSVpFX0NPREVfSUYoSlNDOjpPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgSlND
OjpPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wUmVnRXhwRGlzYXNz
ZW1ibHkoKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBkYXRhTG9nRkFyZ3Vt
ZW50c0ZvckhlYWRpbmcpCiAKLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNv
bXBpbGF0aW9uTW9kZSk7Ci0KICNkZWZpbmUgRklOQUxJWkVfV0FTTV9DT0RFKGxpbmtCdWZmZXJS
ZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgLi4uKSAgXAogICAgIEZJTkFMSVpFX0NPREVfSUYoKEpT
Qzo6T3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJl
ZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCmlu
ZGV4IDVkNTY3NDFlZmU2NjQyNmVmY2EyMDUyYWMyNTA5ODMyMjAyMzc3ZDAuLjcwZGIwZDAzOWVh
N2VkNjExYzhhNmU1ZDgwODkxM2YwYWQ1YmQ1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKQEAgLTI2
LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJEaXNhc3Nl
bWJsZXIuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNDUHRyVGFnLmgiCisj
aW5jbHVkZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYzLDUgKzY2LDI4IEBAIENTdHJpbmcg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPERpc2Fzc2VtYmx5CiAgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAorYm9vbCBz
aG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYg
KGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7Cit9CisKK2Jvb2wgc2hv
dWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9kZSBtb2RlKQoreworICAg
IGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9k
ZTo6QkJRTW9kZToKKyAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgp
OworICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlOgorICAgIGNhc2UgV2Fz
bTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU6CisgICAgICAgIHJldHVybiBP
cHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHkoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgKaW5kZXggOTI1NTkxOGIxYmExNzVhMWY0OWRjMzAyNWVjNmZjYTg4OTM5ZDM2
NC4uMWVhMzI0NTQxNWFiMDhhNDVjN2QzZTU5NTk2MGM0NDViMTlmZjc1MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCkBAIC01NCw2ICs1NCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdh
c20geworZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgOiB1aW50OF90OworfSAvLyBuYW1lc3Bh
Y2UgV2FzbQorCitjbGFzcyBDb2RlQmxvY2s7CiB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjsKIAogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwpAQCAtMzc3LDcg
KzM4MiwxMCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgOiBwcml2YXRlIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ckJhc2UgewogCiAgICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciog
bmFtZSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRhYmxlQWRkcmVzcygpLCBkYXRhTG9j
YXRpb24oKSwgbmFtZSwgb3V0KTsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShudWxscHRyLCBudWxscHRy
LCBuYW1lLCBvdXQpOwogICAgIH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdCB7IGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIsIG91dCk7IH0KQEAgLTUzNyw2ICs1NDUsOSBA
QCBpbmxpbmUgRnVuY3Rpb25QdHI8dGFnPjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPHRhZz4gcHRyKQogewogfQogCitib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2Rl
QmxvY2sqKTsKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9u
TW9kZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IGJlMmU4Yzgx
MWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIuLjAxMzg2MGI2NmMyYjE5YThjYmI1OTUz
YTVkMGU0NGRkMjc3ZmJkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYgpAQCAtMjYsNiArMjYsNyBAQAogCiAgICAgOkJhc2ljQmxvY2tMb2Nh
dGlvbiwKICAgICA6Qm91bmRMYWJlbCwKKyAgICA6Q2FsbExpbmtJbmZvLAogICAgIDpEZWJ1Z0hv
b2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lvbiwKQEAg
LTQ0LDcgKzQ1LDYgQEAKICAgICA6SlNTY29wZSwKICAgICA6SlNUeXBlLAogICAgIDpKU1ZhbHVl
LAotICAgIDpMTEludENhbGxMaW5rSW5mbywKICAgICA6UmVzdWx0VHlwZSwKICAgICA6T3BlcmFu
ZFR5cGVzLAogICAgIDpQcml2YXRlRmllbGRQdXRLaW5kLApAQCAtODQwLDcgKzg0MCw4IEBACiAg
ICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAg
Y2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBD
YWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NTIsNyArODUzLDggQEAKICAg
ICAgICAgYXJndjogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBj
YWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENh
bGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg2NSw3ICs4NjcsOCBAQAogICAg
ICAgICBlY21hTW9kZTogRUNNQU1vZGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAg
ICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86
IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg3OSw2ICs4ODIsNyBAQAog
ICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAg
ICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTkw
MCw2ICs5MDQsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CiAgICAgfSwKQEAgLTkyMSw2ICs5MjYsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0lu
Zm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUsCiAgICAgfQpAQCAtOTMzLDcgKzkzOSw4IEBACiAgICAgICAgIGFyZ3Y6
IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZv
OiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8s
CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBW
YWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC05NDcsNiArOTU0LDcgQEAKICAgICAgICAgZmlyc3RW
YXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5m
bzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC0xMjQ5LDcgKzEyNTcsOCBA
QAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGl0ZXJhdGlvbk1ldGFkYXRhOiBJdGVyYXRpb25N
b2RlTWV0YWRhdGEsCiAgICAgICAgIGl0ZXJhYmxlUHJvZmlsZTogVmFsdWVQcm9maWxlLAotICAg
ICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0lu
Zm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAg
ICAgICAgIGl0ZXJhdG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgICAgICBtb2RlTWV0YWRh
dGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIG5leHRQcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCkBAIC0xMjcyLDcgKzEyODEsOCBAQAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGl0ZXJh
dGlvbk1ldGFkYXRhOiBJdGVyYXRpb25Nb2RlTWV0YWRhdGEsCiAgICAgICAgIGl0ZXJhYmxlUHJv
ZmlsZTogQXJyYXlQcm9maWxlLAotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJ
bmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVBy
b2ZpbGUsCiAgICAgICAgIGRvbmVNb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAg
ICAgICAgIGRvbmVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCkBAIC0xMzkzLDYgKzE0MDMsOSBAQAog
b3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180NAogb3AgOmxsaW50X2Nsb29wX2Rp
ZF9yZXR1cm5fZnJvbV9qc180NQogb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180
Ngorb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180Nworb3AgOmxsaW50X2Nsb29w
X2RpZF9yZXR1cm5fZnJvbV9qc180OAorb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9q
c180OQogCiBlbmRfc2VjdGlvbiA6Q0xvb3BIZWxwZXJzCiAKQEAgLTE0MTUsNiArMTQyOCwxMCBA
QAogb3AgOmxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9u
X2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6bGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUKK29w
IDpsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfY29uc3Ry
dWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lCiBv
cCA6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lCiBvcCA6
Y2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lCiBvcCA6bm9ybWFsX29zcl9leGl0X3RyYW1w
b2xpbmUKQEAgLTE0MjMsNiArMTQ0MCw4IEBACiBvcCA6bGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4
Y2VwdGlvbgogb3AgOm9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3Jl
dHVybl9sb2NhdGlvbgorb3AgOm9wX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KK29wIDpv
cF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVy
bl9sb2NhdGlvbgogb3AgOm9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb24KQEAgLTE0MzgsMTUg
KzE0NTcsMTUgQEAKIG9wIDpvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpv
cF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0b3JfbmV4
dF9zbG93X3JldHVybl9sb2NhdGlvbgotb3AgOm9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb24K
IG9wIDpvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxf
dmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NhbGxfZXZhbF9zbG93X3JldHVy
bl9sb2NhdGlvbgogCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jYWxsCi1vcCA6anNfdHJhbXBvbGlu
ZV9vcF90YWlsX2NhbGwKIG9wIDpqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdAorb3AgOmpzX3Ry
YW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzCitvcCA6anNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rf
dmFyYXJncwogb3AgOmpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dAogb3AgOmpzX3RyYW1w
b2xpbmVfb3BfaXRlcmF0b3Jfb3Blbgogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCmluZGV4IDRmNDdjOGJjY2Y4ZTU3NDhhYTliMGYzNmU2
ZjM2MzA1YWRjMzAwMTEuLjI3MGNkNmYxZDAyZjQ0ZDUzZGIzZTZhYTYzYWZmYTE1ZTBjMDkyNmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCkBAIC0xODAsNyArMTgwLDcgQEAgcHRyZGlm
Zl90IHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgdW5zaWduZWQgY2hlY2sKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVNZXRhZGF0
YT4KLUxMSW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYg
bWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK0NhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50
SW5kZXgpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CiAgICAgcmV0dXJu
IG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAppbmRleCAzYjgwM2IzOGE3ODY5YjQ5Mzg5YzA3OTBhYmM4
YmViOGQ0MGE1NThhLi5hMWFmY2Y5MzhhNTFmMmJjMTcyZjBmZDIwMjcxMzJlNjcyZWVkOTdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcApA
QCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUg
PHd0Zi9MaXN0RHVtcC5oPgogCi0jaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCiBD
YWxsTGlua0luZm86OkNhbGxUeXBlIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3IoT3Bjb2RlSUQg
b3Bjb2RlSUQpCkBAIC04MiwxMSArODEsMTMgQEAgQ2FsbExpbmtJbmZvOjp+Q2FsbExpbmtJbmZv
KCkKIAogdm9pZCBDYWxsTGlua0luZm86OmNsZWFyU3R1YigpCiB7CisjaWYgRU5BQkxFKEpJVCkK
ICAgICBpZiAoIXN0dWIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdHViLT5jbGVhckNh
bGxOb2Rlc0Zvcih0aGlzKTsKICAgICBtX3N0dWIgPSBudWxscHRyOworI2VuZGlmCiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQpAQCAtMTEzLDE5ICsxMTQsMTkgQEAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpkb25lTG9jYXRp
b24oKQogICAgIHJldHVybiBtX2RvbmVMb2NhdGlvbjsKIH0KIAotc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3QgcG9seW1vcnBoaWNDYWxsZWVNYXNrID0gMTsKLQogdm9pZCBDYWxsTGlua0luZm86
OnNldE1vbm9tb3JwaGljQ2FsbGVlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCEoYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKSAmIHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwog
ICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suc2V0KHZtLCBvd25lciwgY2FsbGVlKTsKIAotICAgIGlm
IChpc0RhdGFJQygpKSAKKyAgICBpZiAoaXNEYXRhSUMoKSkKICAgICAgICAgdS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7CiAgICAgZWxzZSB7CisjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0
cikpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9j
YWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtMTM1LDggKzEz
NiwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUoKQogICAgIG1fY2FsbGVlT3JD
b2RlQmxvY2suY2xlYXIoKTsKICAgICBpZiAoaXNEYXRhSUMoKSkKICAgICAgICAgdS5kYXRhSUMu
bV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7Ci0gICAgZWxzZSBpZiAoIWNs
ZWFyZWRCeUpldHRpc29uKCkpCisgICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkpIHsK
KyNpZiBFTkFCTEUoSklUKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgbnVsbHB0cik7CisjZW5kaWYKKyAgICB9CiB9CiAK
IEpTT2JqZWN0KiBDYWxsTGlua0luZm86OmNhbGxlZSgpCkBAIC0yMjQsNiArMjI4LDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgCiAgICAgaWYgKGlzTGlua2Vk
KCkpIHsKICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAg
ICBpZiAoIXN0dWIoKS0+dmlzaXRXZWFrKHZtKSkgewogICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coCkBAIC0yMzQsNiArMjM5LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYg
dm0pCiAgICAgICAgICAgICAgICAgdW5saW5rKHZtKTsKICAgICAgICAgICAgICAgICBtX2NsZWFy
ZWRCeUdDID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB9IGVsc2UgaWYg
KCF2bS5oZWFwLmlzTWFya2VkKG1fY2FsbGVlT3JDb2RlQmxvY2suZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBpZiAoaXNEaXJlY3QoKSkgewogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp2ZXJib3NlT1NSKCkpKSB7CkBAIC0yODAsMTMgKzI4NiwxNCBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogdm9p
ZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEmIHNodWZmbGVEYXRhKQogewogICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlx
dWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KHNodWZmbGVEYXRhKTsKICAgICBtX2ZyYW1lU2h1ZmZs
ZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8dm9pZCgp
PiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCkBAIC0zNDUsNyArMzUyLDcgQEAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGwKICAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJ
bmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CkBAIC0zNTgsNyArMzY1LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFIKICAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBT
Y29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgcmV0dXJuIGVt
aXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CkBAIC0z
NjYsNyArMzczLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJgogCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCiB7Ci0gICAgc2V0U2xv
d1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7CisgICAgc2V0U2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOwogICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0
T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CkBAIC0zNzYs
MjEgKzM4MywzMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwg
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZgogICAgIGppdC5tb3ZlKGNhbGxM
aW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigp
KSwgSlNFbnRyeVB0clRhZyk7CiB9CisjZW5kaWYKIAotdm9pZCBDYWxsTGlua0luZm86OmluaXRp
YWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlu
a0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit2b2lkIENh
bGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIENhbGxUeXBlIGNhbGxUeXBlLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKiBmcmFtZVNo
dWZmbGVEYXRhKQogewotICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRDYWxs
TGlua0luZm8uYnl0ZWNvZGVJbmRleCk7Ci0gICAgc2V0VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJ
bmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOwotICAgIG1fZG9uZUxvY2F0aW9uID0gdW5saW5rZWRD
YWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOwotICAgIGlmICh1bmxpbmtlZENhbGxMaW5rSW5mby5m
cmFtZVNodWZmbGVEYXRhKSB7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lU2h1ZmZsZURhdGEpOwor
ICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jYWxs
VHlwZSA9IGNhbGxUeXBlOworI2lmIEVOQUJMRShKSVQpCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9
IEdQUkluZm86OnJlZ1QwOworICAgIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSBHUFJJbmZvOjpy
ZWdUMjsKKyAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVmZmxl
RGF0YSkgewogICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJl
ZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUuCi0gICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1h
a2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFt
ZVNodWZmbGVEYXRhKTsKKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4oKmZyYW1lU2h1ZmZsZURhdGEpOwogICAgIH0KLSAgICBzZXRV
c2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CiAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9H
UFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8
SlNFbnRyeVB0clRhZz4oKSk7CisjZW5kaWYKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6
Olllcyk7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwo
KS5jb2RlKCkpOworICAgIC8vIElmIEpJVCBpcyBkaXNhYmxlZCwgd2Ugc2hvdWxkIG5vdCBzdXBw
b3J0IGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjYWxsIElDLgorICAgIGlmICghT3B0aW9uczo6dXNl
SklUKCkpCisgICAgICAgIGRpc2FsbG93U3R1YnMoKTsKIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwpAQCAtNDA2LDcgKzQyMyw3IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQp
CiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENh
bGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKIApAQCAtNDYyLDYgKzQ3
OSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IHRhcmdldCkKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHRhcmdldCk7CiB9CisjZW5kaWYK
IAogdm9pZCBDYWxsTGlua0luZm86OnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewpAQCAtNDgzLDExICs1MDEs
MTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIoKQogICAgICAgICBtX2Nh
bGxlZU9yQ29kZUJsb2NrLmNsZWFyKCk7CiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWND
YWxsRGVzdGluYXRpb24gPSBudWxscHRyOwogICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldp
dGhQYXRjaCgKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhcnRPZkJyYW5jaFB0cldpdGhQ
YXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiksIGNhbGxlZUdQUigpLCBu
dWxscHRyKTsKKyNlbmRpZgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxM
aW5rSW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1
YikKIHsKICAgICBjbGVhclN0dWIoKTsKQEAgLTUwNCw3ICs1MjUsNiBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikK
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0
dWItPmNvZGUoKS5jb2RlKCkpKTsKICAgICB9CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5oCmluZGV4IGU1Zjc3Y2YzN2JmMjY2ZjRiOWM5M2M1MGNmOTk2
ZDIxYzY2OGNlNDUuLmIyZDNhZmE2Y2Y2MGQxNWJlN2E1ZDQ5ZDg2MmNjNDVjZjhiNThhNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTI4
LDI1ICsyOCwyOSBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCiAjaW5jbHVk
ZSAiQ2FsbE1vZGUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUg
IlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5o
PgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKLSNpZiBFTkFCTEUoSklUKQotCiBjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBFeGVjdXRh
YmxlQmFzZTsKIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKK2Ns
YXNzIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCitzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlu
a0luZm87CiAKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKKwogICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9u
ZSwKICAgICAgICAgQ2FsbCwKQEAgLTU5LDYgKzYzLDggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDog
cHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgRGly
ZWN0Q29uc3RydWN0LAogICAgICAgICBEaXJlY3RUYWlsQ2FsbAogICAgIH07CisKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwogICAgIAog
ICAgIHN0YXRpYyBDYWxsVHlwZSBjYWxsVHlwZUZvcihPcGNvZGVJRCBvcGNvZGVJRCk7CiAKQEAg
LTE3NCwzNSArMTgwLDQzIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdT
ZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBpc1ZhcmFyZ3NDYWxs
VHlwZShzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSkpOwogICAgIH0KIAotICAgIGJv
b2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiBtX3N0dWIgfHwgbV9jYWxsZWVPckNvZGVCbG9j
azsgfQorICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiBzdHViKCkgfHwgbV9jYWxs
ZWVPckNvZGVCbG9jazsgfQogICAgIHZvaWQgdW5saW5rKFZNJik7CiAKKyNpZiBFTkFCTEUoSklU
KQogICAgIHZvaWQgc2V0VXBDYWxsKENhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlR1BS
KQogICAgIHsKICAgICAgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOwogICAgICAgICBtX2NhbGxl
ZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0m
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIpOwotCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bGVlR1BSOyB9CisjZW5kaWYKKworICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIENhbGxU
eXBlLCBCeXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSopOwogICAgIAogICAgIGVu
dW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CiAgICAgICAgIFllcywKICAgICAgICAgTm8K
ICAgICB9OwogCisjaWYgRU5BQkxFKEpJVCkKIHByaXZhdGU6Ci0gICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1Rh
aWxDYWxsLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9V
TlVTRURfUkVUVVJOOwogcHVibGljOgogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VE
YXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZh
c3RQYXRoKENDYWxsSGVscGVycyYpOwotICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCk7CisgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBT
Y29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0
U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKICAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlD
U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwor
ICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB2b2lkIHNldERpcmVjdENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOworI2VuZGlmCisKICAgICB2
b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6Olll
czsgfQpAQCAtMjE3LDcgKzIzMSw2IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIG1fZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwo
KTsKIAogICAgIGJvb2wgYWxsb3dTdHVicygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsg
fQogCkBAIC0yMzcsNyArMjUwLDYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tl
ZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIHNldENvZGVCbG9jayhW
TSYsIEpTQ2VsbCosIEZ1bmN0aW9uQ29kZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVCbG9j
aygpOwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2soKTsKLSAgICB2b2lkIHNldERp
cmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAgICAg
dm9pZCBzZXRMYXN0U2VlbkNhbGxlZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0
KiBjYWxsZWUpOwogICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjQ3LDIyICsy
NTksMTggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9k
ZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlv
bihFeGVjdXRhYmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAg
ICAgCisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lPiYmKTsKKyNlbmRpZgogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YigpIGNvbnN0CiAgICAgeworI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgIHJldHVybiBtX3N0dWIuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRTbG93U3R1YihSZWY8SklUU3R1YlJvdXRpbmU+JiYgbmV3U2xvd1N0dWIpCi0gICAgewotICAg
ICAgICBtX3Nsb3dTdHViID0gV1RGTW92ZShuZXdTbG93U3R1Yik7Ci0gICAgfQotCi0gICAgdm9p
ZCBjbGVhclNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwor
I2Vsc2UKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKICAgICB9CiAKICAgICBib29s
IHNlZW5PbmNlKCkKQEAgLTMzMCwxOSArMzM4LDE3IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHVpbnQzMl90KiBh
ZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCi0gICAgewotICAgICAgICBy
ZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0gICAgfQotI2VuZGlmCi0K
ICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBzZXRNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCk7Cisg
ICAgdm9pZCB1cGRhdGVNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICB7CisgICAgICAgIGlmIChtX21heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgICAg
ICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRo
Q291bnQoKQogICAgIHsKQEAgLTM2NCwxMCArMzcwLDEyIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fY2FsbGVlR1BSOwogICAgIH0KKyNlbmRpZgogCiAgICAg
dWludDMyX3Qgc2xvd1BhdGhDb3VudCgpCiAgICAgewpAQCAtMzgzLDkgKzM5MSwxMSBAQCBjbGFz
cyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4gewogICAgIHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0xpbmtlZCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoc3R1YigpKQorICAgICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgICAgICAgICAgc3R1YigpLT5mb3JFYWNoRGVwZW5kZW50Q2VsbChmdW5jdG9yKTsKLSAg
ICAgICAgICAgIGVsc2UgeworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIGZ1bmN0b3IobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzRGlyZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9sYXN0U2Vl
bkNhbGxlZU9yRXhlY3V0YWJsZS5nZXQoKSk7CkBAIC0zOTcsMjYgKzQwNywzNSBAQCBjbGFzcyBD
YWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4g
ewogCiAgICAgdm9pZCB2aXNpdFdlYWsoVk0mKTsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgdm9p
ZCBzZXRGcmFtZVNodWZmbGVEYXRhKGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CiAKICAg
ICBjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0YSgpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9mcmFtZVNodWZmbGVEYXRhLmdldCgpOwogICAgIH0KKyNlbmRpZgog
CiBwcml2YXRlOgogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFz
dFBhdGhTdGFydCgpOwogCisgICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBv
ZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2Nh
dGVkIGZvciBhcmd1bWVudHMuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKICAg
ICAgICAgVW5pb25UeXBlKCkgCisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIDogZGF0YUlD
IHsgbnVsbHB0ciwgSW52YWxpZEdQUlJlZyB9CisjZWxzZQorICAgICAgICAgICAgOiBkYXRhSUMg
eyBudWxscHRyIH0KKyNlbmRpZgogICAgICAgICB7IH0KICAgICAgICAgc3RydWN0IERhdGFJQyB7
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25v
bW9ycGhpY0NhbGxEZXN0aW5hdGlvbjsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgR1BS
UmVnIG1fY2FsbExpbmtJbmZvR1BSOworI2VuZGlmCiAgICAgICAgIH0gZGF0YUlDOwogCiAgICAg
ICAgIHN0cnVjdCB7CkBAIC00MjksOSArNDQ4LDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAKICAgICBXcml0ZUJh
cnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0Nl
bGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CisjaWYgRU5BQkxFKEpJVCkKICAgICBS
ZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+IG1fc3R1YjsKLSAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IG1fc2xvd1N0dWI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNo
dWZmbGVEYXRhPiBtX2ZyYW1lU2h1ZmZsZURhdGE7CisjZW5kaWYKICAgICBDb2RlT3JpZ2luIG1f
Y29kZU9yaWdpbjsKICAgICBib29sIG1faGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgIGJv
b2wgbV9oYXNTZWVuQ2xvc3VyZSA6IDE7CkBAIC00NDEsOSArNDYxLDEwIEBAIGNsYXNzIENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAg
ICAgYm9vbCBtX2NsZWFyZWRCeUpldHRpc29uIDogMTsKICAgICB1bnNpZ25lZCBtX2NhbGxUeXBl
IDogNDsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBtX3VzZURhdGFJQyA6IDE7IC8vIFVzZURh
dGFJQworI2lmIEVOQUJMRShKSVQpCiAgICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworI2VuZGlmCiAgICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9OwotICAg
IHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2
YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGly
ZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgog
fTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKQEAgLTQ1MywxMSArNDc0LDcgQEAgaW5saW5lIENvZGVPcmln
aW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
IAogc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNh
biB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxs
VHlwZSBjYWxsVHlwZTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBk
b25lTG9jYXRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBm
cmFtZVNodWZmbGVEYXRhOwogfTsKIAotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAKaW5kZXggZjdhZmIyYjBmMjhmZDllNWZmYzVjMzRiNmEzYTg1NmFlMzczMDJm
NS4uZjJkZGEwZWVkYWFiOTY0NGEwM2JlYjZlNTNmZWExNzIyM2EwY2FmZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZv
LmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgogCkBAIC02MywzNCArNjIsNyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQgogICAgICAg
ICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIH0KICNlbmRpZgotCi0gICAgYXV0byBpbnN0
cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpOwotICAgIE9wY29kZUlEIG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7Ci0K
LSAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwotICAgIHN3aXRjaCAob3ApIHsK
LSAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+
YXM8T3BDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIG9wX2NvbnN0cnVjdDoKLSAgICAgICAgY2FsbExpbmtJbmZv
ID0gJmluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2Nr
KS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF90YWlsX2NhbGw6
Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbD4oKS5t
ZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1
Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2Fs
bExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCku
bWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0gICAgfQot
ICAgIAotICAgIAotICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhjYWxsTGlua0luZm8tPmxhc3RT
ZWVuQ2FsbGVlKCkpOworICAgIHJldHVybiBDYWxsTGlua1N0YXR1cygpOwogfQogCiBDYWxsTGlu
a1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNzdjYWE4ZTU3ZTk0YWQ3MzJhODcwM2I3
MTBmZDQ4MGY3MTgxM2FlNi4uY2IwMTYyNWQ1ZjhkM2ZiZmFkYmM1NDI5NWE4NzU0MDE1MTY0YzQ0
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAg
LTQ0OSwxNCArNDQ5LDE3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSh0aGlzKTsgXAogICAgIG5ldyAoJm1ldGFkYXRhKSBf
X29wOjpNZXRhZGF0YSB7IGJ5dGVjb2RlIH07IFwKIAotI2RlZmluZSBDQVNFKF9fb3ApIGNhc2Ug
X19vcDo6b3Bjb2RlSUQKLQotI2RlZmluZSBMSU5LKC4uLikgXAotICAgIENBU0UoV1RGX0xBWllf
RklSU1QoX19WQV9BUkdTX18pKTogeyBcCisjZGVmaW5lIExJTktfSU1QTCguLi4pIFwKICAgICAg
ICAgSU5JVElBTElaRV9NRVRBREFUQShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpIFwKICAg
ICAgICAgV1RGX0xBWllfSEFTX1JFU1QoX19WQV9BUkdTX18pKHsgXAogICAgICAgICAgICAgV1RG
X0xBWllfRk9SX0VBQ0hfVEVSTShMSU5LX0ZJRUxELCAgV1RGX0xBWllfUkVTVF8oX19WQV9BUkdT
X18pKSBcCiAgICAgICAgIH0pIFwKKworI2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bj
b2RlSUQKKworI2RlZmluZSBMSU5LKC4uLikgXAorICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19W
QV9BUkdTX18pKTogeyBcCisgICAgICAgIExJTktfSU1QTChfX1ZBX0FSR1NfXykgXAogICAgICAg
ICBicmVhazsgXAogICAgIH0KIApAQCAtNDY1LDEwICs0NjgsNiBAQCBib29sIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGluawogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpOwogICAgICAgICBtX2J5dGVjb2RlQ29zdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsK
ICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBMSU5LKE9wQ2FsbFZhcmFyZ3Ms
IHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAg
ICAgIExJTksoT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUpCi0gICAgICAgIExJ
TksoT3BDb25zdHJ1Y3RWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0QnlWYWws
IHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRQcml2YXRlTmFtZSwgcHJvZmlsZSkKIApAQCAt
NDk4LDExICs0OTcsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9w
RW51bWVyYXRvckhhc093blByb3BlcnR5KQogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5
VmFsLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQotICAgICAgICBM
SU5LKE9wVGFpbENhbGwsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmls
ZSkKLSAgICAgICAgTElOSyhPcENvbnN0cnVjdCwgcHJvZmlsZSkKLQogICAgICAgICBMSU5LKE9w
SW5CeVZhbCkKICAgICAgICAgTElOSyhPcFB1dEJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlW
YWxEaXJlY3QpCkBAIC01MjcsMTMgKzUyMSw5MyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
ICAgICAgICBMSU5LKE9wQ2F0Y2gpCiAgICAgICAgIExJTksoT3BQcm9maWxlQ29udHJvbEZsb3cp
CiAKKyAgICAgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxs
LCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6
ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0
aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFp
bENhbGwsIHByb2ZpbGUpCisjaWYgRU5BQkxFKEpJVCkKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1Qw
IH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworI2Vu
ZGlmCisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbnVtUGFyYW1ldGVycygpOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3Rl
ciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworI2VuZGlmCisgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1Mb2NhbHMgPSBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5y
ZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgeworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJ
bkpTU3RhY2soCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAgICAg
ICAgICAgICBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgfQorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihj
YWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOworI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOworI2VuZGlm
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lz
dGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtZXRhZGF0
YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgJnNodWZmbGVEYXRhKTsKKyNl
bHNlCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlD
KHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5k
ZXgoKSwgbnVsbHB0cik7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENh
bGxFdmFsLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5p
dGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGlu
c3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogeworICAgICAgICAgICAgTElOS19JTVBM
KE9wQ29uc3RydWN0LCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0lu
Zm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgICAg
IElOSVRJQUxJWkVfTUVUQURBVEEoT3BJdGVyYXRvck9wZW4pCisgICAgICAgICAgICBMSU5LX0lN
UEwoT3BJdGVyYXRvck9wZW4pCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5p
bml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwg
aW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogewotICAgICAgICAgICAgSU5J
VElBTElaRV9NRVRBREFUQShPcEl0ZXJhdG9yTmV4dCkKKyAgICAgICAgICAgIExJTktfSU1QTChP
cEl0ZXJhdG9yTmV4dCkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRp
YWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0
cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIExJTktfSU1Q
TChPcENhbGxWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlu
a0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNv
ZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAg
ICAgICAgICBMSU5LX0lNUEwoT3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAg
ICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0lu
Zm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxM
aW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIExJTktfSU1QTChPcENvbnN0cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAg
ICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlu
a0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC03ODMsMjEgKzg1NywxOCBA
QCB2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2Vs
aW5lSklUQ29kZT4gaml0Q29kZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2pp
dENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOwogICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7
CiAgICAgICAgIGppdERhdGEubV9zdHViSW5mb3MgPSBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVTdHVi
SW5mbz4oaml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpOwotICAgICAgICBqaXRE
YXRhLm1fY2FsbExpbmtJbmZvcyA9IEZpeGVkVmVjdG9yPENhbGxMaW5rSW5mbz4oaml0Q29kZS0+
bV91bmxpbmtlZENhbGxzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgdW5saW5rZWRDYWxs
TGlua0luZm8gOiBqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMpIHsKKyAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChs
b2NrZXIsIHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAg
QVNTRVJUKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVM
b2NhdGlvbnMoeyB9LCB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb24pOworICAgICAg
ICB9CisKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50
UG9vbC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1f
Y29uc3RhbnRQb29sLmF0KGkpOwogICAgICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CiAg
ICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogewotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucG9pbnRlcigpKTsKLSAg
ICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8g
PSBqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHNbaW5kZXhdOwotICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3NbaW5kZXhdOwot
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtKCksIHVubGlu
a2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSAmY2FsbExpbmtJbmZvOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVy
KCkpOwogICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2Vk
U3R1YkluZm8gPSBqaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zW2luZGV4XTsKQEAgLTE1Njcs
MTUgKzE2MzgsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygp
CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwotCi0gICAgZm9yRWFjaExMSW50Q2Fs
bExpbmtJbmZvKFsmXShMTEludENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAg
IGlmIChjYWxsTGlua0luZm8uaXNMaW5rZWQoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChjYWxsTGlu
a0luZm8uY2FsbGVlKCkpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksICJDbGVhcmluZyBMTEludCBjYWxsIGZyb20gIiwgKnRoaXMpOwotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLnVubGluaygpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjYWxsTGlu
a0luZm8ubGFzdFNlZW5DYWxsZWUoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChjYWxsTGlua0luZm8u
bGFzdFNlZW5DYWxsZWUoKSkpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJMYXN0U2Vl
bkNhbGxlZSgpOwotICAgIH0pOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE1OTMsOCArMTY1
NSw2IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVREYXRhU2xvdyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5s
aW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJ
bmZvcykKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0oKSk7CiAgICAgICAg
IGZvciAoYXV0byYgc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykgewogICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyQmFzZSBsb2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKICAg
ICAgICAgICAgIHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsKQEAg
LTE2MTIsMTkgKzE2NzIsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNo
ZXMoKQogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IGlmIChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKLSAgICAgICAgLy8gVmVy
aWZ5IHdlIGRvbid0IG5lZWQgdG8gZmluYWxpemUgdGhlc2Ugc2luY2UgdGhleSdyZSB2aXJ0dWFs
IGNhbGxzLgotICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogc3RhdGlj
X2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9ldmFsQ2FsbExpbmtJ
bmZvcykgewotICAgICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwot
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5mb3JFYWNoRGVwZW5kZW50Q2VsbChbXSAoSlNDZWxs
KikgewotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0KLQotICAgIH0KLSNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTE2MzcsNiAr
MTY4NCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZt
KQogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAg
ICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCisgICAgZm9yRWFjaExMSW50T3JCYXNl
bGluZUNhbGxMaW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAg
ICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSk7CisgICAgfSk7CisKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghIWppdENvZGUoKSkKICAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMo
KTsKQEAgLTE3MDAsMTIgKzE3NTEsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIElDU3RhdHVzTWFwJiByZXN1bHQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKKyAgICBm
b3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykgeworICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCks
IElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsTGlua0luZm8gPSAmY2FsbExpbmtJbmZv
OworICAgIH0pOwogICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCiAgICAgICAgICAgICAgICAg
cmVzdWx0LmFkZChzdHViSW5mby5jb2RlT3JpZ2luLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFs
dWUuc3R1YkluZm8gPSAmc3R1YkluZm87Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5r
SW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAgICByZXN1bHQu
YWRkKGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1
ZS5jYWxsTGlua0luZm8gPSAmY2FsbExpbmtJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
ewpAQCAtMTc2MCwxNSArMTgxMiwyMiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpm
aW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1DYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4IGluZGV4KQorQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0
ZWNvZGVJbmRleCBpbmRleCkKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpIHsKLSAg
ICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5k
ZXgpKQotICAgICAgICAgICAgICAgIHJldHVybiAmY2FsbExpbmtJbmZvOwotICAgICAgICB9Cisg
ICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCk7CisgICAgc3dp
dGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworI2RlZmluZSBDQVNFKE9wKSBcCisgICAg
Y2FzZSBPcDo6b3Bjb2RlSUQ6IFwKKyAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+
KCkubWV0YWRhdGEodGhpcykubV9jYWxsTGlua0luZm87IFwKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDQVNFKQorCisjdW5k
ZWYgQ0FTRQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KKwogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
ewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CkBAIC0yMTM1LDEzICsyMTk0LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNocmlua01vZGUgc2hyaW5rTW9kZSkKIH0KIAog
I2lmIEVOQUJMRShKSVQpCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJh
bWUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8qIGluY29taW5nKQotewotICAgIG5vdGljZUlu
Y29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2luY29taW5nQ2FsbHMucHVzaChp
bmNvbWluZyk7Ci19Ci0KIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0Nh
bGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcp
CiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKQEAgLTIxNTIsMTAgKzIy
MDQsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChDYWxs
RnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0MKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCit2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZy
YW1lLCBDYWxsTGlua0luZm8qIGluY29taW5nKQoreworICAgIG5vdGljZUluY29taW5nQ2FsbChj
YWxsZXJGcmFtZSk7CisgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOworfQorCiB2
b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiB7Ci0gICAgd2hpbGUgKG1faW5j
b21pbmdMTEludENhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCi0g
ICAgICAgIG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCktPnVubGluaygpOworICAgIHdoaWxl
IChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCisgICAg
ICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsodm0oKSk7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBKSVREYXRhKiBqaXREYXRhID0gbnVsbHB0cjsKICAgICB7CkBAIC0yMTYzLDIwICsy
MjIxLDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICAgICAg
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKTsKICAgICB9CiAgICAgaWYgKGppdERhdGEpIHsKLSAg
ICAgICAgd2hpbGUgKGppdERhdGEtPm1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IGppdERhdGEt
Pm1faW5jb21pbmdDYWxscy5lbmQoKSkKLSAgICAgICAgICAgIGppdERhdGEtPm1faW5jb21pbmdD
YWxscy5iZWdpbigpLT51bmxpbmsodm0oKSk7CiAgICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2lu
Y29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IGppdERhdGEtPm1faW5jb21pbmdQb2x5
bW9ycGhpY0NhbGxzLmVuZCgpKQogICAgICAgICAgICAgaml0RGF0YS0+bV9pbmNvbWluZ1BvbHlt
b3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUq
IGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyogaW5jb21pbmcpCi17Ci0gICAgbm90aWNl
SW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2luY29taW5nTExJbnRDYWxscy5wdXNo
KGluY29taW5nKTsKLX0KLQogQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkK
IHsKICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKQEAgLTIzMjksMTMgKzIzNzksMTIgQEAgdm9pZCBD
b2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24sIFJlb3B0
aW1pemF0aW9uTW9kZSBtb2QKICAgICBpZiAodm0uaGVhcC5jdXJyZW50VGhyZWFkSXNEb2luZ0dD
V29yaygpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkKICAgICAgICAg
cmV0dXJuOwogCi0jaWYgRU5BQkxFKEpJVCkKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgaWYgKEpJVERhdGEqIGppdERhdGEgPSBtX2pp
dERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0
RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRD
bGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9CisgICAgICAgIGZvckVhY2hMTEludE9yQmFz
ZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKKyAgICAgICAgfSk7
CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1v
biA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0yMzQ0LDcgKzIzOTMsNiBAQCB2b2lkIENv
ZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRp
bWl6YXRpb25Nb2RlIG1vZAogICAgICAgICB9CiAjZW5kaWYKICAgICB9Ci0jZW5kaWYKIAogICAg
IC8vIFRoaXMgYWNjb21wbGlzaGVzICgyKS4KICAgICBvd25lckV4ZWN1dGFibGUoKS0+aW5zdGFs
bENvZGUodm0sIGFsdGVybmF0aXZlKCksIGNvZGVUeXBlKCksIHNwZWNpYWxpemF0aW9uS2luZCgp
KTsKQEAgLTI4NDcsMTkgKzI4OTUsMTMgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFy
cmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGUKIHsKICAg
ICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAg
ICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewotI2RlZmluZSBDQVNFMShPcCkg
XAorI2RlZmluZSBDQVNFKE9wKSBcCiAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKICAgICAgICAg
cmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2Zp
bGU7CiAKLSNkZWZpbmUgQ0FTRTIoT3ApIFwKLSAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAg
ICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxM
aW5rSW5mby5tX2FycmF5UHJvZmlsZTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUoQ0FTRTEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5L
X0lORk8oQ0FTRTIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNF
KQogCi0jdW5kZWYgQ0FTRTEKLSN1bmRlZiBDQVNFMgorI3VuZGVmIENBU0UKIAogICAgIGNhc2Ug
T3BHZXRCeUlkOjpvcGNvZGVJRDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZD4oKTsKQEAgLTMwMjksMTcgKzMwNzEsMTIgQEAgdm9pZCBDb2RlQmxv
Y2s6OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVByZWRpY3Rpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2UKICAgICAgICAgfQogICAgIH0pOwogCi0jZGVmaW5lIFZJU0lUMShfX29wKSBc
CisjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsm
XSAoYXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSk7IH0p
OwogCi0jZGVmaW5lIFZJU0lUMihfX29wKSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29w
PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEubV9jYWxsTGlua0luZm8u
bV9hcnJheVByb2ZpbGUpOyB9KTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BS
T0ZJTEUoVklTSVQxKQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19J
TkZPKFZJU0lUMikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lU
KQogCi0jdW5kZWYgVklTSVQxCi0jdW5kZWYgVklTSVQyCisjdW5kZWYgVklTSVQKIAogICAgIG1f
bWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck5leHQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsK
ICAgICAgICAgcHJvY2VzcyhtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggNjRmOWY1YWJjZmUyYWU3MDVk
MWRhNjVhYTlmODMxOTdiOTZjNmQzMS4uYjdhZWEyNjc3ZjVlOTQ5MDhhYjM1NWY5NmIwZDIzYzM3
ODI0MjAxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApA
QCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlu
a0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUg
Ik1ldGFkYXRhVGFibGUuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpA
QCAtMjYxLDggKzI2MCw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAg
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEZpeGVk
VmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgRml4ZWRWZWN0
b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7Ci0gICAgICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxDYWxsTGlua0luZm8sIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBt
X2luY29taW5nQ2FsbHM7CiAgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0Nh
bGxOb2RlLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lz
dGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2
ZVJlZ2lzdGVyczsKQEAgLTI5MSw3ICsyODgsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFy
aWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNlCiAgICAgLy8gdGhhdCB0aGVy
ZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMs
IHlvdSdyZSByZWFsbHkKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBh
bW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCi0gICAgQ2FsbExpbmtJbmZvKiBnZXRD
YWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOworICAgIENhbGxMaW5r
SW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeXRlY29kZUluZGV4KTsKICAgICAKICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRD
b2RlTWFwKCk7CiAKQEAgLTMwOSwxNCArMzA2LDExIEBAIGNsYXNzIENvZGVCbG9jayA6IHB1Ymxp
YyBKU0NlbGwgewogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICB2b2lkIHVubGlua0luY29t
aW5nQ2FsbHMoKTsKLQotI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxs
KENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyopOworI2lmIEVOQUJMRShKSVQp
CiAgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSAg
ICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxs
TGlua0luZm8qKTsKLQogICAgIGNvbnN0IEluc3RydWN0aW9uKiBvdXRPZkxpbmVKdW1wVGFyZ2V0
KGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNDUzLDcgKzQ0Nyw3IEBA
IGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKGNv
bnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYpOwogCiAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBiaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiB1bmFyeUFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CkBAIC05NTksNyArOTUzLDcgQEAgY2xhc3MgQ29k
ZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgVk0qIG1fdm07CiAKICAgICBjb25zdCB2b2lk
KiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRyIH07Ci0gICAgU2VudGluZWxMaW5r
ZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxs
TGlua0luZm8+PiBtX2luY29taW5nTExJbnRDYWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8
Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNv
bWluZ0NhbGxzOwogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRj
aHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCmluZGV4IDFkNTk0YWI4MzUyODk3ZWM4YTc0NWVhMjQ5M2Y4ZDJkYTAxOGI5NjIuLjkyZGE5
OWEwYmEyYWNjMWZjZGI2YTk3MzVmY2RkZTIzZWZjOTMzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaApAQCAtODYsNyArODYsNyBA
QCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIENvZGVC
bG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit2b2lk
IENvZGVCbG9jazo6Zm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhjb25zdCBGdW5j
dG9yJiBmdW5jKQogewogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3Ap
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxM
aW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJ
bmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMzJlOWI2NmJiN2M2MWZlYjMz
OWY4MDUyOGMyZDM0NzFkODA2OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJ
bmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJKU0NQdHJUYWcuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCi0jaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IEluc3RydWN0aW9uOwotCi1jbGFzcyBMTEludENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0lu
Zm8+IHsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgdW5saW5rZWRCaXQgPSAweDE7Ci0KLSAg
ICBMTEludENhbGxMaW5rSW5mbygpID0gZGVmYXVsdDsKLSAgICAKLSAgICB+TExJbnRDYWxsTGlu
a0luZm8oKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAgICByZW1v
dmUoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuICEo
bV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgJiB1bmxpbmtlZEJpdCk7IH0KLSAg
ICAKLQotICAgIHZvaWQgbGluayhWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxs
ZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQotICAgIHsK
LSAgICAgICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICAgICAg
bV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihjYWxsZWUpOwotICAgICAgICB2bS53cml0ZUJhcnJpZXIob3duZXIsIGNhbGxlZSk7Ci0g
ICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwotICAgIH0KLQotICAgIHZvaWQg
dW5saW5rKCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2UgbGluayBpbnZhbGlkYXRlZC4gSXQgd29y
a3MgYmVjYXVzZSBMTEludCB0ZXN0cyB0aGUgZ2l2ZW4gY2FsbGVlIHdpdGggdGhpcyBwb2ludGVy
LiBCdXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMgbGFzdFNlZW5DYWxsZWUhCi0gICAgICAgIG1fY2Fs
bGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHw9IHVubGlua2VkQml0OwotICAgICAgICBt
X21hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KCk7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAg
fQotCi0gICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWlz
TGlua2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0
KTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogbGFzdFNlZW5DYWxsZWUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0ICYgfnVubGlua2VkQml0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNs
ZWFyTGFzdFNlZW5DYWxsZWUoKQotICAgIHsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2Fs
bGVlV2l0aExpbmtCaXQgPSB1bmxpbmtlZEJpdDsKLSAgICB9Ci0KLSAgICBBcnJheVByb2ZpbGUg
bV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmls
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVBy
b2ZpbGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNh
bGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZVRhcmdldDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4IGNhOGJl
ZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFhYzgzOWJkMzYuLjFjYmM2NmY4NDk5NTQ5OTdlZjdj
NTBkNDkzODQzMDJmMzVjNjI5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bj
b2RlLmgKQEAgLTEyNiwxMSArMTI2LDE5IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0
V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAg
bWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNybyhPcEdldFByaXZhdGVOYW1lKSBcCiAKLSNkZWZp
bmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAorI2RlZmluZSBG
T1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAorICAgIG1h
Y3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKKyAgICBtYWNybyhPcENhbGxF
dmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yT3Bl
bikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8oT3BDYWxsVmFyYXJn
cykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBtYWNybyhPcENvbnN0cnVjdFZhcmFyZ3MpIFwKKwor
I2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1hY3JvKSBcCiAgICAg
bWFjcm8oT3BHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9w
UHV0QnlWYWwpIFwKQEAgLTEzOSw2ICsxNDcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQog
ICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9y
SW5CeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCisgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKIAogI2Rl
ZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8p
IFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1T
QlNldENvbnN0ZXhwcihtCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09CSkVDVF9BTExP
Q0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld09iamVjdCkgXAogCi0jZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCi0g
ICAgbWFjcm8oT3BDYWxsKSBcCi0gICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAgIG1hY3JvKE9w
Q2FsbEV2YWwpIFwKLSAgICBtYWNybyhPcENvbnN0cnVjdCkgXAotICAgIG1hY3JvKE9wSXRlcmF0
b3JPcGVuKSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmluZSBGT1JfRUFD
SF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9w
QWRkKSBcCiAgICAgbWFjcm8oT3BNdWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZXBhdGNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDljMmVkN2Q0OGU1YmEyNTZhMzM0NGRmMTY2ZGNh
ZmI3NWM2MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlcGF0Y2guY3BwCkBAIC0wLDAgKzEsMjAzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZXBhdGNoLmgiCisKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgor
I2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiRE9NSklUR2V0dGVy
U2V0dGVyLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhlY3V0
YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCisjaW5jbHVkZSAiRnVs
bENvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2lu
Y2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXRzLmgiCisj
aW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2Uu
aCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSklU
LmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgorI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRl
ICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgorI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25t
ZW50LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3JzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyB2b2lk
IGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3sKKyAgICBjYWxs
TGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxh
dGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorc3Rh
dGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIGxpbmtTbG93UGF0aFRvKHZtLCBj
YWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91
dGluZVB0clRhZz4oKSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1
YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwg
Y2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworfQorCitzdGF0aWMgSlNDZWxsKiB3ZWJBc3Nl
bWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICAvLyBFYWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVp
ciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRl
IG93bmVyLgorICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQorfQorCit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCisgICAgVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayog
Y2FsbGVlQ29kZUJsb2NrLAorICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQoreworICAgIEFTU0VSVCghY2FsbExpbmtJbmZv
LnN0dWIoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxs
ZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNh
bGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwo
KSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2Rl
QmxvY2soKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2
YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUo
Y2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKKyAgICBBU1NFUlQo
b3duZXIpOworCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2Fs
bExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRy
KTsKKyAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUp
OworCisgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQor
ICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVy
Q29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVt
cChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwor
CisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5r
SW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKKworI2lmIEVOQUJMRShK
SVQpCisgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9y
Q2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7CisgICAgICAgIGxpbmtTbG93UGF0
aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2
bSwgY2FsbExpbmtJbmZvKTsKK30KKworc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgp
KSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29kZUJsb2Nr
KCk7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpCisgICAg
ICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyNlbmRpZgorICAg
IH0gZWxzZSB7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkp
IHsKKyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYp
OworCisgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOworICAgICAgICB9CisgICAgICAgIGNh
bGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUg
Y2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCisgICAgfQorICAgIGNh
bGxMaW5rSW5mby5jbGVhclNlZW4oKTsKKyAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7Cisg
ICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBjYWxsTGlua0luZm8ucmVt
b3ZlKCk7Cit9CisKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQoreworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAi
VW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7Cisg
ICAgCisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElMaW5rQ2FsbCgp
LnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICBpZiAoIWNhbGxlZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
aWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24q
Pih2bSwgY2FsbGVlKSkKKyAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlw
b2ludCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIFVOVVNFRF9QQVJBTShr
aW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKKyNlbmRpZgorICAgIHJldHVybiBudWxs
cHRyOworfQorCisjaWYgRU5BQkxFKEpJVCkKKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+IG9wZXJhdGlvbikKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX09QRVJBVElP
Tl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9uKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oQ29kZUxvY2F0aW9u
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsKQoreworICAgIEpTQ19SRVRVUk5fUkVUQUdHRURf
Q0FMTF9UQVJHRVRfV0lUSF9WQUxJREFUSU9OKGNhbGwpOworfQorCitzdGF0aWMgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKGNvZGVCbG9jay0+
dXNlRGF0YUlDKCkpCisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9u
KHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7CisgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbjsKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
RlRMSklUKSB7CisgICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBN
YWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgcmV0dXJuIHJldGFnT3Bl
cmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xv
d1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7CisgICAgfQorI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICBy
ZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oY2FsbCk7Cit9CisKK3ZvaWQgZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25D
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pCit7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgICAgICBWTSYgdm0gPSBj
b2RlQmxvY2stPnZtKCk7CisgICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1
bmtzOworICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9B
c3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAg
YXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
Pjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtleUZvclNsb3dQ
YXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOworICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxU
YXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHRodW5rcy5nZXRTbG93UGF0
aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChj
YWxsLCBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOworfQor
CitzdGF0aWMgdm9pZCByZXBhdGNoU2xvd1BhdGhDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pCit7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsK
KyAgICAgICAgc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0
YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZ0
bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxs
TG9jYXRpb24sIG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30KKworZW51bSBJbmxpbmVDYWNoZUFjdGlv
biB7CisgICAgR2l2ZVVwT25DYWNoZSwKKyAgICBSZXRyeUNhY2hlTGF0ZXIsCisgICAgQXR0ZW1w
dFRvQ2FjaGUKK307CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+
c3RydWN0dXJlKHZtKTsKKworICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3RydWN0dXJlLT50eXBl
SW5mbygpOworICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5GbGF0
dGVuZWRCZWZvcmUoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAvLyBGbGF0dGVuaW5nIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgb2Zmc2V0LCBzbyByZXR1cm4g
ZWFybHkgZm9yIGFub3RoZXIgdHJ5LgorICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAg
IH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIHJldHVybiBBdHRlbXB0
VG9DYWNoZTsKK30KKworc3RhdGljIGJvb2wgZm9yY2VJQ0ZhaWx1cmUoSlNHbG9iYWxPYmplY3Qq
KQoreworICAgIHJldHVybiBPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpOworfQorCitBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKFZN
JiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCYgcmVzdWx0KQoreworICAgIGlmIChyZXN1bHQuc2hvdWxk
UmVzZXRTdHViQW5kRmlyZVdhdGNocG9pbnRzKCkpIHsKKyAgICAgICAgcmVzdWx0LmZpcmVXYXRj
aHBvaW50cyh2bSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAgICAgc3R1Yklu
Zm8ucmVzZXQobG9ja2VyLCBjb2RlQmxvY2spOworICAgICAgICB9CisgICAgfQorfQorCitpbmxp
bmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6VHJ5
QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICBj
YXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2
YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7
CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZE9wdGltaXplOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCit7CisgICAgc3dp
dGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25HZXRCeUlkOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXM7CisgICAgY2FzZSBHZXRCeUtpbmQ6
OlRyeUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkOworICAgIGNhc2Ug
R2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZERp
cmVjdDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25HZXRCeVZhbEdlbmVyaWM7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgorICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWU7CisgICAgY2FzZSBHZXRCeUtpbmQ6
OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
QnlJZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsK
KworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0Zh
aWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1t
ZWRpYXRlcy4KKyAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKKyAgICAgICAgY29uc3QgYm9vbCBpc1ByaXZhdGUgPSBraW5kID09IEdldEJ5
S2luZDo6UHJpdmF0ZU5hbWUgfHwga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDsK
KworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAocHJv
cGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKSkgeworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAg
ICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNv
ZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2Nr
LCBzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5l
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3Ry
aW5nTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChEaXJlY3RB
cmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odm0s
IGJhc2VDZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3ZlcnJpZGVz
LCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2FkISBHdWFy
ZGluZworICAgICAgICAgICAgICAgIC8vIHRoaXMgd2l0aCBzdWNoIGEgY2hlY2sgZW5hYmxlcyB1
cyB0byBhZGQgYW4gSUMgY2FzZSBmb3IgdGhhdCBsb2FkIGlmIG5lZWRlZC4KKyAgICAgICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpEaXJlY3RBcmd1bWVudHNMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxTY29wZWRB
cmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgLy8gRGl0dG8uCisg
ICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCisgICAgICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSAmJiBiYXNlQ2VsbC0+aW5oZXJpdHM8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+KHZtKSAmJiAh
c2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vZHVsZU5hbWVzcGFjZVNs
b3QgPSBzbG90Lm1vZHVsZU5hbWVzcGFjZVNsb3QoKSkKKyAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHByb3Bl
cnR5TmFtZSwganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oYmFzZUNlbGwpLCBtb2R1
bGVOYW1lc3BhY2VTbG90LT5lbnZpcm9ubWVudCwgU2NvcGVPZmZzZXQobW9kdWxlTmFtZXNwYWNl
U2xvdC0+c2NvcGVPZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFu
ZXdDYXNlKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5p
c1Vuc2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisKKyAg
ICAgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOworICAgICAgICAgICAg
aWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaXNQcml2YXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+
KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFs
dWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFj
dGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKKyAgICAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0
ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICAg
ICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICYmIHNsb3QuaXND
YWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJh
c2VWYWx1ZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQor
ICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rp
b24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYo
bG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZlB0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisKKyAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ3VzdG9tKCkgJiYg
c2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgIC8vIFRvIGNh
Y2hlIHNlbGYgY3VzdG9tcywgd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMgYmVjYXVzZSB3
ZQorICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBn
b2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlCisgICAgICAgICAgICAgICAgLy8gY29uc3RhbnQg
ZnVuY3Rpb24gcG9pbnRlci4KKworICAgICAgICAgICAgICAgIGlmICghcHJlcGFyZUNoYWluRm9y
Q2FjaGluZyhnbG9iYWxPYmplY3QsIHNsb3Quc2xvdEJhc2UoKSwgc2xvdC5zbG90QmFzZSgpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0g
YmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5w
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRl
bmVkQmVmb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsgLy8gV2UgbWF5IGhhdmUgY2hhbmdlZCBwcm9wZXJ0
eSBvZmZzZXRzLgorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzbG90
LmlzVW5zZXQoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGtpbmQgaXMgR2V0QnlLaW5k
OjpCeUlkRGlyZWN0IG9yIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUsIHdlIGRvIG5vdCBuZWVkIHRv
IGludmVzdGlnYXRlIHByb3RvdHlwZSBjaGFpbnMgZnVydGhlci4KKyAgICAgICAgICAgICAgICAv
LyBDYWNoZWFiaWxpdHkganVzdCBkZXBlbmRzIG9uIHRoZSBoZWFkIHN0cnVjdHVyZS4KKyAgICAg
ICAgICAgICAgICBpZiAoa2luZCAhPSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3QgJiYgIWlzUHJpdmF0
ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+Zmxh
dHRlbmVkRGljdGlvbmFyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkg
b2Zmc2V0cyBtYXkgaGF2ZSBjaGFuZ2VkIGR1ZSB0byBmbGF0dGVuaW5nLiBXZSdsbCBjYWNoZSBs
YXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3Qs
IGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJl
KHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gb2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZvciBmYXN0ZXIgYWNj
ZXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51
bGxwdHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIGBp
ZmAgc2hvdWxkIGJlIGluc2lkZSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eUJsYWguCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg1MjE1CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0
ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29u
ZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZS51aWQoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGdldHRlciA9IG51bGxwdHI7CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgIGdldHRlciA9IGpz
RHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBzbG90LmdldHRlclNldHRlcigpLT5nZXR0ZXIo
KSk7CisKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlOworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAm
JiBzbG90LmRvbUF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSA9IHNs
b3QuZG9tQXR0cmlidXRlKCk7CisKKyAgICAgICAgICAgIGlmIChraW5kID09IEdldEJ5S2luZDo6
VHJ5QnlJZCkgeworICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsK
KyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2Fz
ZTo6TWlzczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXRHZXR0ZXI7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwg
c3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hw
b2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKHN0dWJJbmZvLCBnZXR0ZXIsIHN0
cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBnZXR0ZXIsIFdURk1vdmUocHJvdG90eXBl
QWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChp
c1ByaXZhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNsb3QuaXNV
bnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaXNQcm94eSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6OkxvYWQsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIGlzUHJveHksIHNsb3Qud2F0Y2hwb2lu
dFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNVbnNldCgpID8gQWNjZXNzQ2FzZTo6TWlzcyA6IEFjY2Vz
c0Nhc2U6OkxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsIG9mZnNl
dCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0
Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlw
ZSB0eXBlOworICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigp
KQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0g
QWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1
ZUdldHRlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OkJ5
SWRXaXRoVGhpcyAmJiB0eXBlID09IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyICYm
IGRvbUF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBl
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJn
ZXRGcm9tUHJveHksCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQo
KSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQ
dHJUYWc+KHNsb3QuY3VzdG9tR2V0dGVyKCkpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LnNsb3RCYXNlKCkgIT0gYmFz
ZVZhbHVlID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvbUF0dHJpYnV0ZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExPR19JQygo
SUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZt
KSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90
QmFzZSgpID09IGJhc2VWYWx1ZSkpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFj
Y2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmlj
dCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1
bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpH
ZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAg
IGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRX
aXRoVGhpczoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgICAgICAg
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6CisgICAgICAgICAgICBjYXNlIEdldEJ5S2lu
ZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgICAgICBj
YXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2
bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hv
dWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2
b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgR2V0QnlLaW5kIGtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZUdldEJ5KGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtp
bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKK30KKworCitz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgIGlmICghaW5kZXguaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAg
ICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3ND
YXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChiYXNlLT50eXBlKCkgPT0g
RGlyZWN0QXJndW1lbnRzVHlwZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkRGlyZWN0QXJndW1lbnRzTG9hZDsKKyAgICAgICAgZWxzZSBpZiAoYmFzZS0+dHlw
ZSgpID09IFNjb3BlZEFyZ3VtZW50c1R5cGUpCisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFNjb3BlZEFyZ3VtZW50c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJh
c2UtPnR5cGUoKSA9PSBTdHJpbmdUeXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOworICAgICAgICBlbHNlIGlmIChpc1R5cGVkVmlldyhi
YXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4TG9hZDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50
OENsYW1wZWRMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
eXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5SW50MTZMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVG
bG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUZsb2F0NjRMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJ
QworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNl
IFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZEludDMyTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzTG9hZDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VMb2FkOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChy
ZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElk
ZW50aWZpZXIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZt
LCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxk
R2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lk
IHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheUdldEJ5VmFsKGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2Fj
aGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0
eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAg
ICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAg
ICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoK
KyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAg
ICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAg
ICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3
aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFT
U0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZp
ZWxkR2VuZXJpYzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorICAg
IC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKGNvbnN0
IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRL
aW5kKQoreworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5
SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToK
KyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHN3aXRjaCAocHV0
S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQo
c2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlW
YWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRP
cHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gTWFrZSB3
aW4gcG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBw
dXRLaW5kKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICB7CisgICAgICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVj
dC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCisgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRy
eSB0byBkbyBzb21ldGhpbmcgc21hcnRlciBoZXJlLi4uCisgICAgICAgIGlmIChpc0NvcHlPbldy
aXRlKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgIC8vIFdlIGNhbid0IGVuZCB1cCBzdG9yaW5nIHRvIGEgQ29X
IG9uIHRoZSBwcm90b3R5cGUgc2luY2UgaXQgc2hvdWxkbid0IG93biBwcm9wZXJ0aWVzLgorICAg
ICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc2xvdC5iYXNlKCktPmluZGV4aW5nTW9kZSgpKSk7
CisKKyAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFi
bGUoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgYm9vbCBpc1Byb3h5
ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5n
UHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFz
ZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxsOworICAg
ICAgICAgICAgaXNQcm94eSA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBv
bmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHkuIFdlIGRv
bid0CisgICAgICAgICAgICAvLyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2JhbCBvYmpl
Y3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgICAgICAvLyBp
biBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGJvb2wgaXNDYWNoZWFi
bGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBlKCkgPT0gUHV0UHJv
cGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKTsKKyAgICAgICAgICAgIGlmICghaXNDYWNoZWFibGVQcm94eSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1Byb3h5
ICYmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCB8fCBwdXRLaW5k
ID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkpCisgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsK
KworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFi
bGVQdXQoKSkgeworICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0IGhl
bHBzIGNhdGNoIGJ1Z3MgaWYgd2UgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBkaXNhYmxlIGNhY2hp
bmcKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHRyYW5zaXRpb24gdGhlbiBzdG9yZSB0byBh
biBleGlzdGluZyBwcm9wZXJ0eS4gVGhpcyBpcyBjb21tb24gYW1vbmcKKyAgICAgICAgICAgICAg
ICAvLyBwYXRocyB0aGF0IHJlaWZ5IGxhenkgcHJvcGVydGllcy4gSWYgd2UgcmVpZnkgYSBsYXp5
IHByb3BlcnR5IGFuZCBmb3JnZXQKKyAgICAgICAgICAgICAgICAvLyB0byBkaXNhYmxlIGNhY2hp
bmcsIHdlIG1heSBjb21lIGRvd24gdGhpcyBwYXRoLiBUaGUgUmVwbGFjZSBJQyBkb2VzIG5vdAor
ICAgICAgICAgICAgICAgIC8vIGtub3cgaG93IHRvIG1vZGVsIHRoZXNlIHR5cGVzIG9mIHN0cnVj
dHVyZSB0cmFuc2l0aW9ucyAob3IgYW55IHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIHRy
YW5zaXRpb24gZm9yIHRoYXQgbWF0dGVyKS4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gb2xkU3RydWN0dXJlKTsKKwor
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50
KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAg
ICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAg
ICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQor
ICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgeworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xk
U3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50
LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6
aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9j
aywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2Ug
PSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
UmVwbGFjZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvbGRTdHJ1Y3R1cmUs
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIGlzUHJveHkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWlzUHJveHkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKKwor
ICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBvbGQgc3RydWN0dXJlIGlzIGRpY3Rpb25hcnksIGl0IG1lYW5zIHRoYXQgdGhpcyBpcyBv
bmUtb24tb25lIGJldHdlZW4gYW4gb2JqZWN0IGFuZCBhIHN0cnVjdHVyZS4KKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIE5ld1Byb3BlcnR5IG9wZXJhdGlvbiwgZ2VuZXJhdGluZyBJQyBm
b3IgdGhpcyBkb2VzIG5vdCBvZmZlciBhbnkgYmVuZWZpdCBiZWNhdXNlIHRoaXMgdHJhbnNpdGlv
biBuZXZlciBoYXBwZW5zIGFnYWluLgorICAgICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOworCisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRl
bnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUp
LCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBKU09iamVj
dDo6cHV0IGlzIG92ZXJyaWRkZW4gYnkgVXNlck9iamVjdCwgVXNlck9iamVjdDo6cHV0IHBlcmZv
cm1zIHNpZGUtZWZmZWN0IG9uIEpTT2JqZWN0OjpwdXQsIGFuZCBpdCBuZWdsZWN0cyB0byBtYXJr
IHRoZSBQdXRQcm9wZXJ0eVNsb3QgYXMgbm9uLWNhY2hhZWJsZSwKKyAgICAgICAgICAgICAgICAv
LyB0aGVuIGFyYml0cmFyeSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgY2FuIGhhcHBlbiBkdXJpbmcg
dGhlIHB1dCBvcGVyYXRpb24sIGFuZCB0aGlzIGdlbmVyYXRlcyB3cm9uZyB0cmFuc2l0aW9uIGlu
Zm9ybWF0aW9uIGhlcmUgYXMgaWYgb2xkU3RydWN0dXJlIC0+IG5ld1N0cnVjdHVyZS4KKyAgICAg
ICAgICAgICAgICAvLyBJbiByZWFsaXR5LCB0aGUgdHJhbnNpdGlvbiBpcyBvbGRTdHJ1Y3R1cmUg
LT4gc29tZXRoaW5nIHVua25vd24gc3RydWN0dXJlcyAtPiBiYXNlVmFsdWUncyBzdHJ1Y3R1cmUu
CisgICAgICAgICAgICAgICAgLy8gVG8gZ3VhcmQgYWdhaW5zdCB0aGUgZW1iZWRkZXIncyBwb3Rl
bnRpYWxseSBpbmNvcnJlY3QgVXNlck9iamVjdDo6cHV0IGltcGxlbWVudGF0aW9uLCB3ZSBzaG91
bGQgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uIGFuZCBpZiBmb3VuZCwgYW5kIGdpdmUgdXAgb24g
Y2FjaGluZyB0aGUgcHV0LgorICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSh2bSkgPT0gbmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAo
YmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pICE9IG5ld1N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBB
U1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90
eXBlQWNjZXNzQ2hhaW47CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtpbmQ6
Ok5vdERpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJl
cGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNo
ZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9i
amVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFw
cm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
U2V0dGVyTWlzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaWRlbnQuaXNQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCBjb2RlQmxvY2ssIGds
b2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlVHJhbnNpdGlvbih2bSwgY29kZUJsb2Nr
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIHN0dWJJbmZvKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwg
c2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3ND
aGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZSBhIHNlbGYgY3VzdG9tLCBzaW5jZSB3ZSBtdXN0IGRp
c2FsbG93IGRpY3Rpb25hcmllcworICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0
byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9tIGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNoZSB0aGUg
Y29uc3RhbnQKKyAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBwb2ludGVyLgorICAgICAgICAg
ICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9i
amVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhY2hl
U3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAg
ICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0
cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBz
bG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6Ok5vbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNDdXN0b21BY2Nlc3Nvcigp
ID8gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXIgOiBBY2Nlc3NDYXNlOjpDdXN0b21W
YWx1ZVNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAg
ICAgIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbiksIGlzUHJveHksIHNsb3QuY3VzdG9tU2V0dGVyKCkucmV0YWdnZWQ8Q3VzdG9tQWNjZXNz
b3JQdHJUYWc+KCksIHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3QuYmFzZSgpIDogbnVs
bHB0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzbG90
LmlzQ2FjaGVhYmxlU2V0dGVyKCkpOworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFz
ZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6
dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBiYXNlQ2VsbC0+
c3RydWN0dXJlKHZtKSktPmdldCh2bSwgaWRlbnQuaW1wbCgpLCBhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpIHx8ICEoYXR0cmli
dXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBzbG90LmJhc2Uo
KSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vz
c29yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNl
dCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nh
c2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nh
c2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/
IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBX
VEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2Rl
KCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAs
IG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7CisKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBTdXBl
clNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgCisgICAgaWYgKHRy
eUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQs
IHB1dEtpbmQpKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCkKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAg
ICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vz
c0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJh
c2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVJbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFy
cmF5IGluIElDCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkg
JiBJbmRleGluZ1NoYXBlTWFzazsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkg
eworICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZv
LmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6
OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNj
ZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVt
cCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOworCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50
c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0
cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpT
VmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5k
LCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8sIHB1dEtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2Vu
ZXJpYykpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRl
UHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIGlmIChmb3JjZUlD
RmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7CisgICAgICAgIGlmICghYmFzZVZhbHVl
LmlzT2JqZWN0KCkgfHwgIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpIHx8IG9sZFN0cnVjdHVyZS0+aXNQcm94eSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlRGVsZXRlKCkpCisgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBpZiAoYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmIChi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBqc0Nh
c3Q8SlNPYmplY3QqPihiYXNlVmFsdWUpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7Cisg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOworCisgICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworCisg
ICAgICAgIGlmIChzbG90LmlzRGVsZXRlSGl0KCkpIHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG5ld09mZnNldCA9IGludmFsaWRPZmZzZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0
aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgp
LCBuZXdPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIGlmICghbmV3U3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgfHwgbmV3U3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgIEFTU0VSVChuZXdPZmZzZXQgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAg
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsK
KyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkgPT0gVHJh
bnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOworICAgICAgICAgICAgQVNTRVJUKG5ld1N0
cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChu
ZXdPZmZzZXQpKTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVEZWxl
dGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBuZXdPZmZzZXQsIG9sZFN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlKTsKKyAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzTm9uY29uZmlndXJhYmxl
KCkpIHsKKyAgICAgICAgICAgIGlmIChlY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0ZU5vbkNvbmZpZ3Vy
YWJsZSwgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVs
bHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVNaXNzLCBwcm9wZXJ0eU5h
bWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwgeyB9LCBudWxscHRyKTsKKworICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGVjbWFNb2RlLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisg
ICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkRlbEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
KworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDog
UmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90
JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IERlbEJ5S2luZCBraW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworCisgICAgaWYgKHRyeUNhY2hlRGVsZXRlQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIHNsb3QsIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHN0dWJJbmZv
LCBraW5kLCBlY21hTW9kZSkgPT0gR2l2ZVVwT25DYWNoZSkgeworICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhHZW5lcmljLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxs
KGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFt
ZS51aWQoKSkpKTsKKyAgICAgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQorICAgICAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25E
ZWxldGVCeUlkR2VuZXJpYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxHZW5lcmlj
KTsKKyAgICB9Cit9CisKK2lubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJv
cHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQoreworICAgIHN3aXRj
aCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICBjYXNlIEluQnlLaW5kOjpQcml2
YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5jdGlv
bihJbkJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtp
bmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5SWRHZW5lcmljOworICAgIGNh
c2UgSW5CeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeVZhbEdlbmVy
aWM7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25IYXNQcml2YXRlTmFtZUdlbmVyaWM7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnko
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKKyAgICBi
b29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7CisK
KyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkp
CisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8
ICghd2FzRm91bmQgJiYgIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGVGb3JBYnNlbmNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgIAorICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIGlmICghc2xv
dC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2Ut
PnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNz
Q2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICAg
ICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Cisg
ICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAgICAgICAg
IHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgor
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQK
KyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAg
ICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCisgICAgICAgICAgICAgICAgJiYgIXNsb3Qu
d2F0Y2hwb2ludFNldCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQ
YXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBi
YXNlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5
SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
IHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
c2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3Rh
dHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOwor
ICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+Zmxh
dHRlbmVkRGljdGlvbmFyeSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKKworICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykg
eworICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0Fj
Y2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4t
PnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90
b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFs
T2JqZWN0LCBiYXNlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgIGlmIChj
YWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3Qs
IGJhc2UsIHNsb3QpOworICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4p
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQg
PyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgcHJvcGVydHlOYW1lLCB3
YXNGb3VuZCA/IHNsb3QuY2FjaGVkT2Zmc2V0KCkgOiBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworCisgICAgICAg
IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2Fz
ZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgaWYgKGtpbmQgPT0g
SW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNv
ZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNo
SW5CeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBi
b29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
CisgICAgaWYgKHRyeUNhY2hlSW5CeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVV
cE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoR2VuZXJp
YywgYmFzZU9iamVjdC0+Y2xhc3NJbmZvKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6
OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rp
b24oa2luZCkpOworICAgIH0KK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
SGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBi
b29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElE
LnVpZCgpKTsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xv
YmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKworICAgICAgICBJ
bmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKKyAgICAg
ICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rp
b247CisKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIExPR19J
QygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6
OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBicmFuZElELCBpbnZhbGlkT2Zmc2V0LCBzdHJ1
Y3R1cmUsIHsgfSwgeyB9KTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwg
YnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0
ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdp
dGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsK
KworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIGJvb2wgd2FzRm91
bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisKKyAgICBpZiAodHJ5Q2FjaGVIYXNQcml2YXRl
QnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHdhc0Zv
dW5kLCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRHZW5lcmlj
KTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQ2hlY2tQcml2YXRlQnJh
bmQoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVy
IGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7
CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24g
YWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24gIT0g
QXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAgICAgIGJv
b2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNr
UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQs
IGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpjcmVhdGVDaGVja1ByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElE
LCBzdHJ1Y3R1cmUpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
bG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFu
ZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNv
bWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6Q2hlY2tQcml2YXRlQnJh
bmRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQ
cm9wZXJ0eSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsK
KyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNp
bmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29k
ZUJsb2NrLCByZXN1bHQpOworCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/
IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaENoZWNr
UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElE
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlQ2hlY2tQcml2YXRl
QnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHN0dWJJ
bmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisK
K3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVNldFByaXZhdGVCcmFuZCgKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmpl
Y3QqIGJhc2UsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJy
YW5kSUQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsK
KyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51
aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2Jh
bE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOworCisgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKwor
ICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNl
KTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJl
dHVybiBhY3Rpb247CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6c2V0QnJhbmRUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3Vy
cmVudGx5KG9sZFN0cnVjdHVyZSwgYnJhbmRJRC51aWQoKSk7CisgICAgICAgIGlmICghbmV3U3Ry
dWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgaWYg
KG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9s
ZFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5k
KCkgPT0gVHJhbnNpdGlvbktpbmQ6OlNldEJyYW5kKTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVj
dHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgIAorICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5
ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRBZGRBY2Nl
c3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZVNldFByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElELCBvbGRTdHJ1Y3R1cmUsIG5l
d1N0cnVjdHVyZSk7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShs
b2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5k
SUQsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29t
ZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRS
ZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQ
cm9wZXJ0eSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBz
dHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1bHQuc2hv
dWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2
b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsICBicmFuZElELCBzdHViSW5mbykg
PT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRHZW5lcmljKTsKK30KKworc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5zdGFuY2VPZigKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVl
LCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisg
ICAgYm9vbCB3YXNGb3VuZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgCisgICAgUkVMRUFTRV9BU1NF
UlQodmFsdWVWYWx1ZS5pc0NlbGwoKSk7IC8vIHNob3VsZENvbnNpZGVyQ2FjaGluZyByZWplY3Rz
IG5vbi1jZWxscy4KKyAgICAKKyAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgCisgICAgeworICAgICAgICBHQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAg
ICAgIAorICAgICAgICBKU0NlbGwqIHZhbHVlID0gdmFsdWVWYWx1ZS5hc0NlbGwoKTsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
UmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3RvdHlwZVZhbHVlKTsKKyAgICAgICAg
aWYgKHByb3RvdHlwZSkgeworICAgICAgICAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4odm0sIHZhbHVlKSkgeworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5jZU9mQWNj
ZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpJbnN0YW5jZU9mTWlzcywgc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpLAorICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChzdHJ1Y3R1cmUtPnByb3RvdHlwZVF1ZXJpZXNBcmVDYWNoZWFibGUoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUZWFjaCB0aGlzIHRvIGRvIHBvbHkgcHJvdG8uCisgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
NTY2MworICAgICAgICAgICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0
LCB2YWx1ZSwgd2FzRm91bmQgPyBwcm90b3R5cGUgOiBudWxscHRyKTsKKyAgICAgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JJbnN0YW5jZU9mKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvdG90eXBlLCB3YXNGb3VuZCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICB3YXNGb3Vu
ZCA/IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZIaXQgOiBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlz
cywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBwcm90
b3R5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKCFuZXdDYXNlKQorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJp
YywgQ2FjaGVhYmxlSWRlbnRpZmllcigpKTsKKyAgICAgICAgCisgICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5zdGFuY2VPZkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElk
ZW50aWZpZXIoKSkpOworICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNj
ZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0
KCksIG51bGxwdHIsIFdURk1vdmUobmV3Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHJl
c3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
Okluc3RhbmNlT2ZSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50
aWZpZXIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2
bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30K
Kwordm9pZCByZXBhdGNoSW5zdGFuY2VPZigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHBy
b3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgYm9vbCB3YXNG
b3VuZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CisgICAgaWYgKHRyeUNhY2hlSW5zdGFuY2VPZihnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgdmFs
dWVWYWx1ZSwgcHJvdG90eXBlVmFsdWUsIHN0dWJJbmZvLCB3YXNGb3VuZCkgPT0gR2l2ZVVwT25D
YWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7Cit9CisKK3ZvaWQgbGlua0RpcmVjdENhbGwoCisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2Rl
QmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwor
ICAgIAorICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKKworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBB
U1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0Q29k
ZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNh
bGxlZUNvZGVCbG9jaykpOworICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVy
Q29kZUJsb2NrKSkKKyAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2Rl
T3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8g
IiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2Rl
UHRyLCAiXG4iKTsKKworICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKworICAgIGlmIChjYWxsZWVD
b2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxs
RnJhbWUsICZjYWxsTGlua0luZm8pOworfQorCit2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7
CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8pOworfQorCitzdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
K3sKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
OworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9j
aygpOworCisgICAgZGF0YUxvZ0xuSWYoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNv
ZGVCbG9jayksCisgICAgICAgICJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCBGdWxsQ29kZU9y
aWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCkpKTsKKworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5r
ID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkpOworICAgIHJl
dmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBjYWxsTGlua0lu
Zm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOworfQorCituYW1lc3BhY2Ugeworc3RydWN0IENhbGxU
b0NvZGVQdHIgeworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworfTsKK30gLy8gYW5ub255bW91cyBu
YW1lc3BhY2UKKwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlu
a0luZm8uYWxsb3dTdHVicygpKTsKKworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
CisgICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBsaW5rUG9seW1vcnBoaWNDYWxsLCB3ZSBzdHJv
bmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBHQy4KKyAgICAvLyBHQyBqZXR0aXNvbnMgQ29k
ZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8gZXRjLiBhbmQgYnJlYWtzIGFzc3VtcHRpb24g
ZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2FsbC4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRl
ZmVyR0NGb3JBV2hpbGUodm0pOworICAgIAorICAgIGlmICghbmV3VmFyaWFudCkgeworICAgICAg
ICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZv
ciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCisgICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3Vy
ZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgp
LmlzQ2VsbCgpKTsKKworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJh
bWUtPmNvZGVCbG9jaygpOworICAgIGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlN
b2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKTsKKworICAgIC8vIFdlYkFzc2Vt
Ymx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxs
KiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5j
YWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgQVNTRVJUKG93bmVyKTsK
KworICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OworICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgIGxpc3QgPSBzdHVi
LT52YXJpYW50cygpOworICAgIGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlu
a0luZm8uY2FsbGVlKCkpCisgICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3QgeyBDYWxsVmFy
aWFudChvbGRDYWxsZWUpIH07CisgICAgCisgICAgbGlzdCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlh
bnQobGlzdCwgbmV3VmFyaWFudCk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNsb3N1cmUg
Y2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCBhbGwgb2YgdGhlbSBhcyBjbG9zdXJl
IGNhbGxzLgorICAgIC8vIFRoaXMgbWFrZXMgc3dpdGNoaW5nIG9uIGNhbGxlZSBjaGVhcGVyLiBJ
dCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0J3MgZWFzaWVyIG9uIHRoZSBERkc7CisgICAg
Ly8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50IHRvIGRlYWwgd2l0aCBhIGNvbWJpbmF0aW9u
IG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNhbGxlZXMuCisgICAgYm9vbCBpc0Nsb3N1cmVD
YWxsID0gZmFsc2U7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgIHsKKyAg
ICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7CisgICAgICAgICAgICBsaXN0ID0g
ZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsKKyAgICAgICAgICAgIGlzQ2xvc3VyZUNhbGwg
PSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
aWYgKGlzQ2xvc3VyZUNhbGwpCisgICAgICAgIGNhbGxMaW5rSW5mby5zZXRIYXNTZWVuQ2xvc3Vy
ZSgpOworICAgIAorICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7Cisg
ICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7CisgICAgCisgICAgLy8gRmlndXJlIG91dCB3
aGF0IG91ciBjYXNlcyBhcmUuCisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkg
eworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmICh2
YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFudC5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0
aW9uKCkpIHsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdmFyaWFu
dC5leGVjdXRhYmxlKCk7CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgICAg
IC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGVpdGhlciBiZWNhdXNlIHdlIGRvbid0
IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBhcml0eSBtaXNtYXRjaCwKKyAgICAgICAgICAg
IC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEg
dmlydHVhbCBjYWxsLgorICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2sgfHwgY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmlzVmFyYXJncygpKSB7CisgICAg
ICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7CisgICAgICAgIGlmIChpc0Nsb3N1cmVDYWxs
KSB7CisgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
cmlhbnQuZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQg
YSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCisgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MzEx
CisgICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbiA9IHZh
cmlhbnQuZnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuaW50ZXJu
YWxGdW5jdGlvbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkg
eworICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMuY29udGFpbnMobmV3Q2FzZVZhbHVlKSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9SOiBBdHRlbXB0IHRvIGFkZCBkdXBsaWNhdGUg
Y2FzZSB2YWx1ZS5cbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4aXN0aW5nIGNhc2Ug
dmFsdWVzOiAiKTsKKyAgICAgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhc2VWYWx1ZXMpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8gYWRkOiAiLCBuZXdDYXNl
VmFsdWUsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhbnQgbGlzdDogIiwg
bGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNh
bGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50LCBjb2RlQmxvY2spKTsK
KyAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3Q2FzZVZhbHVlKTsKKyAgICB9CisgICAgQVNT
RVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZhbHVlcy5zaXplKCkpOworCisgICAgLy8gSWYg
d2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVzZSBhIG5vcm1hbCB2aXJ0dWFsIGNhbGwuCisg
ICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplOworICAgIGlmIChp
c1dlYkFzc2VtYmx5KQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUg
PSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JXZWJBc3NlbWJs
eVRvSlMoKTsKKyAgICBlbHNlIGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0
U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZvclRvcFRp
ZXIoKTsKKyAgICBlbHNlCisgICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6
ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSgpOworCisgICAg
Ly8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQgb2YgY2FsbENhc2VzLnNpemUoKSBiZWNhdXNl
IHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBmb3Igbm93LgorICAgIGlmIChsaXN0LnNpemUo
KSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSkgeworICAgICAgICBsaW5rVmly
dHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+IGNhbGxzKGNhbGxDYXNlcy5zaXplKCkp
OworICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBmYXN0Q291bnRzOworCisgICAgaWYgKCFpc1dl
YkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OnRvcFRp
ZXJKSVQoKSkgeworICAgICAgICBmYXN0Q291bnRzID0gbWFrZVVuaXF1ZUFycmF5PHVpbnQzMl90
PihjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgbWVtc2V0KGZhc3RDb3VudHMuZ2V0KCksIDAs
IGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICB9CisgICAgCisgICAg
R1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKTsKKworICAgIGJvb2wg
aXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRhSUMoKTsKKyAgICBDQ2FsbEhlbHBlcnMgc3R1
YkppdChjYWxsZXJDb2RlQmxvY2spOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNo
dWZmbGVyPiBmcmFtZVNodWZmbGVyOworICAgIGlmIChjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxl
RGF0YSgpKSB7CisgICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKTsKKyAg
ICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZXI+KHN0dWJK
aXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBj
YWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCisgICAgICAgIC8vIHVzZSB0aGUgYWRkaXRpb25h
bCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPmFzc3VtZUNh
bGxlZUlzQ2VsbCgpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPmxvY2tHUFIoY2Fs
bGVlR1BSKTsKKyAgICB9CisKKyAgICBHUFJSZWcgY29tcGFyaXNvblZhbHVlR1BSOworICAgIGlm
IChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICAg
ICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBBc3NlbWJseUhlbHBl
cnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29t
cGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOworCisgICAgR1BSUmVnIGZhc3RDb3VudHNCYXNl
R1BSOworICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9
IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZmFzdENv
dW50c0Jhc2VHUFIgPQorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7CisgICAg
fQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50
cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKKworICAgIGlmICghZnJhbWVTaHVmZmxlciAm
JiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIC8vIFdlIHN0cm9uZ2x5IGFz
c3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBjYWxsZWUgc2F2ZSByZWdpc3RlciBpbiB0aGUg
c2xvdyBwYXRoLgorICAgICAgICBBU1NFUlQoIWNhbGxlckNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOworICAgICAgICBzdHViSml0LmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOworICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdl
IGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4K
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwo
KSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChj
YWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSKSk7
CisjZWxzZQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRo
ZSBjYWxsZWUgaXMgYSBjZWxsLgorI2VuZGlmCisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBh
ZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCisg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVl
R1BSKSk7CisKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
YWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIGNv
bXBhcmlzb25WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IHN0dWJKaXQu
YnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNvbXBhcmlzb25WYWx1ZUdQUiwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb21wYXJpc29uVmFsdWVH
UFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBoYXNFeGVjdXRhYmxl
LmxpbmsoJnN0dWJKaXQpOworICAgIH0KKworICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2go
Y29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgIHdoaWxlIChiaW5hcnlTd2l0Y2gu
YWR2YW5jZShzdHViSml0KSkgeworICAgICAgICBzaXplX3QgY2FzZUluZGV4ID0gYmluYXJ5U3dp
dGNoLmNhc2VJbmRleCgpOworICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9
IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworICAgICAgICBpZiAodmFy
aWFudC5leGVjdXRhYmxlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFi
bGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNv
ZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwgY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9u
S2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOworICAgICAgICAgICAgaWYgKCFjb2RlUHRyKQor
ICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmludGVybmFsRnVu
Y3Rpb24oKSk7CisgICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlv
blRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoZmFzdENvdW50cykgeworICAgICAgICAgICAgc3R1YkppdC5hZGQzMigKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNhc2VJbmRleCAqIHNpemVv
Zih1aW50MzJfdCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbmVlZHNEb25lSnVtcCA9
IGZhbHNlOworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikgeworICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+c25hcHNob3QoKSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0
Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxD
YWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwor
ICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwo
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0RhdGFJQykKKyAgICAgICAg
ICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxs
ID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIG5lZWRzRG9uZUp1bXAgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0u
Y29kZVB0ciA9IGNvZGVQdHI7CisgICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKSB7CisgICAgICAg
ICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQu
anVtcCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZzdHVi
Sml0KTsKKyAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKKwor
ICAgIGlmIChmcmFtZVNodWZmbGVyKSB7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VH
UFIoY2FsbGVlR1BSKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJp
c29uVmFsdWVHUFIpOworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3Vu
dHNCYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBmcmFtZVNodWZmbGVy
LT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApKTsKKyNlbHNlCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFs
dWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CisjZW5kaWYKKyAgICAgICAgZnJh
bWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgfQorICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BS
SW5mbzo6cmVnVDMpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIDEuIElmIGl0IGlz
IG5vdCBEYXRhSUMsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlv
bi4KKyAgICAvLyAyLiBJZiBpdCBpcyB0YWlsLWNhbGwsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9p
bnRpbmcgdGhlIGRvbmVMb2NhdGlvbiBmb3Igc2xvdy1jYWxsIGNhc2UuCisgICAgLy8gVGh1cyB3
ZSBuZWVkIHRvIHB1dCBpdCBmb3IgdGhlIHNsb3ctcGF0aCBjYWxsLgorICAgIGlmICghaXNEYXRh
SUMpIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
YWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwg
R1BSSW5mbzo6cmVnVDQpOworICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
aXNEYXRhSUMpOworICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAg
ICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bS5nZXRD
VElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5jb2RlKCkudW50YWdnZWRF
eGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICAgICAgc3R1Ykpp
dC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQu
anVtcCgpOworICAgICAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93
bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKKyAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAg
ICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkg
PT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6
IGNhbGxzKSB7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgICAgIC8vIFRhaWwgY2FsbCBzcGVj
aWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEg
dGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJlc3MKKyAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNv
cmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGgg
YSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KKyAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRv
Q29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOworICAgICAg
ICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFM
b2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxK
U0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQpKSk7CisjZWxzZQorICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4o
Y2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIWRvbmUu
ZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOworICAgIH0KKyAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2
bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CisgICAgCisgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICAgICAg
Y2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAg
ICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0
YXJnZXRzICVzIiwKKyAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5
IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25l
TG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAorICAgICAgICB2bSwgb3duZXIsIGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCisgICAgICAgIFdU
Rk1vdmUoZmFzdENvdW50cykpKTsKKworICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMg
dW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxsCisgICAgLy8gcmVhY2hhYmxlIG9uIDMy
LWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKKyAgICAvLyB0cmlnZ2Vy
IHRoZSBzbG93IHBhdGgKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKworICAg
IC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3
aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCisgICAgLy8gdGhhdCBpdCdz
IG5vIGxvbmdlciBvbiBzdGFjay4KKyAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0
dWJSb3V0aW5lKSk7CisgICAgCisgICAgLy8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBo
YXMgYSBjYWxsIGNhY2hlIGFwYXJ0IGZyb20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNh
bGwKKyAgICAvLyBzdHViLgorICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAg
ICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQp
Cit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhU
aGlzOgorICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgIGNhc2UgR2V0QnlLaW5kOjpC
eUlkRGlyZWN0OgorICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
byk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKKyAgICBjYXNl
IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCit7
CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICB1
c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSBy
ZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxv
Y2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZp
bmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKKyAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5
cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5jdGlvblR5
cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihy
ZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVBy
aXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0
UHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24p
OworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lk
IHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgRGVsQnlLaW5kIGtpbmQpCit7CisgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlk
KQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CisgICAgZWxzZQorICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUp
OworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKK30KKwordm9pZCByZXNldEluQnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2lu
ZCkKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihraW5kKSk7CisgICAgaWYgKGtpbmQgPT0gSW5C
eUtpbmQ6OkJ5SWQpCisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgZWxzZQorICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbnN0YW5j
ZU9mKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUpOworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKK30KKwordm9p
ZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKKyNlbmRpZgor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkzYTAzNjUzMjZhYmZiZWRlZTA1NzU4OWM0NTQwOWIyZWIzNjU4OTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCitlbnVtIGNs
YXNzIEdldEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKKyAgICBUcnlCeUlkLAorICAg
IEJ5SWRXaXRoVGhpcywKKyAgICBCeUlkRGlyZWN0LAorICAgIFByaXZhdGVOYW1lLAorICAgIFBy
aXZhdGVOYW1lQnlJZCwKK307CisKK2VudW0gY2xhc3MgUHV0QnlLaW5kIHsKKyAgICBCeUlkLAor
ICAgIEJ5VmFsLAorfTsKKworZW51bSBjbGFzcyBEZWxCeUtpbmQgeworICAgIEJ5SWQsCisgICAg
QnlWYWwKK307CisKK2VudW0gY2xhc3MgSW5CeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWws
CisgICAgUHJpdmF0ZU5hbWUKK307CisKK3ZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVj
dHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlW
YWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5k
ZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNo
UHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2Jh
bE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVj
dHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5k
LCBFQ01BTW9kZSk7Cit2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQgcmVwYXRj
aEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0Kiwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7
Cit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsK
K3ZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayos
IEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1
YkluZm8mKTsKK3ZvaWQgcmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8m
LCBib29sIHdhc0ZvdW5kKTsKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxG
cmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYpOwordm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7Cit2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBD
YWxsVmFyaWFudCk7Cit2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBHZXRCeUtpbmQpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJiwgUHV0QnlLaW5kKTsKK3ZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7Cit2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJh
bmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZnRsVGh1bmtBd2FyZVJl
cGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4s
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOworTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqIGNhbGxlZSk7CisKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5l
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJlZmU3YjFiMzM3NjRiZGY0MmIyZTRmMDJkNGRmMGNkOWU4MWM0OWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aElubGluZXMuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVwYXRjaC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0
Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1l
LCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CisK
KyAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2Fs
bCkgeworICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIGNhbGxlZSk7Cisg
ICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7CisKKyAg
ICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2ZSkgeworICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOwor
ICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAg
ICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZl
LmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1l
KTsKKyAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgICAgICAg
ICAgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNhbGxEYXRh
LnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3Qs
IGNhbGxlZSkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgdm0u
Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktp
bmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKworICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdl
dENvbnN0cnVjdERhdGEodm0sIGNhbGxlZSk7CisgICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlw
ZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9
PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxl
ZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9i
YWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dH
QzsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxs
UmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgIH0KKworICAgIEFTU0VSVChj
b25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGds
b2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAg
dm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVl
RnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktp
bmQoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwor
CisgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNEaXJlY3QoKSk7CisKKyAgICBK
U1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxs
ZWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihj
YWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CisgICAgICAg
IGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0
aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25U
cmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRy
KTsKKworICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCisgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlu
a0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOworCisgICAgICAgICAg
ICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1
c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxl
ZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1
bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxs
KTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5j
dGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwg
Y2FsbGVlKTsKKyAgICAgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgY29kZVB0ciA9IGV4
ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisKKyAgICAgICAgYXV0
byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7CisgICAgICAgICAgICB2b2lkKiB0aHJv
d1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0
aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAg
ICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxl
LT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0
KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAg
ICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29k
ZUJsb2NrKCk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlv
bjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJsb2Nr
U2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhy
b3dFeGNlcHRpb24oKSk7CisKKyAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Nsb3Q7Cisg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworCisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5
OworICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxs
TGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0
eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWly
ZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
a2luZCwgYXJpdHkpOworICAgIH0KKworICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgp
KQorICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGxp
bmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxv
Y2ssIGNhbGxlZSwgY29kZVB0cik7CisKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZv
LT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVG
cmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpT
VmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxl
ZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1Zh
bHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgeworICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUp
KSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29k
ZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAg
ICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBj
YWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAg
IEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChV
TkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKKyAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKworICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhj
ZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0
Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxp
dHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0
cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOworICAgICAgICAgICAgcmV0dXJu
IGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sq
KiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAg
ICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVj
dXRhYmxlPih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24o
KSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQorICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigKKyAgICAgICAga2luZCwgTXVzdENo
ZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNl
VGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAppbmRleCAwZDE5ZTI3OTA1NmU1ZjM3ZTc3MWM1YzQ5YTJkYjBlNmMyZDg0OGQ3Li5hYzU3MTI3
YmNmODkwNzJiZTAzODQxNmRhMTM5YjQxZjE2NGFlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTQwMyw3ICs0
MDMsNiBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVu
c2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMsCiAKICNkZWZpbmUgQ09VTlQoX19vcCkgbnVt
YmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKICAg
ICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDT1VOVCkKLSAgICAgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ09VTlQpCiAjdW5kZWYg
Q09VTlQKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVu
dHJpZXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyAr
PSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wR2V0QnlJZD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggNDAzOTRhOTQz
OTkyOTkzZjU0NWEyYWM2MmNmNmVkYzA5ZGY1NTVmYS4uMWM1OTA0MmUwZDBjMzgxMWIzYzliZTIx
NThjZGM1NGMwMWRiYjgxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgQ2FjaGVkQ29k
ZUJsb2NrOwogCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5
cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKIAogc3RydWN0IFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDVjNzIwNThk
Y2YyMTk2MGRjZjg1M2UwYTkyYzI3ZTg5YTJkNTZiZWUuLjVlMzJkMmQyNGYxYjNlZDg3MGMzMzBm
MmVmMjNkODVlNGVjZTQ4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAKQEAgLTMxNSw2ICszMTUsMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFi
aWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IEkKICAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNl
IGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
bGlua19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRf
Z2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6CiAgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVn
aHRfZXhjZXB0aW9uOgogICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRf
Y2FsbF90cmFtcG9saW5lOgpAQCAtMzI1LDYgKzMyOSw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBh
YmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNl
IG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1
cm5fbG9jYXRpb246CkBAIC0zMzUsNyArMzQxLDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxp
dHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkK
ICAgICBjYXNlIG9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9w
X2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgotICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVy
bl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoK
ICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2Nh
dGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgpAQCAtMzQzLDggKzM0OCw5IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSB3
YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgogICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9u
b190bHM6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6Ci0gICAgY2FzZSBqc190cmFt
cG9saW5lX29wX3RhaWxfY2FsbDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9pdGVyYXRvcl9uZXh0OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVu
OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXgg
YjQ1MWNkYjYxZjdhMTFiMzMwMmMxODVjNjZiZmYxN2E5ZmRiZTA5Zi4uZTcyMmY5ZWJkYWNjODkz
NjkwNjU2ZDViNjNlOWY2MjQ0NDYxNWY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMTY2LDEwICsxNjYs
MTAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJS
ZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICBq
dW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KTsK
KyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92
YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFt
ZTo6Q29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2Fs
bDogewogICAgICAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX2dl
dF9ieV9pZCkKQEAgLTIwMSwxMCArMjAxLDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAg
ICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgSW5s
aW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6
OkNvbnN0cnVjdFZhcmFyZ3M6IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0KLSAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2Fs
bExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxwdHI7CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8gPSBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChs
b2NrZXIsIGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7Ci0KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBj
YWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOTU2ZDY5NDBlN2QyMGI4
MjAyZjI1NTNlYzVmZTcwYjdlOGU5ZTYwYS4uZTYxZjg5NGJlMTA4Y2NiZmExMmRiMjA4OTI5ZWNk
ZTJjM2RmMGYyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC04NDcsMTAgKzg0NywxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7Cisg
ICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgc2NvcGVk
TGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1f
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQ
YXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KEludmFsaWRHUFJSZWcpOwpAQCAtODkyLDcgKzg5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0geworICAgICAgICBz
bG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9h
ZEdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2pp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAg
ICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Cisg
ICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZh
c3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAwZmU3YTc5MDkxNWE3MjRmNGUxZmZiZDk2YmEx
NGU3YTg1Y2I4Yzc5Li43NzA3M2YzNGFmYmZkZjk1ZmU1ODI1YTNjODk4OWMzMjIzZGRhYTVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKQEAgLTkzOCwxMCArOTM4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2pp
dC5sYWJlbCgpOwogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxs
U2l0ZSk7CiAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsK
ICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0geworICAgICAgICBzbG93
Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVH
UFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTg5LDcgKzk4
OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAg
IG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExp
bmtJbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCmluZGV4IGUxYzgyZGY4ODM0MTQ5MTk4NGIwOTgzODFiODBkNWVhMzY3MmQ2ZWIuLjAx
OGEyZjg1OGY0MjExZDM4N2I0MmI2OTJlMjViNTE4NjFiZTRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTEwNDAzLDEwICsxMDQwMywx
MCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVt
aXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChqaXQsIHNjb3BlZExhbWJk
YTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
SklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDU1
OSwxMCArMTA1NTksMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5h
ZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0g
ICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pKTsK
IAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAg
YXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CkBAIC0xMDkwMiwxMCArMTA5MDIsMTAg
QEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2Fs
bExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29w
ZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAg
ICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwpAQCAtMTExODMsMTAgKzExMTgzLDEwIEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQ
UkluZm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVk
TGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICB9KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAg
ICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBjOGNiYmVlMDZiZjdkNjY2MmMxOWE0YTRhOGEx
OGMyMWNlZmQzZjcyLi5lNjQ1ODUzMWViYzkwNGRlNWRkMDRjZTNhYmE1M2M1YmQzYzcwYjBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC03
NDUsMTggKzc0NSwxOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUAogdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3Qodm0sIEdQUkluZm86OnJlZ1QyLCBpbmZvLT5jYWxsTW9kZSgpKTsKIH0KIAotdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qo
Vk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIENhbGxNb2RlIGNhbGxNb2RlKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihp
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhb
PSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFn
PihjYWxsKTsKICAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFz
ayhbPSwgJnZtXSAoKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgKmluZm8p
OwotICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpj
cmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFs
Q2FsbChjYWxsTW9kZSk7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCA2NWRkOGVkZWY3NDc5OTZk
NWY2ZDhmMTkyNDZlNmFkOTMzNmQ0NzM4Li5hNDRhYTVjZjk1NGYyYzE2NTQ3OWVjMmRjZDkyM2Q1
ZmY0ZjNkMWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTE3NTIsNyArMTc1Miw3IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBN
YWNyb0Fzc2VtYmxlciB7CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKLSAgICB2b2lkIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKKyAgICB2
b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZSk7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0
YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKaW5kZXggMTU4OTYw
M2YxNDljMjc2YzM1OWU3YmIyNmQ2NGY0ZDg1NzI3ZjE1MC4uMzAwM2IwNzM1MDE4OGU1ZjczZmNj
OTY3MjBkNmE5ZTc0MWY4YmNiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9CYXNlbGluZUpJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2Vs
aW5lSklUQ29kZS5oCkBAIC02Miw3ICs2Miw2IEBAIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CiAK
ICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgR2xvYmFsT2JqZWN0LAot
ICAgICAgICBDYWxsTGlua0luZm8sCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAogICAgICAg
ICBGdW5jdGlvbkRlY2wsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwKQEAgLTkzLDcgKzkyLDYgQEAg
Y2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRo
SUNIb2xkZXIgewogICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKICAgICBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9D
b2RlT3JpZ2luTWFwLmdldCgpOyB9CiAKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxs
TGlua0luZm9zOwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlu
a2VkQ2FsbHM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91
bmxpbmtlZFN0dWJJbmZvczsKICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dp
dGNoSnVtcFRhYmxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA5Mjk0MjQ2MDcz
NDAwOTExYjZjMzU3Yzc4YTRhMGM2YTc0ZTlhYWQ0Li4yOGFlNmY3NzBkZGFjZDcxYzZmMTgyYzlk
MTc5ZmQxY2NlYjhkZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMDEsMTIg
KzEwMSw5IEBAIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rCiAgICAgcmV0dXJuIHN0ZDo6dHVwbGUg
eyBzdHViSW5mbywgc3R1YkluZm9JbmRleCB9OwogfQogCi1zdGQ6OnR1cGxlPFVubGlua2VkQ2Fs
bExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxpbmtlZENh
bGxMaW5rSW5mbygpCitVbmxpbmtlZENhbGxMaW5rSW5mbyogSklUOjphZGRVbmxpbmtlZENhbGxM
aW5rSW5mbygpCiB7Ci0gICAgdm9pZCogdW5saW5rZWRDYWxsTGlua0luZm9JbmRleCA9IGJpdHdp
c2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihtX3VubGlua2VkQ2FsbHMuc2l6
ZSgpKSk7Ci0gICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSAmbV91bmxpbmtlZENhbGxz
LmFsbG9jKCk7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9JbmRl
eCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZv
LCB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4KTsKLSAgICByZXR1cm4gc3RkOjp0dXBsZSB7IGlu
Zm8sIGNhbGxMaW5rSW5mb0luZGV4IH07CisgICAgcmV0dXJuICZtX3VubGlua2VkQ2FsbHMuYWxs
b2MoKTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTAxMCw3ICsxMDA3LDYgQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gRml4ZWRWZWN0
b3I8VW5saW5rZWRDYWxsTGlua0luZm8+KG1fdW5saW5rZWRDYWxscy5zaXplKCkpOwogICAgIGlm
IChtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpCiAgICAgICAgIHN0ZDo6bW92ZSht
X3VubGlua2VkQ2FsbHMuYmVnaW4oKSwgbV91bmxpbmtlZENhbGxzLmVuZCgpLCBtX2ppdENvZGUt
Pm1fdW5saW5rZWRDYWxscy5iZWdpbigpKTsKLSAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5r
SW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogICAgIG1faml0Q29kZS0+bV91
bmxpbmtlZFN0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+
KG1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKICAgICBpZiAobV9qaXRDb2RlLT5tX3VubGlu
a2VkU3R1YkluZm9zLnNpemUoKSkKICAgICAgICAgc3RkOjptb3ZlKG1fdW5saW5rZWRTdHViSW5m
b3MuYmVnaW4oKSwgbV91bmxpbmtlZFN0dWJJbmZvcy5lbmQoKSwgbV9qaXRDb2RlLT5tX3VubGlu
a2VkU3R1YkluZm9zLmJlZ2luKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggZGUyYzVj
ZTc3MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlhMS4uNjdiNDNkOGZhMzBiNzJjYmQ0OTQ0
NjIyOGM2NDI5NjRmM2QzMzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0xNTMsNyAr
MTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8g
ewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBV
bmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87Ci0gICAgICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAg
IHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMjk0LDE2ICsy
OTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAg
ICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAg
ICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAgICAsIHZvaWQ+
IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRD
YWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5s
aW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzA2LDYgKzcw
NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAg
IHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihW
TSYpOworCisgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAg
ICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogCiAg
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3Bl
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQpAQCAtOTU4LDcgKzk2MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgYWRkVG9Db25zdGFudFBv
b2woSklUQ29uc3RhbnRQb29sOjpUeXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cik7CiAgICAg
ICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKLSAgICAgICAgc3Rk
Ojp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+
IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZv
KiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2lu
dGVycHJldGVyOwogCkBAIC0xMDI5LDcgKzEwMzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBWZWN0b3I8SklUQ29uc3RhbnRQb29sOjpWYWx1ZT4gbV9jb25zdGFudFBvb2w7CiAgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAgICAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VW5s
aW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CiAgICAg
ICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZlMTAyYjVk
ZmJmYTJiZTRmZTE3MzE5N2UyYi4uODE1MWZmZGU2YTlmMmViMGMzMjQ3NWQ1YmZkZGFhZWRhMTAw
MDM4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01OSwxNyArNTks
MjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIgKHJl
dHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwotCi0jaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0g
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7
Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1
YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgorICAgIGVtaXROYWtl
ZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNv
ZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpy
ZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7
CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwor
ICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBv
cF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC04NCw3ICs4OCw3IEBAIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0g
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdU
aGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQp
OwpAQCAtOTcsNyArMTAxLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1IpOwogICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3ModG1wSlNS
LnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdG1wR1BSKTsKLSAg
ICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0K
IApAQCAtMTEwLDcgKzExNCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlE
ID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwpAQCAtMTYwLDcgKzE2NCw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsK
LSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZDYWxsTGlua0luZm8oKSwgcmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxs
TGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1Qz
KTsKICAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsK
ICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwpAQCAtMjAzLDY0ICsyMDcsNTkgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
cmVnVDApOwotCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKIAog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWRWYWx1ZShBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSwgY2FsbGVlSlNSKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBp
bmZvKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BDYWxsRXZhbDo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgY2FsbExpbmtJbmZv
R1BSLCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklU
Ojpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2ln
bmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNv
bnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENh
bGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1
ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOwotICAgIHNodWZm
bGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRh
LT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcFRhaWxDYWxsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBKdW1wTGlzdCBz
bG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2
b2lkKCk+KFsmXXsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGEgeyB9
OworICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwor
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPm51
bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgICAgIHNo
dWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7
CiAjZW5kaWYKLSAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KLSAgICAgICAgYnl0ZWNvZGUu
bV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAg
ICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZs
ZURhdGEtPmFyZ3NbaV0gPQotICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5K
U1N0YWNrKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVk
aW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKLSAgICAgICAgICAgICAgICBEYXRhRm9ybWF0
SlMpOwotICAgIH0KKyAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICAgICAgICAg
IGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdp
c3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkg
eworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3Ys
CisgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0KICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBzaHVmZmxl
RGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigp
LCBEYXRhRm9ybWF0SlMpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzaHVmZmxlRGF0
YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwgY2Fs
bGVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVl
UmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BS
KCkpOwogI2VuZGlmCi0gICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwotCi0gICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKLSAgICBs
b2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAg
SnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0
UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0g
ewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURh
dGEgfTsKKyAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cisg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsIHNodWZmbGVEYXRhIH07
CiAgICAgICAgIHNodWZmbGVyLmxvY2tHUFIoY2FsbExpbmtJbmZvR1BSKTsKICAgICAgICAgc2h1
ZmZsZXIucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgfSk7CisgICAgfSkpOwogICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRocyk7CiAKLSAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKLSAg
ICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7Ci0KICAgICBh
dXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0y
ODgsMTcgKzI4NywxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgICovCiAKICAgICBV
bmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKICAgICBpZiAob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIHN0ZDo6dGllKGluZm8sIGluZm9Db25zdGFudCkgPSBh
ZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOworICAgICAgICBpbmZvID0gYWRkVW5saW5rZWRDYWxs
TGlua0luZm8oKTsKICAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKLSAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKTsKICAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0g
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5k
KENhbGxDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOwotICAgICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0
YW50ID0gaW5mb0NvbnN0YW50OwogICAgIH0KLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29k
ZSwgaW5mb0NvbnN0YW50KTsKKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSk7CiAKICAg
ICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdp
dGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwpAQCAtMzE2LDE2ICszMTIs
MTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoY2FsbGVlSlNSKSk7CiAjZW5kaWYKIAotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0
ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQorICAgIGlmIChj
b21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdU
MjsKLSAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigp
LCBjYWxsTGlua0luZm9HUFIsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxv
YWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAg
ICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9y
VGFpbENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7
CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgICAgIGF1dG8gZG9uZUxvY2F0
aW9uID0gbGFiZWwoKTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CkBAIC0zNDQsMTUgKzM0MCwxNiBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCB1bnNpZ25lZCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIEFTU0VSVChv
cGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGxvYWRDb25zdGFudChtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCBy
ZWdUMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QyKTsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjYsNyArMzYzLDYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUUKIAogICAgIHJlc2V0U1AoKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0NTg3ODAz
YzI2MThjNjgwMzk4MzZjZWU2YzdiMzRmZDJjMzA0Li4yZmUyM2M0OWZkMGY5NDA5MWY2ODYwNWI3
NTdhZTJjZTMyMjAxNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKQEAgLTM3MCwyMSArMzcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOwotfQotI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmlt
aXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMGUyZDdkMDhj
ZmI3NWYzMjcxZDA2MmIwOTZhYmIwYzM1YzdmMWE4NS4uNmJjZTc0YWI4MmM1NTdkMDA4NTE1MDc4
NTFhMDRlNGUxNDYzMGMwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCkBAIC02MCw3ICs2MCw3IEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIK
LSNpbmNsdWRlICJSZXBhdGNoLmgiCisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIKICNpbmNs
dWRlICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNp
bmNsdWRlICJTdXBlclNhbXBsZXIuaCIKQEAgLTE0NDYsMTg2ICsxNDQ2LDkgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiBnbG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
LXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBj
YWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOwotCi0gICAgaWYgKGNhbGxMaW5rSW5m
by0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgYXV0byBj
YWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOwotICAgICAgICBBU1NFUlQoY2FsbERh
dGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOwotCi0gICAgICAgIGlmIChjYWxsRGF0YS50
eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxlZUZy
YW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS5lbmNvZGVk
SG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChj
YWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBEaXNh
bGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAg
ICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAotICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2lu
dCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFp
bCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgIAotICAg
ICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAg
ICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlv
bkVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoCi0gICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwotICAgIH0KLQotICAgIEFTU0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpOwotCi0gICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0
Q29uc3RydWN0RGF0YSh2bSwgY2FsbGVlKTsKLSAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBl
ICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7Ci0KLSAgICBpZiAoY29uc3RydWN0RGF0YS50eXBlID09
IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOwotICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVl
KGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1
ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2Jh
bE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dD
OwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRy
eVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQo
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2Vl
cFRoZUZyYW1lKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSA9PSBD
YWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsK
LSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJU
YWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7Ci19Ci0KIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8p
KQogewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1l
KCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOwotICAgIAotICAgIEpTVmFsdWUgY2Fs
bGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOwotICAg
IEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFs
dWUpOwotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAgICAgICAgaWYgKGF1dG8q
IGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwg
Y2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3Ioa2luZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOwotCi0gICAg
ICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVs
bHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7Ci0KLSAgICAgICAgICAgIHZvaWQqIGxp
bmtlZFRhcmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNh
bGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLQotICAgIEpTRnVuY3Rpb24qIGNh
bGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpT
U2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwotICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7Ci0KLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsK
LSAgICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBraW5kLCBjYWxsZWUpOwot
ICAgICAgICBpZiAoIWNvZGVQdHIpCi0gICAgICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRsZVRo
cm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0g
dm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2FsbChr
aW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1
Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xv
YmFsT2JqZWN0LCBjYWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2Vw
dGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9
IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgZnVuY3Rpb25FeGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxl
ZSwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKLQotICAgICAgICBjb2Rl
QmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAg
ICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7Ci0gICAgICAgIGlmIChjYWxsZWVGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
cml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7Ci0gICAgfQotCi0gICAgaWYg
KCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2Vl
bigpOwotICAgIGVsc2UKLSAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJh
bWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLQotICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwg
PyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci19Ci0KLWlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywg
SlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNp
YWxpemF0aW9uS2luZCgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3Vh
cmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpT
RnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCkpIHsKLSAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+
KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZUZvcihraW5kKTsKLSAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6
VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7Ci0gICAgfQot
ICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGVV
bmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5l
eGVjdXRhYmxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9y
KGtpbmQpKSkgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotCi0gICAg
ICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9p
ZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9OwotCi0gICAg
ICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJp
bGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgewotICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29u
c3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uKSk7Ci0gICAgICAgICAgICByZXR1
cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvZGVCbG9j
ayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0g
ICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4
ZWN1dGFibGU+KHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlv
bigpKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KLSAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5Ci0gICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0
Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1
c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZy
YW1lLCBnbG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsLCBTbG93UGF0aFJldHVyblR5cGUs
IChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZDUxY2RhNGUyYTIxYTkyMTc5
YjUxNWY5ODRhZjJjNjhkNmRmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjAyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlcGF0
Y2guaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKLSNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiRE9N
SklUR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVk
ZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRlRMVGh1bmtzLmgiCi0jaW5j
bHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgot
I2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0
YXRzLmgiCi0jaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCi0jaW5jbHVkZSAiSW5zdGFuY2VPZkFj
Y2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5j
bHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklUSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHkuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIK
LSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50
cy5oIgotI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2luY2x1ZGUgIlN0
YWNrQWxpZ25tZW50LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCi0jaW5jbHVkZSAi
VGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgotI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0
YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnT3BlcmF0aW9uV2l0aFZhbGlk
YXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVyYXRpb24pCi17Ci0gICAgSlND
X1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJREFUSU9OKG9wZXJhdGlvbik7Ci19
Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdldFdp
dGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkKLXsK
LSAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihjYWxs
KTsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2Fs
bFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZXR1cm4gcmV0
YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24pOwotICAg
IENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCA9IHN0dWJJbmZvLm1fc2xv
d1BhdGhDYWxsTG9jYXRpb247Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewotICAgICAgICBGdW5jdGlvblB0cjxK
SVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJ
VFRodW5rUHRyVGFnPihjYWxsKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Ci0gICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+
dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0
KCkpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCi0gICAgcmV0dXJuIHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0
aW9uKGNhbGwpOwotfQotCi12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotI2lmIEVOQUJM
RShGVExfSklUKQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExK
SVQpIHsKLSAgICAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgICAgICBGVEw6OlRo
dW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rpb25QdHI8SklUVGh1
bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVu
a1B0clRhZz4oY2FsbCk7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0
YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5
IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsKLSAg
ICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5r
UHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIGtleSkuY29kZSgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBVTlVT
RURfUEFSQU0oY29kZUJsb2NrKTsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8
T3BlcmF0aW9uUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotICAgIGlmIChj
b2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIHN0dWJJbmZvLm1fc2xvd09wZXJhdGlv
biA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19
Ci0KLWVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewotICAgIEdpdmVVcE9uQ2FjaGUsCi0gICAgUmV0
cnlDYWNoZUxhdGVyLAotICAgIEF0dGVtcHRUb0NhY2hlCi19OwotCi1zdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICBUeXBlSW5mbyB0
eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLSAgICBpZiAodHlwZUluZm8ucHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0g
ICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBp
ZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCi0gICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgLy8gRmxhdHRlbmluZyBjb3VsZCBoYXZlIGNoYW5n
ZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZvciBhbm90aGVyIHRyeS4KLSAgICAgICAg
YXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKLSAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFzdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0KLSAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Ci19Ci0KLXN0YXRpYyBib29sIGZvcmNl
SUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6Zm9yY2VJ
Q0ZhaWx1cmUoKTsKLX0KLQotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQmIHJlc3VsdCkK
LXsKLSAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50cygpKSB7
Ci0gICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHModm0pOwotCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ss
IHZtKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KGxvY2tlciwgY29kZUJsb2NrKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkKLXsKLSAg
ICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdp
dGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7
Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsK
LSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFt
ZUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWRPcHRpbWl6
ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotaW5saW5l
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdl
dEJ5S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0QnlLaW5k
OjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5
S2luZDo6QnlJZFdpdGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzOwotICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uVHJ5R2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFs
OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljOwotICAgIGNhc2UgR2V0
QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIHJldHVy
biBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdl
dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtp
bmQga2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7
Ci0KLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBDYWNo
ZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgICAgIGlmICghYmFzZVZhbHVl
LmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGNvbnN0IGJvb2wg
aXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lIHx8IGtpbmQgPT0gR2V0
QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5l
d0Nhc2U7Ci0KLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAg
ICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAg
ICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKLQotICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihi
YXNlQ2VsbCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlM
ZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmco
YmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09
IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpp
c0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgewotICAgICAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXpp
bmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWND
YXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICAv
LyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFuZGxlIHRoaXMgYXMgYSBu
b3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHdp
dGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNhc2UgZm9yIHRoYXQgbG9h
ZCBpZiBuZWVkZWQuCi0gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhp
bmdzKCkpCi0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUo
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChTY29wZWRBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgewotICAg
ICAgICAgICAgICAgIC8vIERpdHRvLgotICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5v
dmVycm9kZVRoaW5ncygpKQotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0
aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNlbGwtPmluaGVyaXRzPEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5tb2R1bGVOYW1lc3BhY2VTbG90KCkp
Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNlU2xvdC0+ZW52aXJvbm1lbnQsIFNj
b3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3BlT2Zmc2V0KSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkgewotICAgICAgICAgICAgaWYgKCFzbG90
LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VD
ZWxsLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAgICAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJv
eHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3
YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgYmFz
ZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOwotICAgICAgICAg
ICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGxvYWRU
YXJnZXRGcm9tUHJveHkgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJbmxp
bmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7Ci0gICAg
ICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBhY3Rpb247Ci0KLSAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAg
ICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAgICAgICAg
ICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAgICAgICAgICAgICAgICAmJiAhc2xv
dC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZy
b21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluOwotCi0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5z
ZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgICAg
ICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsK
LSAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1c3RvbXMsIHdlIG11c3QgZGlzYWxs
b3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKLSAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJl
IGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hlIHRoZQotICAg
ICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBvaW50ZXIuCi0KLSAgICAgICAgICAg
ICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBzbG90LnNsb3RC
YXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpzQ2FzdDxKU09iamVjdCo+KGJhc2VD
ZWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7IC8vIFdl
IG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgJiYgc3RydWN0dXJlLT50eXBlSW5m
bygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERpcmVjdCBvciBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3RpZ2F0ZSBwcm90b3R5cGUgY2hhaW5zIGZ1
cnRoZXIuCi0gICAgICAgICAgICAgICAgLy8gQ2FjaGVhYmlsaXR5IGp1c3QgZGVwZW5kcyBvbiB0
aGUgaGVhZCBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gR2V0QnlLaW5k
OjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBj
YWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2Vs
bCwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMgbWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8g
ZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWlu
Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vz
c0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUudWlkKCkpID09IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAg
cHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3VsZCBiZSBpbnNpZGUgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlCbGFoLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IG9mZnNldCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0cmlidXRlcygp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0Z1bmN0aW9uKiBnZXR0ZXIg
PSBudWxscHRyOwotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAg
ICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgc2xv
dC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOwotCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZTsKLSAgICAgICAgICAgIGlmIChz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21BdHRyaWJ1dGUoKSkKLSAgICAgICAg
ICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJpYnV0ZSgpOwotCi0gICAgICAgICAg
ICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsKLSAgICAgICAgICAgICAgICBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9h
ZDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0g
QWNjZXNzQ2FzZTo6R2V0R2V0dGVyOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgdHlw
ZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFy
Z2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nl
c3NDaGFpbikpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZyb21Qcm94eSAm
JiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dl
dHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgcHJv
cGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
Z2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpMb2FkLCBwcm9wZXJ0eU5hbWUs
IG9mZnNldCwgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0
LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVl
KCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFBy
b3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmlzVW5zZXQoKSA/
IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2Fk
VGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBBY2Nlc3NDYXNlOjpHZXR0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3Qu
YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVy
OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICBuZXdD
YXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IEZ1
bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRlcigpKSA6IG51
bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkg
JiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxw
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1vdmUocHJvdG90
eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFz
ZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3Bl
cnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLQotICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nh
c2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgc3dp
dGNoIChraW5kKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAg
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5
S2luZDo6VHJ5QnlJZDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0Ogot
ICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHZXRCeUtp
bmQ6OkJ5VmFsOgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgotICAg
ICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNp
bmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9p
bnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6
IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewotICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBpZiAo
dHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICBy
ZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2V0QnlG
dW5jdGlvbihraW5kKSk7Ci19Ci0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
QXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKLSAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAg
ICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xv
YmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7Ci0KLSAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAg
ICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFyZ3VtZW50c1R5cGUpCi0gICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERpcmVjdEFyZ3VtZW50c0xvYWQ7Ci0g
ICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTY29wZWRBcmd1bWVudHNUeXBlKQotICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTY29wZWRBcmd1bWVudHNM
b2FkOwotICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU3RyaW5nVHlwZSkKLSAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDsKLSAgICAg
ICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0
b3JhZ2VUeXBlKSkgewotICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50
eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Ci0gICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50
OExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50
ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlVaW50OExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFR5cGVVaW50OENsYW1wZWQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2Fk
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6Ci0g
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
SW50MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBl
VWludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheVVpbnQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFy
cmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIGNhc2UgVHlwZUJp
Z0ludDY0OgotICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgotICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNl
LT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOwotICAgICAgICAgICAgc3dpdGNo
IChpbmRleGluZ1NoYXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMkxvYWQ7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgotICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlTG9hZDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgot
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91
c0xvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5U3Rv
cmFnZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkQXJyYXlTdG9yYWdlTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwg
bnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51
bGxwdHIpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAg
ICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
LSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBK
U1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHRy
eUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgs
IHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7Ci19Ci0KLXN0
YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5k
LCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKLSAgICBjYXNl
IFB1dEJ5S2luZDo6QnlJZDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNT
RVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRT
dHJpY3Q7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHV0QnlL
aW5kOjpCeVZhbDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljOwot
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKLSAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RHZW5lcmljOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmlj
OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAg
ICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWM7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRp
bWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2lu
ZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBzd2l0Y2ggKHB1dEJ5S2luZCkg
ewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
LSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5
VmFsOgotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9w
dGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0g
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5
S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQo
KSk7Ci0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChmb3JjZUlD
RmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5pc0NhY2hl
YWJsZVNldHRlcigpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8gc29tZXRoaW5nIHNtYXJ0ZXIgaGVyZS4u
LgotICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAvLyBXZSBjYW4n
dCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUgcHJvdG90eXBlIHNpbmNlIGl0IHNob3Vs
ZG4ndCBvd24gcHJvcGVydGllcy4KLSAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHNsb3Qu
YmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOwotCi0gICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OwotCi0gICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNlOwotICAgICAgICBpZiAoYmFzZUNlbGwt
PnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICAgICAgYmFzZUNl
bGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICBi
YXNlVmFsdWUgPSBiYXNlQ2VsbDsKLSAgICAgICAgICAgIGlzUHJveHkgPSB0cnVlOwotCi0gICAg
ICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFuZCBKUy9DdXN0b20g
U2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAotICAgICAgICAgICAgLy8gY2FjaGUgdHJhbnNp
dGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0
cnVjdHVyZQotICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCi0g
ICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0NhY2hlYWJsZVB1dCgp
ICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkKLSAg
ICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKLSAgICAgICAgICAgICAg
ICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Ci0gICAgICAgICAgICBpZiAoIWlzQ2FjaGVh
YmxlUHJveHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmUpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgUmVm
UHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJh
c2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90
LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRjaCBidWdzIGlmIHdlIGFjY2lkZW50YWxs
eSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCi0gICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSB0
cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkuIFRoaXMgaXMgY29t
bW9uIGFtb25nCi0gICAgICAgICAgICAgICAgLy8gcGF0aHMgdGhhdCByZWlmeSBsYXp5IHByb3Bl
cnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBhbmQgZm9yZ2V0Ci0gICAgICAgICAg
ICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkgY29tZSBkb3duIHRoaXMgcGF0aC4g
VGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKLSAgICAgICAgICAgICAgICAvLyBrbm93IGhvdyB0byBt
b2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKG9yIGFueSBzdHJ1Y3R1
cmUKLSAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGZvciB0aGF0IG1hdHRlcikuCi0gICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
dm0pID09IG9sZFN0cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRp
ZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2Fj
aGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hl
ZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkp
IHsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5k
LCBwdXRLaW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJ
ZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZt
LCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLCBp
c1Byb3h5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFp
c1Byb3h5KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpOZXdQcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIHN0cnVjdHVyZSBpcyBkaWN0aW9uYXJ5
LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBiZXR3ZWVuIGFuIG9iamVjdCBhbmQg
YSBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBOZXdQcm9wZXJ0eSBv
cGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9lcyBub3Qgb2ZmZXIgYW55IGJlbmVm
aXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFwcGVucyBhZ2Fpbi4KLSAgICAgICAg
ICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1
cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAo
IW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
ICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBpcyBvdmVycmlkZGVuIGJ5IFVzZXJPYmpl
Y3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVmZmVjdCBvbiBKU09iamVjdDo6cHV0
LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0UHJvcGVydHlTbG90IGFzIG5vbi1jYWNo
YWVibGUsCi0gICAgICAgICAgICAgICAgLy8gdGhlbiBhcmJpdHJhcnkgc3RydWN0dXJlIHRyYW5z
aXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQgb3BlcmF0aW9uLCBhbmQgdGhpcyBnZW5l
cmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBoZXJlIGFzIGlmIG9sZFN0cnVjdHVy
ZSAtPiBuZXdTdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSW4gcmVhbGl0eSwgdGhlIHRy
YW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0aGluZyB1bmtub3duIHN0cnVjdHVyZXMg
LT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIC8vIFRvIGd1YXJkIGFn
YWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5jb3JyZWN0IFVzZXJPYmplY3Q6OnB1
dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbiBhbmQg
aWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhlIHB1dC4KLSAgICAgICAgICAgICAg
ICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG5ld1N0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZt
KSAhPSBuZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
ID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5p
c09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSZWZQdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAg
ICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0
LCBiYXNlQ2VsbCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0
dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNz
Q2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50
LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50LmlzUHJpdmF0ZU5hbWUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBvZmZzZXQsIG9sZFN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNz
Q2hhaW4pLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgewotICAg
ICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAg
ICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotCi0g
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgd2UncmUgYSBzZWxm
IGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMKLSAgICAgICAgICAg
ICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBnb2Vz
IGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50Ci0gICAgICAgICAgICAgICAgLy8gZnVu
Y3Rpb24gcG9pbnRlci4KLSAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFy
ZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0g
YmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1Bv
bHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4g
PSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGws
IHNsb3QuYmFzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNj
ZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhp
dEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0
dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQs
IFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1c3RvbVNldHRl
cigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFnPigpLCBzbG90LmJhc2UoKSAhPSBiYXNl
VmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsKLSAgICAgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAg
ICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFp
bjsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9m
ZnNldCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9y
Q2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT5m
bGF0dGVuZWREaWN0aW9uYXJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQ
b2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWlu
ID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxs
LCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFj
Y2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFz
ZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSkpLT5nZXQodm0sIGlkZW50Lmlt
cGwoKSwgYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNz
b3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
cm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLmF0dHJpYnV0ZXMoKSAm
IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
LCBpc1Byb3h5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgIAotICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6
c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotCi0gICAgICAgICAgICBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3Vs
ZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9p
ZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRL
aW5kIHB1dEtpbmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
bywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGlu
ZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCi17Ci0gICAgaWYgKCFi
YXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
aWYgKCFpbmRleC5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0K
LSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5h
c0NlbGwoKTsKLQotICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0g
ICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5
cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKLSAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50
ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBUeXBlVWludDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDMy
OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFR5cGVVaW50MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJp
Z0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAgICAgY2Fz
ZSBUeXBlQmlnSW50NjQ6Ci0gICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3Rv
cmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBl
OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91Ymxl
U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENvbnRpZ3Vv
dXNTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQXJyYXlTdG9yYWdlU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwot
ICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6
Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKLQotICAgICAgICBp
ZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0p
LCBJZGVudGlmaWVyKCkpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1Yklu
Zm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNo
QXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17Ci0gICAgaWYg
KHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5k
ZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0S2luZDo6RGly
ZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNl
VmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQsIEVDTUFNb2Rl
IGVjbWFNb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgp
KTsKLQotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUp
OwotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpIHx8ICFvbGRTdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzUHJveHkoKSkK
LSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmICghc2xvdC5p
c0NhY2hlYWJsZURlbGV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0K
LSAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFy
eSgpKSB7Ci0gICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICAgICAganNDYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKS0+ZmxhdHRl
bkRpY3Rpb25hcnlPYmplY3Qodm0pOwotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KQotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICBSZWZQdHI8
QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLQotICAgICAgICBpZiAoc2xvdC5pc0RlbGV0ZUhpdCgpKSB7
Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBpbnZhbGlkT2Zmc2V0Owot
ICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVBy
b3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICgh
bmV3U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0g
ICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBBU1NFUlQobmV3T2Zmc2V0ID09IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlv
dXNJRCgpID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJl
LT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsK
LSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAg
ICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7Ci0gICAgICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwg
bmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoZWNtYU1vZGUu
aXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHByb3BlcnR5TmFtZSwgaW52YWxpZE9mZnNl
dCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUs
IHsgfSwgbnVsbHB0cik7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgcHJvcGVydHlOYW1l
LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVD
b2RlKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAg
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVp
ZCgpKSkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nl
c3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBh
dGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCwgRUNNQU1vZGUgZWNtYU1v
ZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwot
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZURlbGV0
ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwgZWNtYU1vZGUpID09IEdpdmVVcE9uQ2Fj
aGUpIHsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoR2VuZXJpYywg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAgICAgIGlmIChraW5kID09
IERlbEJ5S2luZDo6QnlJZCkKLSAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotfQotCi1pbmxpbmUgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24oSW5C
eUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluQnlLaW5kOjpC
eUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBJ
bkJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7
Ci0gICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHBy
b3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uSW5CeUlkR2VuZXJpYzsKLSAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOwotICAgIGNhc2UgSW5CeUtpbmQ6OlByaXZhdGVO
YW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVHZW5lcmljOwotICAg
IH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1zdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsCi0gICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0g
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3Jj
ZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFiYXNlLT5zdHJ1Y3R1cmUo
dm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5jZSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKHdhc0ZvdW5k
KSB7Ci0gICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAKLSAgICAg
ICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBp
ZiAod2FzRm91bmQpIHsKLSAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFj
dGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0
VG9DYWNoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgICAgICAv
LyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5
cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQot
ICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAgICAgICAg
ICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwotICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xv
YmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVz
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBl
QWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVj
dCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNz
Q2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
IHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJl
KS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0g
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgp
ID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVw
YXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVsbHB0cik7Ci0gICAgICAg
ICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWlu
Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKLQotICAgICAgICBS
ZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNl
OjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQgPyBzbG90LmNhY2hlZE9mZnNldCgpIDog
aW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBl
QWNjZXNzQ2hhaW4pKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJv
cGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNl
V2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsK
LSAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQotICAgICAgICAgICAgICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUo
KSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHVi
SWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hl
TGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0g
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZUluQnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQsIHNsb3Qs
IHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7Ci0gICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VPYmplY3QtPmNsYXNzSW5mbyhnbG9iYWxP
YmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KSk7Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBw
cm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAg
ICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0
cnVjdHVyZSh2bSk7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9u
Rm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUp
Ci0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgIGJvb2wgaXNCYXNlUHJvcGVy
dHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAg
UmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgYnJh
bmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7IH0sIHsgfSk7Ci0KLSAgICAgICAgcmVz
dWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0g
ICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3Vs
ZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9p
ZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotCi0g
ICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUp
Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFp
bHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0K
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotCi0g
ICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2Up
OwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgcmV0
dXJuIGFjdGlvbjsKLQotICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZEFkZEFjY2Vzc0Nhc2UsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJl
ZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlQ2hlY2tQcml2YXRlQnJh
bmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0dXJlKTsKLQotICAgICAgICByZXN1bHQg
PSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAg
ICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJ
Zk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJldHVybiBy
ZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVy
OwotfQotCi12b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENh
Y2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAg
IGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVTZXRQcml2YXRlQnJhbmQoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAg
IGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlKTsKLQot
ICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9u
ID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1w
dFRvQ2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgICAgICAKLSAgICAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnNldEJyYW5kVHJhbnNpdGlvbkZy
b21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGJyYW5kSUQudWlk
KCkpOwotICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7Ci0gICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQot
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlQobmV3
U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpTZXRCcmFuZCk7
Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAKLSAg
ICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExPR19JQygoSUNFdmVu
dDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywg
YnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwotCi0gICAgICAgIHJlc3VsdCA9
IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
RUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAg
ICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihy
ZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNB
bmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6
IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCog
YmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIg
YnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNoZVNldFBy
aXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0
dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluc3Rh
bmNlT2YoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFsdWUuaXNDZWxsKCkpOyAvLyBzaG91
bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2VsbHMuCi0gICAgCi0gICAgaWYgKGZvcmNl
SUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgIAotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICAKLSAgICAgICAgSlNDZWxsKiB2YWx1ZSA9IHZh
bHVlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUt
PnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwotICAg
ICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBw
cm90b3R5cGVWYWx1ZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUpIHsKLSAgICAgICAgICAgIGlm
ICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsIHN0cnVjdHVy
ZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgcHJv
dG90eXBlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVRdWVy
aWVzQXJlQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGVhY2ggdGhp
cyB0byBkbyBwb2x5IHByb3RvLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKLSAgICAgICAgICAgICAgICBwcmVwYXJlQ2hh
aW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUsIHdhc0ZvdW5kID8gcHJvdG90eXBlIDog
bnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKLSAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZSwgd2FzRm91bmQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNl
OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLAotICAgICAg
ICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mSGl0IDog
QWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkKLSAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNj
ZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hlYWJsZUlkZW50aWZpZXIoKSk7Ci0gICAg
ICAgIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZBZGRBY2Nlc3NDYXNlLCBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgCi0gICAgICAg
IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBXVEZNb3ZlKG5ld0Nhc2UpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAg
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVwbGFjZVdpdGhKdW1wLCBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihy
ZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgZmlyZVdhdGNocG9p
bnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2Fj
aGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCi0gICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIGlmICh0cnlDYWNoZUluc3RhbmNlT2YoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUsIHByb3RvdHlwZVZhbHVlLCBzdHViSW5m
bywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwotfQot
Ci1zdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYp
Ci17Ci0gICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYu
Y29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwotfQotCi1zdGF0aWMg
dm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCi17Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxM
aW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExp
bmtJbmZvKTsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1
bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIHdlYkFzc2Vt
Ymx5T3duZXIoSlNDZWxsKiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAg
IC8vIEVhY2ggV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc2hhcmVzIHRoZSBzdHVicyBmcm9tIHRoZWly
IFdlYkFzc2VtYmx5Lk1vZHVsZSwgd2hpY2ggYXJlIHRoZXJlZm9yZSB0aGUgYXBwcm9wcmlhdGUg
b3duZXIuCi0gICAgcmV0dXJuIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2FsbGVlKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCi19Ci0KLXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbCgKLSAgICBWTSYgdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBj
YWxsZWVDb2RlQmxvY2ssCi0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8u
c3R1YigpKTsKLQotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKCk7Ci0gICAgLy8gT3VyIGNhbGxlciBtdXN0IGhhdmUgYSBjZWxsIGZvciBhIGNhbGxl
ZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2Fs
bGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgp
KTsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVC
bG9jaygpOwotCi0gICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZh
bGlkIENvZGVCbG9jay4KLSAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseU1vZHVsZShj
YWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJG
cmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFTU0VSVChv
d25lcik7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxs
TGlua0luZm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUsIGNvZGVQdHIp
OwotICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7
Ci0KLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCi0g
ICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJD
b2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1w
KGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7Ci0K
LSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJ
bmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8pOwotCi0gICAgaWYgKGNhbGxM
aW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0lu
Zm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0lu
Zm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci19Ci0KLXZv
aWQgbGlua0RpcmVjdENhbGwoCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLXsKLSAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5zdHViKCkpOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKLSAgICAKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAg
ICBjYWxsTGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxG
dW5jdGlvbkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9jaykpOwotICAgIGlmIChzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKLSAgICAgICAgZGF0YUxvZygiTGlua2lu
ZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZv
LmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwg
ZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKLQotICAgIGNhbGxMaW5rSW5mby5zZXRE
aXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIp
KTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+
bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0luZm8pOwotfQotCi12b2lkIGxp
bmtTbG93Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bykKLXsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgp
OwotICAgIAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCi1zdGF0aWMg
dm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKLXsKLSAgICBp
ZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFy
Q29kZUJsb2NrKCk7Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29u
KCkpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigp
KSB7Ci0gICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVm
KTsKLQotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCi0gICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsKLSAgICAgICAgfQotICAgICAgICBj
YWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5l
IGNhY2hlIGJvdGggZm9yIGRhdGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgotICAgIH0KLSAgICBj
YWxsTGlua0luZm8uY2xlYXJTZWVuKCk7Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOwot
ICAgIGNhbGxMaW5rSW5mby5jbGVhclNsb3dTdHViKCk7Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5p
c09uTGlzdCgpKQotICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgdW5s
aW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5m
bzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7Ci0gICAgCi0gICAgcmV2ZXJ0Q2FsbCh2
bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJl
dGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Zp
cnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUoKTsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1l
LT5jb2RlQmxvY2soKTsKLQotICAgIGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihjYWxsZXJDb2RlQmxvY2spLAotICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwg
RnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigp
KSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICByZXZl
cnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExpbmtJbmZv
LnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1
bmspKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwotfQotCi1uYW1l
c3BhY2Ugewotc3RydWN0IENhbGxUb0NvZGVQdHIgewotICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwot
fTsKLX0gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKTsKLQotICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBsaW5rUG9s
eW1vcnBoaWNDYWxsLCB3ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBHQy4KLSAg
ICAvLyBHQyBqZXR0aXNvbnMgQ29kZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8gZXRjLiBh
bmQgYnJlYWtzIGFzc3VtcHRpb24gZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2FsbC4KLSAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUodm0pOwotICAgIAotICAgIGlmICgh
bmV3VmFyaWFudCkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxs
TGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gT3VyIGNhbGxlciBt
dXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhp
cyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQo
Y2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQotICAgIENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGJvb2wgaXNXZWJBc3Nl
bWJseSA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgp
KTsKLQotICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBD
b2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJs
eU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7
Ci0gICAgQVNTRVJUKG93bmVyKTsKLQotICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OwotICAgIGlm
IChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkp
Ci0gICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOwotICAgIGVsc2UgaWYgKEpTT2JqZWN0
KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCi0gICAgICAgIGxpc3QgPSBDYWxs
VmFyaWFudExpc3QgeyBDYWxsVmFyaWFudChvbGRDYWxsZWUpIH07Ci0gICAgCi0gICAgbGlzdCA9
IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7Ci0KLSAgICAvLyBJZiB0
aGVyZSBhcmUgYW55IGNsb3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCBh
bGwgb2YgdGhlbSBhcyBjbG9zdXJlIGNhbGxzLgotICAgIC8vIFRoaXMgbWFrZXMgc3dpdGNoaW5n
IG9uIGNhbGxlZSBjaGVhcGVyLiBJdCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0J3MgZWFz
aWVyIG9uIHRoZSBERkc7Ci0gICAgLy8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50IHRvIGRl
YWwgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNhbGxlZXMu
Ci0gICAgYm9vbCBpc0Nsb3N1cmVDYWxsID0gZmFsc2U7Ci0gICAgZm9yIChDYWxsVmFyaWFudCB2
YXJpYW50IDogbGlzdCkgIHsKLSAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7
Ci0gICAgICAgICAgICBsaXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsKLSAgICAg
ICAgICAgIGlzQ2xvc3VyZUNhbGwgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpCi0gICAgICAgIGNhbGxMaW5r
SW5mby5zZXRIYXNTZWVuQ2xvc3VyZSgpOwotICAgIAotICAgIFZlY3RvcjxQb2x5bW9ycGhpY0Nh
bGxDYXNlPiBjYWxsQ2FzZXM7Ci0gICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7Ci0gICAg
Ci0gICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCi0gICAgZm9yIChDYWxsVmFy
aWFudCB2YXJpYW50IDogbGlzdCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51
bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFudC5leGVj
dXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICBjb2RlQmxv
Y2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0Zv
ckNhbGwoKTsKLSAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGVp
dGhlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBhcml0eSBt
aXNtYXRjaCwKLSAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlz
IHdob2xlIHRoaW5nIHRvIGJlIGEgdmlydHVhbCBjYWxsLgotICAgICAgICAgICAgaWYgKCFjb2Rl
QmxvY2sgfHwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZv
LmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxG
cmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7Ci0gICAg
ICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0
aCBjbG9zdXJlIGNhbGwuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc5MzExCi0gICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1ZSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChhdXRvKiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBu
ZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMuY29udGFp
bnMobmV3Q2FzZVZhbHVlKSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9SOiBBdHRl
bXB0IHRvIGFkZCBkdXBsaWNhdGUgY2FzZSB2YWx1ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRh
dGFMb2coIkV4aXN0aW5nIGNhc2UgdmFsdWVzOiAiKTsKLSAgICAgICAgICAgICAgICBDb21tYVBy
aW50ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhc2VWYWx1
ZXMpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0dGVtcHRp
bmcgdG8gYWRkOiAiLCBuZXdDYXNlVmFsdWUsICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFM
b2coIlZhcmlhbnQgbGlzdDogIiwgbGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2
YXJpYW50LCBjb2RlQmxvY2spKTsKLSAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3Q2FzZVZh
bHVlKTsKLSAgICB9Ci0gICAgQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZhbHVlcy5z
aXplKCkpOwotCi0gICAgLy8gSWYgd2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVzZSBhIG5v
cm1hbCB2aXJ0dWFsIGNhbGwuCi0gICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFu
dExpc3RTaXplOwotICAgIGlmIChpc1dlYkFzc2VtYmx5KQotICAgICAgICBtYXhQb2x5bW9ycGhp
Y0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50
TGlzdFNpemVGb3JXZWJBc3NlbWJseVRvSlMoKTsKLSAgICBlbHNlIGlmIChjYWxsZXJDb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCi0gICAgICAgIG1heFBvbHlt
b3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZh
cmlhbnRMaXN0U2l6ZUZvclRvcFRpZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIG1heFBvbHltb3Jw
aGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlh
bnRMaXN0U2l6ZSgpOwotCi0gICAgLy8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQgb2YgY2Fs
bENhc2VzLnNpemUoKSBiZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBmb3Igbm93
LgotICAgIGlmIChsaXN0LnNpemUoKSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6
ZSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+IGNh
bGxzKGNhbGxDYXNlcy5zaXplKCkpOwotICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBmYXN0Q291
bnRzOwotCi0gICAgaWYgKCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+aml0VHlw
ZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkgewotICAgICAgICBmYXN0Q291bnRzID0gbWFr
ZVVuaXF1ZUFycmF5PHVpbnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgpKTsKLSAgICAgICAgbWVtc2V0
KGZhc3RDb3VudHMuZ2V0KCksIDAsIGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWludDMyX3Qp
KTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5mby5jYWxs
ZWVHUFIoKTsKLQotICAgIGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRhSUMoKTsK
LSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOwotICAgIGlmIChjYWxs
TGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsTGlua0lu
Zm8uaXNUYWlsQ2FsbCgpKTsKLSAgICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlxdWU8Q2Fs
bEZyYW1lU2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgp
KTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVh
ZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCi0gICAgICAg
IC8vIHVzZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCi0gICAgICAgIGZy
YW1lU2h1ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgpOwotI2VuZGlmCi0gICAgICAgIGZyYW1l
U2h1ZmZsZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgY29tcGFy
aXNvblZhbHVlR1BSOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgIGlmIChmcmFt
ZVNodWZmbGVyKQotICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVTaHVmZmxl
ci0+YWNxdWlyZUdQUigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wYXJpc29uVmFs
dWVHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwotCi0gICAg
R1BSUmVnIGZhc3RDb3VudHNCYXNlR1BSOwotICAgIGlmIChmcmFtZVNodWZmbGVyKQotICAgICAg
ICBmYXN0Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPQotICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBH
UFJJbmZvOjpyZWdUMyk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKLQotICAg
IGlmICghZnJhbWVTaHVmZmxlciAmJiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAg
ICAgIC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBjYWxsZWUg
c2F2ZSByZWdpc3RlciBpbiB0aGUgc2xvdyBwYXRoLgotICAgICAgICBBU1NFUlQoIWNhbGxlckNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOwotICAgICAg
ICBzdHViSml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAg
ICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1
dGFibGUgaW4gc2NyYXRjaEdQUi4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLmlzVGFpbENhbGwoKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHVi
Sml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJ
Zk5vdENlbGwoY2FsbGVlR1BSKSk7Ci0jZWxzZQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFs
cmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0gICAgICAg
IC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24g
d2l0aCBjbG9zdXJlIGNhbGwuCi0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5j
aElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0
YWJsZU9yUmFyZURhdGEoKSksIGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gaGFz
RXhlY3V0YWJsZSA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNv
bXBhcmlzb25WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKTsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhjb21wYXJpc29uVmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0
YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVHUFIpOwot
ICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJnN0dWJKaXQpOwotICAgIH0KLQotICAgIEJpbmFy
eVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5h
cnlTd2l0Y2g6OkludFB0cik7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAg
IHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkgewotICAgICAgICBzaXplX3Qg
Y2FzZUluZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOwotICAgICAgICAKLSAgICAgICAg
Q2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKLSAg
ICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyOwotICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKLSAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwgY2FsbExp
bmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOwotICAgICAg
ICAgICAgaWYgKCFjb2RlUHRyKQotICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4
ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJp
dHlDaGVja05vdFJlcXVpcmVkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICBjb2RlUHRyID0gdm0u
Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZmFzdENvdW50cykgewotICAgICAgICAgICAgc3R1
YkppdC5hZGQzMigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VH
UFIsIGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgbmVlZHNEb25lSnVtcCA9IGZhbHNlOwotICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikg
ewotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+
c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICBjYWxsc1tjYXNl
SW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2UgaWYg
KGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQucHJlcGFy
ZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0g
c3R1YkppdC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChpc0RhdGFJQykKLSAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHVi
Sml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAg
ICAgIG5lZWRzRG9uZUp1bXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7Ci0gICAgICAgIGlmIChuZWVk
c0RvbmVKdW1wKQotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAg
IH0KLSAgICAKLSAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICBiaW5hcnlTd2l0Y2gu
ZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKLQotICAgIGlmIChmcmFtZVNodWZmbGVyKSB7
Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKLSAgICAgICAg
ZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOwotICAgICAgICBm
cmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKLSNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKLSNlbHNlCi0gICAg
ICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUklu
Zm86OnJlZ1QwKSk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZvclNs
b3dQYXRoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwg
R1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5m
bzo6cmVnVDEpOwotI2VuZGlmCi0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKLSAgICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1RhaWxDYWxs
KCkpIHsKLSAgICAgICAgLy8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRoLCBnZXQg
cmlkIG9mIGFueSByZW1uYW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBleGlzdC4g
VGhpcyByZWFsbHkgb25seSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAgICAgICAg
Ly8gU1AgZm9yIGNhbGxzLgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChHUFJJbmZvOjpyZWdUNCk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKLSAgICAKLSAgICBzdHViSml0
LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKLSAgICBB
c3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwg
Y2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKLSAg
ICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7Ci0jaWYgQ1BVKEFS
TV9USFVNQjIpCi0gICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1cmVzIHBy
b3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFu
IGFkZHJlc3MKLSAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQg
YSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90dG9tIGJp
dC4KLSAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1Nl
dChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOwotICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1Rh
aWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29k
ZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyh0YXJnZXQpKSk7Ci0jZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQ
dHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRy
KSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZt
LmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsK
LSAgICAKLSAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICBj
YWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAg
ICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRh
cmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHki
IDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5n
KGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCi0gICAgICAgIHZtLCBvd25lciwgY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKLSAgICAgICAgV1RG
TW92ZShmYXN0Q291bnRzKSkpOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHNsb3cgcGF0aCBpcyB1
bnJlYWNoYWJsZSBvbiA2NC1iaXRzLCBidXQgc3RpbGwKLSAgICAvLyByZWFjaGFibGUgb24gMzIt
Yml0cyBzaW5jZSBhIG5vbi1jZWxsIGNhbGxlZSB3aWxsIGFsd2F5cwotICAgIC8vIHRyaWdnZXIg
dGhlIHNsb3cgcGF0aAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotCi0gICAg
Ly8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQgb25lIHdp
bGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKLSAgICAvLyB0aGF0IGl0J3Mg
bm8gbG9uZ2VyIG9uIHN0YWNrLgotICAgIGNhbGxMaW5rSW5mby5zZXRTdHViKFdURk1vdmUoc3R1
YlJvdXRpbmUpKTsKLSAgICAKLSAgICAvLyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhh
cyBhIGNhbGwgY2FjaGUgYXBhcnQgZnJvbSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2Fs
bAotICAgIC8vIHN0dWIuCi0gICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQotICAgICAg
ICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkK
LXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwotICAgIHN3aXRjaCAoa2luZCkgewot
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRo
aXM6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
SWREaXJlY3Q6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgIGNhc2Ug
R2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJB
c0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2luZCkKLXsK
LSAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOwotICAg
IHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7Ci0gICAgICAgIHVz
aW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
ZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0
ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNl
dFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAg
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAg
ICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeVZhbDogewotICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlw
ZSgmb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlw
ZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJl
YWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci0gICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAgICAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJp
dmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAg
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6ZWRGdW5jdGlvbik7
Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
byk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQg
cmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBEZWxCeUtpbmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBEZWxCeUtpbmQ6OkJ5SWQp
Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7
Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0SW5CeShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5k
KQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICBpZiAoa2luZCA9PSBJbkJ5
S2luZDo6QnlJZCkKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICBlbHNlCi0gICAgICAgIElubGluZUFjY2Vzczo6
cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEluc3RhbmNl
T2YoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsK
LSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lk
IHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElubGlu
ZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NO
b3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQotewotI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKLSAgICBpZiAoIWNhbGxlZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPih2bSwgY2FsbGVlKSkKLSAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxs
RW50cnlwb2ludCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVOVVNFRF9Q
QVJBTShraW5kKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKLSNlbmRpZgotICAgIHJldHVy
biBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2UzNzdl
ZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KEpJVCkKLQotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJDYWxs
VmFyaWFudC5oIgotI2luY2x1ZGUgIlB1dEtpbmQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWVu
dW0gY2xhc3MgR2V0QnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotICAgIFRyeUJ5SWQs
Ci0gICAgQnlJZFdpdGhUaGlzLAotICAgIEJ5SWREaXJlY3QsCi0gICAgUHJpdmF0ZU5hbWUsCi0g
ICAgUHJpdmF0ZU5hbWVCeUlkLAotfTsKLQotZW51bSBjbGFzcyBQdXRCeUtpbmQgewotICAgIEJ5
SWQsCi0gICAgQnlWYWwsCi19OwotCi1lbnVtIGNsYXNzIERlbEJ5S2luZCB7Ci0gICAgQnlJZCwK
LSAgICBCeVZhbAotfTsKLQotZW51bSBjbGFzcyBJbkJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBC
eVZhbCwKLSAgICBQcml2YXRlTmFtZQotfTsKLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwg
U3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoQXJyYXlQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1
ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Ci12b2lkIHJl
cGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVy
ZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKLXZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwg
U3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxC
eUtpbmQsIEVDTUFNb2RlKTsKLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsIGNv
bnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCBy
ZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLXZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENv
ZGVCbG9jayosIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIGJvb2wgd2FzRm91bmQpOwotdm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKFZNJiwgQ2Fs
bEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua0RpcmVjdENhbGwo
Q2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExp
bmtJbmZvJik7Ci12b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYsIENhbGxWYXJpYW50KTsKLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwotdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKLXZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFu
ZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldEluc3RhbmNlT2Yo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRDaGVja1ByaXZhdGVC
cmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFNldFByaXZh
dGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRy
VGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoVk0m
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCogY2FsbGVlKTsKLQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1Zjdi
Nzg2NDExZDg1NWIyYTFkZTQ3Yy4uZGJkNWFiZDM3ODhkNzFiODAzMDViYjg1MWZiY2MyNzEzZTg3
YjAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cApAQCAtMzQ0LDQ4ICszNDQsMjUgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGwoVk0mIHZtKQogICAgIHJldHVy
biB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ2FsbCk7CiB9
CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxU
aHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1
bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9y
VGFpbENhbGwoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxN
b2RlOjpUYWlsLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QoVk0mIHZtKQot
ewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBDb2RlRm9y
Q29uc3RydWN0KTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbChWTSYgdm0pCi17Ci0gICAgcmV0dXJu
IHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNhbGwpOwot
fQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFs
VGh1bmtGb3JDb25zdHJ1Y3RDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFs
VGh1bmtGb3Iodm0sIENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVu
a0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxs
TW9kZSBjYWxsTW9kZSkKIHsKLSAgICBhdXRvIG1vZGUgPSBjYWxsTGlua0luZm8uY2FsbE1vZGUo
KTsKLSAgICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCk7CiAg
ICAgYXV0byBnZW5lcmF0b3IgPSBbJl0gKCkgLT4gVGh1bmtHZW5lcmF0b3IgewotICAgICAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChjYWxsTW9kZSkgewogICAgICAgICBjYXNl
IENhbGxNb2RlOjpSZWd1bGFyOgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsOwotICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3Q7CisgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7CiAgICAgICAgIGNhc2UgQ2Fs
bE1vZGU6OlRhaWw6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENhbGw7Ci0gICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdDsKKyAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0
OgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENhbGw7CiAgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAppbmRleCAwZjlmNmUyZDM2ZjZkZDIzZTE4NzI2YWNlNjMxNGEzMGEy
MDFkYmNlLi5hYjdjZjY2YzQyMTUxZWUwMTk1OGMxYWIyMmYyOWZjZDhkZDcwMTRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTQ5LDcgKzQ5LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0m
KTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFs
VGh1bmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbE1vZGUpOwogCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0m
KTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0
R2VuZXJhdG9yKFZNJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
CmluZGV4IGU4ZGFmZjdkODhiMzBjNmJmODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQwYjM3Mzg5
MjFhNGYwMDE1MTJlN2RlZTNhODQ0M2M1MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCkBAIC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIgdm9pZCB3
YXNtX2VudHJ5KHZvaWQqLCB2b2lkKiwgdm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlU
b0phdmFTY3JpcHRUcmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNF
bnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5U2xv
d1BhdGhUcmFtcG9saW5lKHZvaWQpOworZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0aG91dFVu
dGFnSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0aW9uSGFu
ZGxlclRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxMSW50VHJh
bXBvbGluZSh2b2lkKTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5pdGlhbGl6
ZSgpCiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVU
YWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1
Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2ND
b25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxK
U0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CkBAIC0xNjEsMTEgKzE2MiwxOSBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQot
ICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlT
bG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFp
bENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFn
Q29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0
YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZp
Zy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50
cnlTbG93UGF0aFB0clRhZyldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICB9CisgICAgeworICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOworICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVj
dChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAg
ICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0
ZTo6dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMWE5NWQxZGQw
ZWE1ZWYzNDMxMDYxNWI2OTFlYmM5YTFlYWI4MmE2YS4uMDk3YTAwY2U5ZWMyMmFiZGQyMmZlYzk3
YTQxNWRiZDI4OGVlNTYzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMuaCIKICNp
bmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNs
dWRlICJWTUlubGluZXMuaCIKQEAgLTU4Miw2ICs1ODMsMTcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc3RhY2tfY2hlY2spCiAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbEZyYW1lKTsKIH0K
IAorZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgY2FsbExpbmtJbmZvKTsKK30KKwor
ZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdu
b3JlZDsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihqc0Nhc3Q8SlNHbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpLCBjYWxsZWVGcmFtZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworfQorCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfbmV3X29iamVjdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTgxOSw3ICsxODMxLDgg
QEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNh
bGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRD
YWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxS
ZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5n
bG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNh
bGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhdXRv
KiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0
ZXJzOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJT
UCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBzbG93UGF0aExvZygiQ2FsbCBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxl
ZSwgIlxuIik7CkBAIC0xODM4LDcgKzE4NTEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAog
ICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAg
ICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1
bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsK
ICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBMTElOVF9DQUxMX1JFVFVS
TihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1
ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7
CisgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVj
dCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAg
ICAgc2xvd1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwg
Y2FsbGVlLCAiXG4iKTsKQEAgLTE4NDcsNyArMTg2MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxs
ZWUsCiAgICAgTExJTlRfQ0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFDb25zdHJ1
Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiB9CiAKLWlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlLCBMTEludENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gbnVsbHB0cikKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwg
SlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2Fs
bGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTg2MiwxNCArMTg3Niw5IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVT
cGVjaWFsaXphdGlvbktpCiAgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNE
eW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAg
QVNTRVJUKCEhY29kZVB0cik7Ci0KLSAgICAgICAgICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VT
U19TTE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBj
b2RlUHRyKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRo
PEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAg
ICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2Fs
bGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsK
KyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGNhbGxl
ZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7CiAgICAgfQpAQCAtMTkwNCw3NCArMTkxMyw5
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAgfQogCiAgICAgQVNTRVJUKCEhY29kZVB0
cik7Ci0gICAgCi0gICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJ
bmZvKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNhbGxlckNvZGVCbG9j
aywgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0g
ICAgfQotCiAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBj
YWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdl
bmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgT3Am
JiBieXRlY29kZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBjaGVja3Bv
aW50SW5kZXggPSAwKQotewotICAgIC8vIFRoaXMgbmVlZHMgdG86Ci0gICAgLy8gLSBTZXQgdXAg
YSBjYWxsIGZyYW1lLgotICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBp
bGUgaXQgaWYgbmVjZXNzYXJ5LgotICAgIC8vIC0gSWYgcG9zc2libGUsIGxpbmsgdGhlIGNhbGwn
cyBpbmxpbmUgY2FjaGUuCi0gICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUg
YWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCi0gICAgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGNhbGxlZUZvcihieXRlY29k
ZSwgY2hlY2twb2ludEluZGV4KSk7Ci0gICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9
IGNhbGxGcmFtZSAtIHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVj
a3BvaW50SW5kZXgpOwotICAgIAotICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2tw
b2ludEluZGV4KSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFt
ZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICAKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHNldFVwQ2FsbChjYWxs
ZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSwgJmNhbGxMaW5rSW5mb0ZvcihtZXRhZGF0YSwg
Y2hlY2twb2ludEluZGV4KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
YWxsKQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmlj
Q2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwp
KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCkKLXsKLSAg
ICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJs
b2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcFRhaWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0KQotewotICAgIExMSU5U
X0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNh
bGxGcmFtZSwgcGMtPmFzPE9wQ29uc3RydWN0PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7Ci19Ci0K
LUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpCi17Ci0g
ICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNh
bGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JPcGVuPigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRv
ck9wZW46OnN5bWJvbENhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2l0ZXJhdG9yX25leHRfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck5leHQ+
KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQpKTsKKyAgICBhdXRv
KiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0
ZXJzOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKQpAQCAtMjA0Myw4ICsx
OTg3LDggQEAgZW51bSBjbGFzcyBTZXRBcmd1bWVudHNXaXRoIHsKICAgICBDdXJyZW50QXJndW1l
bnRzCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiog
cGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgU2V0QXJndW1lbnRzV2l0aCBzZXQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgU2V0QXJndW1lbnRzV2l0aCBzZXQ+CitpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5z
dHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKQogewogICAgIExMSU5UX0JFR0lO
X05PX1NFVF9QQygpOwogCkBAIC0yMDUzLDExICsxOTk3LDEyIEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbioKICAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRv
IGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3A+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX2NhbGxlZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gdm0ubmV3
Q2FsbEZyYW1lUmV0dXJuVmFsdWU7Ci0KLSAgICBpZiAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6
Ok9iamVjdCkgeworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdm0u
dmFyYXJnc0xlbmd0aCArIDE7CisgICAgaWYgY29uc3RleHByIChzZXQgPT0gU2V0QXJndW1lbnRz
V2l0aDo6T2JqZWN0KSB7CiAgICAgICAgIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX3RoaXNWYWx1ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2Fy
Z3VtZW50cyksIGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwogICAg
ICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogICAgIH0gZWxz
ZQpAQCAtMjA2NywyNyArMjAxMiwzMCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFy
Z3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2Fs
bGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwog
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFt
ZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOworICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLnVw
ZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKKworICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbGVyU1Ap
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQogewot
ICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29k
ZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NT
ZXR1cDxPcENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwg
cGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rh
aWxfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZh
cmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpPYmpl
Y3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNldEFyZ3Vt
ZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQog
ewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGNh
bGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1l
bnRzKTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
LCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2Rl
Rm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3Rf
dmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncz4o
Y2FsbEZyYW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0
KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncywgU2V0QXJndW1l
bnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAog
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gcmV0dXJuUG9pbnQpCkBAIC0yMTEwLDcgKzIwNTgsOCBAQCBpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJ
bnN0cnVjdGlvbgogICAgIAogICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gSlNW
YWx1ZTo6ZW5jb2RlKGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNvZGUubV9l
Y21hTW9kZSkpOwogICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICBMTElOVF9DQUxMX1JF
VFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5W
YWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRh
Zyk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6
OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNh
bGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4OGFhNmFh
OTY0ZmI2ZTA5YjY2Li5kNDM4ZmNiMzM5ZGFmZTM3YTNjMTQxZGJlMjRhNmFkMjExMjliYjhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMzgs
NiArMzgsOCBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBsbGludF90cmFjZV9vcGVyYW5kKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwg
aW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CiBleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBjb25z
dCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBS
RUZFUkVOQ0VEX0ZST01fQVNNOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
bGlua19jYWxsKENhbGxGcmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOwor
ZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFt
ZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOwogZXh0ZXJuICJDIiB2b2lkIGxs
aW50X3dyaXRlX2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUqLCBKU0NlbGwqKSBSRUZFUkVOQ0VEX0ZS
T01fQVNNIFdURl9JTlRFUk5BTDsKIAogI2RlZmluZSBMTElOVF9TTE9XX1BBVEhfREVDTChuYW1l
KSBcCkBAIC0xMTksOSArMTIxLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMpOwogTExJTlRfU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9zZXRfZnVuY3Rpb25fbmFtZSk7Ci1MTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF90YWlsX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9jb25zdHJ1Y3QpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9z
aXplX2ZyYW1lX2Zvcl92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMpOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMTMxLDggKzEzMCw2IEBA
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3Mp
OwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTE2KTsKIExM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUzMik7Ci1M
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCk7
Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2Fs
bCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX2FyZ3Vt
ZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCA0NjJjYmZiZTRl
MzQ1Njg0NWUwNWFhOGJjMGM0ODExNTNjYmI4ZDBhLi4xNjAzYzJjNzg1NGM5OTliZTllNmM1NzA1
MzM2Y2ZmNzQyNzI5MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRo
dW5rcy5jcHAKQEAgLTM0Niw5ICszNDYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiBwb2ludGVyLCBQdAogewog
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMywgdGFn
KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQ
UkluZm86OnJlZ1QzKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUNSwgdGFnKTsKKyAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJlZ1Q1KTsK
KyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUNSwgT3BlcmF0aW9uUHRyVGFnKTsKIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkxMSW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBu
YW1lKTsKQEAgLTM2NiwxMyArMzY2LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCogcG9pbnRlciwKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAi
TExJbnQgJXMgd2FzbSBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRh
ZyB0YWcpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVh
dGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZywgYm9vbCB1bnRhZykKIHsKICAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCi0gICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKLSAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJlZ2lzdGVy
czo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmZhckp1bXAoR1BSSW5mbzo6
cmVnVDAsIHRhZyk7CisgICAgaWYgKHVudGFnKSB7CisgICAgICAgIGppdC51bnRhZ1B0cihHUFJJ
bmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAgIGppdC52YWxp
ZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKKyAgICB9CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6YXJndW1lbnRHUFI3LCB0YWcpOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50IHRhaWwgY2FsbCBnYXRlIHRo
dW5rIik7CkBAIC01NzMsOCArNTc1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IHJldHVybkxvY2F0aW9uVGh1bmsoT3Bjb2RlSUQgb3Bjb2RlSUQsIE9wY28KICAgICBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3Jfb3BlbikKICAgICBMTElOVF9SRVRVUk5f
TE9DQVRJT04ob3BfaXRlcmF0b3JfbmV4dCkKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3Bf
Y29uc3RydWN0KQotICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xv
dykKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdykK
KyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKQorICAgIExMSU5UX1JF
VFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfZ2V0X2J5X2lkKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlf
dmFsKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCmluZGV4IGI4N2M0MjBjYmU0MDJhMWYwY2Yw
ODY4MTA3YjVhZmQ2ZGJjZjU0YWMuLjA1ZWM2MDFjMDE2NGNiOTU0YjczYTIxYzczNTFmZjAxMGZl
YTcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCkBAIC04
OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGppdENhZ2VQdHJUaHVuaygpOwogI2lmIENQVShBUk02NEUpCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiwgUHRyVGFn
LCBjb25zdCBjaGFyKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxs
R2F0ZShQdHJUYWcpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZywgYm9vbCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBsb29wT1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGVudHJ5T1NSRW50cnlHYXRl
VGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IHdh
c21PU1JFbnRyeUdhdGVUaHVuaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGJiODhiNmZkYjA5OWI0OTlhZTZmZjRl
ODEwMTAxNTA0ZGFhNmQ0ZTMuLjNhMjUyMzMwN2I0Y2QwMGU5MjYwMWRmNjAwZDczNWJiNGY4OTY3
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KQEAgLTU1MSw2ICs1NTEsNyBAQCBjb25zdCBTeW1ib2xUeXBlID0gY29uc3Rl
eHByIFN5bWJvbFR5cGUKIGNvbnN0IE9iamVjdFR5cGUgPSBjb25zdGV4cHIgT2JqZWN0VHlwZQog
Y29uc3QgRmluYWxPYmplY3RUeXBlID0gY29uc3RleHByIEZpbmFsT2JqZWN0VHlwZQogY29uc3Qg
SlNGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIgSlNGdW5jdGlvblR5cGUKK2NvbnN0IEludGVybmFs
RnVuY3Rpb25UeXBlID0gY29uc3RleHByIEludGVybmFsRnVuY3Rpb25UeXBlCiBjb25zdCBBcnJh
eVR5cGUgPSBjb25zdGV4cHIgQXJyYXlUeXBlCiBjb25zdCBEZXJpdmVkQXJyYXlUeXBlID0gY29u
c3RleHByIERlcml2ZWRBcnJheVR5cGUKIGNvbnN0IFByb3h5T2JqZWN0VHlwZSA9IGNvbnN0ZXhw
ciBQcm94eU9iamVjdFR5cGUKQEAgLTExNTEsMjcgKzExNTIsMjcgQEAgbWFjcm8gY2FsbFRhcmdl
dEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFt
ZSwgZHN0VmkKICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxsZWUKICAgICBlbHNpZiBB
Uk02NEUKICAgICAgICAgbWFjcm8gY2FsbE5hcnJvdygpCi0gICAgICAgICAgICBsZWFwIEpTQ0Nv
bmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4
cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2Ey
XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBK
U0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29u
c3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1w
IFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9q
c190cmFtcG9saW5lXyVvcGNvZGVOYW1lJToKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJU
YWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAg
ICAgbWFjcm8gY2FsbFdpZGUxNigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0
ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9w
Y29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBq
bXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAg
X2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUxNjoKLSAgICAgICAgICAgIGNhbGwgdDMs
IGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5k
CiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUzMigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZp
ZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIg
R2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1w
IFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxl
YXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsg
KGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0clNpemUsIGE3CisgICAg
ICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAg
ICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUzMjoKLSAgICAgICAgICAg
IGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAg
ICAgICAgZW5kCiAKLSAgICAgICAgbW92ZSBjYWxsZWUsIHQzCisgICAgICAgIG1vdmUgY2FsbGVl
LCB0NQogICAgICAgICBzaXplKGNhbGxOYXJyb3csIGNhbGxXaWRlMTYsIGNhbGxXaWRlMzIsIG1h
Y3JvIChnZW4pIGdlbigpIGVuZCkKICAgICBlbHNlCiAgICAgICAgIGNhbGwgY2FsbGVlLCBjYWxs
UHRyVGFnCkBAIC0xMjA5LDEyICsxMjEwLDIzIEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAg
ICAgZW5kCiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwgdGVtcDEs
IHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCi0gICAgYWRkcCBDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSwgc3AKK21hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCh0ZW1wMSwgdGVtcDIsIHRl
bXAzLCB0ZW1wNCkKIGVuZAogCi0jIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lCi1tYWNybyBw
cmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2Fs
bFB0clRhZykKK21hY3JvIGludm9rZUZvclJlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rp
b24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIGNhbGxQdHJUYWcpCitlbmQKKworIyB0
NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwob3Bj
b2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFs
UmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorZW5kCisKK21hY3JvIHByZXBhcmVGb3JT
bG93UmVndWxhckNhbGwoKQorZW5kCisKKyMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUgKyBD
YWxsZXJGcmFtZUFuZFBDU2l6ZQorIyBXZSBsZWF2ZSBjZnIgdGVtcDQgdG8gdXNlIGl0IGZvciB1
bnRhZ2dpbmcuCittYWNybyBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywg
dGVtcDQpCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogCiAgICAgbG9hZGkg
UGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzW2Nmcl0sIHRlbXAyCkBA
IC0xMjMyLDE4ICsxMjQ0LDE3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRl
bXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIG1vdmUgY2ZyLCB0ZW1w
MQogICAgIGFkZHAgdGVtcDIsIHRlbXAxCiAKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbc3BdLCB0ZW1wMgorICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIENhbGxlckZyYW1lQW5kUENTaXplW3Nw
XSwgdGVtcDIKICAgICAjIFdlIGFzc3VtZSA8IDJeMjggYXJndW1lbnRzCiAgICAgbXVsaSBTbG90
U2l6ZSwgdGVtcDIKICAgICBhZGRpIFN0YWNrQWxpZ25tZW50IC0gMSArIENhbGxGcmFtZUhlYWRl
clNpemUsIHRlbXAyCiAgICAgYW5kaSB+U3RhY2tBbGlnbm1lbnRNYXNrLCB0ZW1wMgogCiAgICAg
aWYgQVJNdjcgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIENfTE9PUCBvciBDX0xPT1BfV0lOIG9yIE1J
UFMgb3IgUklTQ1Y2NAotICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAogICAg
ICAgICBzdWJpIENhbGxlckZyYW1lQW5kUENTaXplLCB0ZW1wMgogICAgICAgICBsb2FkcCBDYWxs
ZXJGcmFtZUFuZFBDOjpyZXR1cm5QQ1tjZnJdLCBscgogICAgIGVsc2UKLSAgICAgICAgYWRkcCBQ
dHJTaXplLCBzcAorICAgICAgICBzdWJwIFB0clNpemUsIHNwCiAgICAgICAgIHN1YmkgUHRyU2l6
ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgUHRyU2l6ZVtjZnJdLCB0ZW1wMwogICAgICAgICBzdG9y
ZXAgdGVtcDMsIFtzcF0KQEAgLTEyNzAsOSArMTI4MSwxMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFp
bENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAg
ICBlbmQKIAogICAgIG1vdmUgdGVtcDEsIHNwCitlbmQKKworbWFjcm8gaW52b2tlRm9yVGFpbENh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFn
KQogICAgIGlmIEFSTTY0RQotICAgICAgICBtb3ZlIHRlbXA0LCBhMgotICAgICAgICBtb3ZlIGNh
bGxlZSwgYTAKKyAgICAgICAgbW92ZSBtYXliZU9sZENGUiwgYTIKKyAgICAgICAgbW92ZSBjYWxs
ZWUsIGE3CiAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZK
U0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbCVjYWxsUHRyVGFnJSkg
KiBQdHJTaXplLCBhMQogICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
JWNhbGxQdHJUYWclCiAgICAgZWxzZQpAQCAtMTI4MCw2ICsxMjk0LDIyIEBAIG1hY3JvIHByZXBh
cmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRy
VGFnKQogICAgIGVuZAogZW5kCiAKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQ
b2x5bW9ycGhpY1RhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbFB0clRhZykKKyAg
ICBpZiBBUk02NEUKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTcK
KyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZp
Z0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnRhaWxDYWxsV2l0aG91dFVudGFnJWNhbGxQdHJU
YWclKSAqIFB0clNpemUsIGExCisgICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWcgIyAlY2FsbFB0clRhZyUKKyAgICBlbHNlCisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0
aW5hdGlvblt0NV0sIGExCisgICAgICAgIGptcCBhMSwgY2FsbFB0clRhZworICAgIGVuZAorZW5k
CisKK21hY3JvIHByZXBhcmVGb3JTbG93VGFpbENhbGwoKQorICAgIHJlc3RvcmVDYWxsZWVTYXZl
c1VzZWRCeUxMSW50KCkKK2VuZAorCiBtYWNybyBzbG93UGF0aEZvckNvbW1vbkNhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxs
KQogICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIG1f
cHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiBlbmQKQEAg
LTEyOTEsNyArMTMyMSw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1CiAgICAgICAgIG1hY3Jv
IChjYWxsZWUsIGNhbGxlZUZyYW1lUHRyKQogICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0
ciwgLmRvbnRVcGRhdGVTUAogICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKLSAg
ICAgICAgICAgIHByZXBhcmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlTbG93
UGF0aFB0clRhZykKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQogICAg
ICAgICAuZG9udFVwZGF0ZVNQOgogICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNv
ZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZp
cnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQog
ICAgICAgICBlbmQpCkBAIC0xODIwLDEyICsxODUwLDE2IEBAIGlmIEFSTTY0RQogICAgIGdsb2Jh
bCBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlUcmFtcG9s
aW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0Vu
dHJ5UHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAgICAgZ2xvYmFsIF90
YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5U2xv
d1BhdGhUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAg
am1wIGEwLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRy
VGFnCisKKyAgICBnbG9iYWwgX3RhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUK
KyAgICBfdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZToKKyAgICAgICAgam1w
IGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9s
aW5lCiAgICAgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lOgpAQCAtMjMyNSwxNyArMjM1OSwx
NyBAQCBlbmQpCiAKIAogIyB3ZSBjYW4ndCB1c2UgY2FsbE9wIGJlY2F1c2Ugd2UgY2FuJ3QgcGFz
cyBgY2FsbGAgYXMgdGhlIG9wY29kZSBuYW1lLCBzaW5jZSBpdCdzIGFuIGluc3RydWN0aW9uIG5h
bWUKLWNvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxpbnRfc2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwg
cHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCitjb21tb25DYWxs
T3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1
bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3Vs
YXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEp
CiAgICAgYXJyYXlQcm9maWxlRm9yQ2FsbChPcENhbGwsIGdldHUpCiBlbmQpCiAKIAotbWFjcm8g
Y2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGZuKQotICAgIGNv
bW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9wY29kZU5hbWUl
LCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKK21hY3JvIGNhbGxPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBo
aWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCisgICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1l
JSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNh
bGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBmbikK
IGVuZAogCiAKLWNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2Fs
bCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY2FsbE9wKHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwg
cHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3Jw
aGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0
YSkKICAgICBhcnJheVByb2ZpbGVGb3JDYWxsKE9wVGFpbENhbGwsIGdldHUpCiAgICAgY2hlY2tT
d2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIHJlbG9hZCBtZXRhZGF0YSBzaW5jZSBjaGVj
a1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKSBtaWdodCBoYXZlIHRyYXNoZWQgdDUKQEAgLTIzNDMs
NyArMjM3Nyw3IEBAIGNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWls
Q2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogZW5kKQogCiAKLWNhbGxPcChjb25zdHJ1Y3Qs
IE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0
YSkgZW5kKQorY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFy
Q2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJD
YWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVu
ZCkKIAogCiBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCkBAIC0yMzU0
LDcgKzIzODgsNyBAQCBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAu
bm9FeGNlcHRpb246ICAgIAogZW5kCiAKLW1hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHBy
ZXBhcmVDYWxsKQorbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBnZXQsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCwgaW52b2tl
Q2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwpCiAgICAgY2FsbFNsb3dQ
YXRoKGZyYW1lU2xvd1BhdGgpCiAgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQpAQCAtMjM2
OSwzMiArMjQwMyw3MCBAQCBtYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsbwogICAgICAgICAgICAgc3Vi
cCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAgICAgICAgIGVuZAogICAgIGVuZAotICAg
IHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRp
c3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbENhbGxTbG93UGF0aCgKKyAg
ICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhvc2UgYXJlIHIwIGFuZCByMQorICAgICAgICBt
YWNybyAocmVzdG9yZWRQQ09yVGhyb3csIGNhbGxlZUZyYW1lUHRyKQorICAgICAgICAgICAgYnRw
eiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAorICAgICAgICAgICAgcmVzdG9yZVN0YXRl
QWZ0ZXJDQ2FsbCgpCisgICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAorICAgICAg
ICAgICAgZ2V0KG1fY2FsbGVlLCB0MSkKKyAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDEsIHQwKQorICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisgICAgICAg
ICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2Fs
bGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgICAgICAgICAgYnRweiB0MSwgKGNvbnN0ZXhwciBD
YWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9ycGhpYworICAg
ICAgICAgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1cm4gYWRk
cmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNlcGFyYXRl
bHkuCisgICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHlt
b3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBo
aWMgdGh1bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rl
ciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAgICBqbXAgLmdvUG9seW1vcnBo
aWMKKworICAgICAgICAubm90UG9seW1vcnBoaWM6CisgICAgICAgICAgICBicW5lcSB0MCwgdDEs
IC5vcENhbGxTbG93CisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKKwor
ICAgICAgICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0
aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisgICAgICAgIC5vcENhbGxTbG93OgorICAg
ICAgICAgICAgIyB0MCBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMgQ2FsbExpbmtJbmZv
KgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgICAgICAg
ICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIg
IyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0
NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgICAgICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAgICAgIHByZXBhcmVT
bG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Ns
b3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lz
dGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5kb250VXBkYXRlU1A6
CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUK
KyAgICAgICAgZW5kKQogZW5kCiAKIAotbGxpbnRPcChvcF9jYWxsX3ZhcmFyZ3MsIE9wQ2FsbFZh
cmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZhcmFyZ3Mob3Bf
Y2FsbF92YXJhcmdzLCBzaXplLCBPcENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3df
cGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxfdmFyYXJn
cywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9jYWxsX3Zh
cmFyZ3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBzaXplLCBnZXQs
IE9wQ2FsbFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xs
aW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2Nh
bGxfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwg
cHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNh
bGwpCiBlbmQpCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJh
cmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9n
dWUoKQogICAgICMgV2UgbGllIGFuZCBwZXJmb3JtIHRoZSB0YWlsIGNhbGwgaW5zdGVhZCBvZiBw
cmVwYXJpbmcgaXQgc2luY2Ugd2UgY2FuJ3QKICAgICAjIHByZXBhcmUgdGhlIGZyYW1lIGZvciBh
IGNhbGwgb3Bjb2RlCi0gICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJncywgc2l6
ZSwgT3BUYWlsQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJh
bWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBh
cmVGb3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBz
aXplLCBnZXQsIE9wVGFpbENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50
X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VG
b3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93
VGFpbENhbGwpCiBlbmQpCiAKIAotbGxpbnRPcChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBP
cFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAj
IFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0
IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29k
ZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXpl
LCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhf
c2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3BhdGhfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwpCisgICAgZG9DYWxsVmFy
YXJncyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHNpemUsIGdldCwgT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
X2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJkX2FyZ3VtZW50cywgX2xsaW50
X3Nsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHByZXBhcmVGb3JUYWlsQ2Fs
bCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVw
YXJlRm9yU2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfY29uc3RydWN0X3ZhcmFy
Z3MsIE9wQ29uc3RydWN0VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAg
ZG9DYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgc2l6ZSwgT3BDb25zdHJ1Y3RWYXJh
cmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBf
bGxpbnRfc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzLCBwcmVwYXJlRm9yUmVndWxhckNhbGwp
CitsbGludE9wV2l0aE1ldGFkYXRhKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENvbnN0cnVjdFZh
cmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQorICAg
IGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIGdldCwgT3BDb25zdHJ1
Y3RWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9z
bG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1
Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwg
cHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNh
bGwpCiBlbmQpCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGMwNGZmZDZiMGJjM2YyNmUxOTJmMDZmMmJiZjc0YjA2
NGRjYjI3OWEuLjk4NzZlZjZlZjc0MmFjZWVkYWUyNjlhMmFiNDU0YzViNjJjZDUxNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5j
cHAKQEAgLTEyOSw2ICsxMjksOCBAQCB1c2luZyBXZWJDb25maWc6OmdfY29uZmlnOwogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FsbExpbmtJbmZvOworCiAvLz09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KIC8vIENMb29wUmVnaXN0ZXIgaXMgdGhlIHN0b3JhZ2UgZm9yIGFuIGVtdWxhdGVkIENQVSBy
ZWdpc3Rlci4KIC8vIEl0IGRlZmluZXMgdGhlIHBvbGljeSBvZiBob3cgaW50cyBzbWFsbGVyIHRo
YW4gaW50cHRyX3QgYXJlIHBhY2tlZCBpbnRvIHRoZQpAQCAtMTY2LDYgKzE2OCw3IEBAIGNsYXNz
IENMb29wUmVnaXN0ZXIgewogICAgIG9wZXJhdG9yIFByb3RvQ2FsbEZyYW1lKigpIHsgcmV0dXJu
IGJpdHdpc2VfY2FzdDxQcm90b0NhbGxGcmFtZSo+KG1fdmFsdWUpOyB9CiAgICAgb3BlcmF0b3Ig
UmVnaXN0ZXIqKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lzdGVyKj4obV92YWx1ZSk7IH0K
ICAgICBvcGVyYXRvciBWTSooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Vk0qPihtX3ZhbHVlKTsg
fQorICAgIG9wZXJhdG9yIENhbGxMaW5rSW5mbyooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2Fs
bExpbmtJbmZvKj4obV92YWx1ZSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnRwdHJfdCk+Pgog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcj0oVCB2YWx1ZSkgeyBtX3ZhbHVlID0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDkwM2U1
YTQ1YjFiNjY4MmZkMjg3OGI5Nzk0ODUyYWVmZDY3NTFkNWUuLjg2ZTNlZWY3YTlkMGRiMzk5YWE3
MjlkMjM4YWFkZjNjNTA1NDNmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMTgsNyArMTE4LDkg
QEAgbWFjcm8gY0NhbGwyVm9pZChmdW5jdGlvbikKIGVuZAogCiBtYWNybyBjQ2FsbDQoZnVuY3Rp
b24pCi0gICAgaWYgQVJNdjcgb3IgTUlQUworICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCisg
ICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMKKyAgICBl
bHNpZiBBUk12NyBvciBNSVBTCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYg
b3IgWDg2X1dJTgogICAgICAgICBwdXNoIGEzCkBAIC0yMTUxLDEyICsyMTUzLDEyIEBAIG1hY3Jv
IGFycmF5UHJvZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGJpbmVxIFRoaXNB
cmd1bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAg
ICBsb2FkaSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0
MAogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVpIHQw
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxl
Lm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRv
bmU6CiBlbmQKIAorIyB0NSBob2xkcyBtZXRhZGF0YS4KIG1hY3JvIGNhbGxIZWxwZXIob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotICAg
IG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXRDYWxsZWUodDApCiAKICAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JMYXN0U2VlbkNhbGxl
ZVdpdGhMaW5rQml0W3Q1XSwgdDIKQEAgLTIxODgsNyArMjE5MCw3IEBAIG1hY3JvIGNvbW1vbkNh
bGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJv
bG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVl
KGRzdCkKLSAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgICAgZ2V0KG1fY2Fs
bGVlLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGdldEFyZ3VtZW50U3RhcnQo
ZHN0KQpAQCAtMjE5OSw2ICsyMjAxLDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUs
IHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAg
ICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIGRzdCkKICAgICAgICAgZW5kCiAg
ICAgICAgIAorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRhCiAgICAgICAgIGNhbGxIZWxwZXIo
b3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJl
cGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVu
dFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVuZCkKIGVuZApAQCAtMjg2Niw2ICsyODY5
LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJhdG9yT3Bl
biwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QKICAgICBl
bmQKIAorICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29w
ZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3Blbiwg
bV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6
ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVu
dEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5n
ZXRCeUlkU3RhcnQ6CkBAIC0yOTI3LDYgKzI5MzEsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1ZSBzbG90IGFzIGEgdG1wIHNpbmNlIHdlIGFy
ZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4KKyAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAg
Y2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25l
eHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0
YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJ
bmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGE5MTMx
NGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJlMmY1OWMwYTgzNzAuLjMzYmJkZDI2ODdlZDI5ZmUxMjI3
MmMyNzJiMGZiZTBiMDZjYzlkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0xNDMsNyArMTQzLDkgQEAgZW5k
CiAjIFRoaXMgYmFyZWx5IHdvcmtzLiBhcmczIGFuZCBhcmc0IHNob3VsZCBwcm9iYWJseSBiZSBp
bW1lZGlhdGVzLgogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KHQ0LCAweGJhZDBjMDA0KQotICAgIGlmIFg4Nl82NCBvciBBUk02NCBvciBBUk02
NEUgb3IgUklTQ1Y2NAorICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCisgICAgICAgIGNsb29w
Q2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMKKyAgICBlbHNpZiBYODZfNjQg
b3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKICAgICAgICAgY2FsbCBmdW5jdGlvbgogICAg
IGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBPbiBXaW42NCwgcmN4LCByZHgsIHI4LCBhbmQg
cjkgYXJlIHVzZWQgZm9yIHBhc3NpbmcgdGhlIGZpcnN0IGZvdXIgcGFyYW1ldGVycy4KQEAgLTMw
OSwxMiArMzExLDEyIEBAIG1hY3JvIG1ha2VKYXZhU2NyaXB0Q2FsbChlbnRyeSwgcHJvdG9DYWxs
RnJhbWUsIHRlbXAxLCB0ZW1wMikKICAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgogICAgICAg
ICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAgZWxzaWYgQVJNNjRFCi0gICAgICAgIG1v
dmUgZW50cnksIHQzCi0gICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zm
c2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2Ny
aXB0KSAqIFB0clNpemUsIGEyCi0gICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWcgIyBKU0VudHJ5UHRyVGFnCisgICAgICAgIG1vdmUgZW50cnksIHQ1CisgICAgICAgIGxlYXAg
SlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNv
bnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGE3CisgICAgICAg
IGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCiAgICAgICAg
IGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUKICAgICAgICAgX3ZtRW50cnlU
b0phdmFTY3JpcHRUcmFtcG9saW5lOgotICAgICAgICBjYWxsIHQzLCBKU0VudHJ5UHRyVGFnCisg
ICAgICAgIGNhbGwgdDUsIEpTRW50cnlQdHJUYWcKICAgICBlbHNlCiAgICAgICAgIGNhbGwgZW50
cnksIEpTRW50cnlQdHJUYWcKICAgICBlbmQKQEAgLTIzNjAsNDEgKzIzNjIsNTggQEAgbWFjcm8g
YXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUpCiAgICAgbG9hZHEgVGhpc0Fy
Z3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGJ0cW56IHQwLCBub3RDZWxsTWFzaywg
LmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MwotICAgIHN0b3Jl
aSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2FycmF5UHJv
ZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3RvcmVpIHQzLCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0K
IC5kb25lOgogZW5kCiAKLW1hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJl
Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3Rh
cnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotICAgIG1ldGFkYXRhKHQ1LCB0MCkK
LSAgICBnZXRDYWxsZWUodDApCisjIHQ1IGhvbGRzIG1ldGFkYXRhLgorbWFjcm8gY2FsbEhlbHBl
cihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBk
c3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1v
cnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAg
IGdldENhbGxlZSh0MSkKIAotICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXRbdDVdLCB0Mgot
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQotICAgIGJxbmVxIHQzLCB0
MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkK
IAorICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lCiAgICAgZ2V0QXJndW1l
bnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAgICAgbmVncCB0MwogICAgIGFkZHAgY2Zy
LCB0MwotICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgIGdldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKHQyKQotICAgIHN0b3JlUEMoKQogICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3QzXQorCisgICAgIyBTdG9yZSBsb2NhdGlv
biBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3VyZSBzcC4KKyAgICBzdG9yZVBDKCkKKyAg
ICBzdG9yZXEgdDAsIENhbGxlZVt0M10KICAgICBtb3ZlIHQzLCBzcAotICAgIGlmIEFSTTY0RQot
ICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1f
bWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAgICBwcmVwYXJlQ2FsbCh0MCwgdDIsIHQz
LCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQwCi0gICAg
ICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZh
bHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQwLCBKU0VudHJ5
UHRyVGFnKQotICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0
NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8u
bV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQdHJUYWcpCi0gICAgZW5kCi0ub3BDYWxs
U2xvdzoKLSAgICBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0
LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBzbG93UGF0
aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAog
Ci1tYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwg
cHJlcGFyZUNhbGwsIHByb2xvZ3VlKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQxCisgICAgYnRweiB0
MSwgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQ
b2x5bW9ycGhpYworICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50YWcgcmV0
dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGluZSBz
ZXBhcmF0ZWx5LgorICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1v
cnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhp
YyB0aHVuayBzaWRlLgorICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXplLCBv
cGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0
Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgam1wIC5nb1BvbHltb3JwaGljCisKKy5ub3RQb2x5bW9y
cGhpYzoKKyAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93CisgICAgcHJlcGFyZUNhbGwodDIs
IHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0
aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1
LCB0MSwgSlNFbnRyeVB0clRhZykKKworLm9wQ2FsbFNsb3c6CisgICAgIyB0MCBpcyBjYWxsZWUK
KyAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFs
T2JqZWN0CisgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
LCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwg
dDUKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
Z2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJn
ZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVBy
b2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRh
ZykKK2VuZAorCittYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29k
ZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJl
cGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIApAQCAtMjQwMyw3ICsyNDIyLDcgQEAg
bWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHBy
ZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5kLCBtZXRhZGF0YSkKIAogICAgICAgICBt
YWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAg
ICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBn
ZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTI0MTQsNyArMjQzMyw4IEBAIG1hY3JvIGNvbW1vbkNh
bGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJv
bG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3Qp
CiAgICAgICAgIGVuZAogCi0gICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgs
IG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENv
dW50KQorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRhCisgICAgICAgIGNhbGxIZWxwZXIob3Bj
b2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFy
ZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBz
aXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0
QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKIApAQCAtMjUzMyw2ICsyNTUzLDg4IEBAIG9w
KGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAgam1wIF9s
bGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCiBlbmQpCiAKKyMgdDAgaXMgY2Fs
bGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmpl
Y3QKK21hY3JvIGxpbmtTbG93UGF0aEZvcihmdW5jdGlvbikKKyAgICBmdW5jdGlvblByb2xvZ3Vl
KCkKKyAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV92bVt0M10sIHQxCisgICAgc3RvcmVwIGNm
ciwgVk06OnRvcENhbGxGcmFtZVt0MV0KKyAgICBtb3ZlIHQyLCBhMgorICAgIG1vdmUgdDMsIGEx
CisgICAgbW92ZSBjZnIsIGEwCisgICAgY0NhbGw0KGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uRXBp
bG9ndWUoKQorICAgIHVudGFnUmV0dXJuQWRkcmVzcyBzcAorICAgIGJ0cHogcjEsIC5kb05vdFRy
YXNoCisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKQorICAgIHByZXBhcmVG
b3JUYWlsQ2FsbCh0MSwgdDIsIHQzLCB0NCkKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MgdDQKKy5k
b05vdFRyYXNoOgorICAgICMgRklYTUU6IFVzZSBpbnZva2VGb3JUYWlsQ2FsbD8KKyAgICBqbXAg
dDAsIEpTRW50cnlQdHJUYWcKK2VuZAorCisjIHQwIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlu
a0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CittYWNybyB2aXJ0dWFsVGh1
bmtGb3Iob2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2ssIGludGVybmFsRnVuY3Rpb25UcmFt
cG9saW5lLCBwcmVwYXJlQ2FsbCwgc2xvd0Nhc2UpCisgICAgYWRkaSAxLCBDYWxsTGlua0luZm86
Om1fc2xvd1BhdGhDb3VudFt0Ml0KKyAgICBtb3ZlIE5vdENlbGxNYXNrLCB0MQorICAgIGJ0cW56
IHQwLCB0MSwgc2xvd0Nhc2UKKyAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEpTRnVuY3Rp
b25UeXBlLCAubm90SlNGdW5jdGlvbgorICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fZXhlY3V0YWJs
ZU9yUmFyZURhdGFbdDBdLCB0MQorICAgIGJ0cHogdDEsIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCAuaXNFeGVjdXRhYmxlCisgICAgbG9hZHAgKEZ1bmN0aW9uUmFyZURhdGE6
Om1fZXhlY3V0YWJsZSAtIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKVt0MV0s
IHQxCisuaXNFeGVjdXRhYmxlOgorICAgIGxvYWRwIG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNo
ZWNrW3QxXSwgdDEKKyAgICBidHB6IHQxLCBzbG93Q2FzZQorLmNhbGxDb2RlOgorICAgIHByZXBh
cmVDYWxsKHQ1LCB0MiwgdDMsIHQ0KQorICAgIGptcCB0MSwgSlNFbnRyeVB0clRhZworLm5vdEpT
RnVuY3Rpb246CisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBJbnRlcm5hbEZ1bmN0aW9u
VHlwZSwgc2xvd0Nhc2UKKyAgICBwcmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkKKyAgICBqbXAg
aW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmUKK2VuZAorCisjIHQwIGlzIGNhbGxlZQorIyB0MiBp
cyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGlu
dF9saW5rX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xs
aW50X2xpbmtfY2FsbCkKK2VuZCkKKworIyB0MCBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJ
bmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVhbF9j
YWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVC
YXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5j
dGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkg
ZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92
aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgdDAgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5m
byoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1YWxfY29u
c3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFi
bGVCYXNlOjptX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgX2xsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAyLCB0
ZW1wMywgdGVtcDQpIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0
aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQorCisjIHQwIGlzIGNhbGxlZQorIyB0MiBp
cyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGlu
dF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVu
a0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBfbGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAy
LCB0ZW1wMywgdGVtcDQpCisgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0
ZW1wMSkKKyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRl
bXA0KQorICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgdGVtcDQKKyAgICBlbmQsIC5zbG93Q2Fz
ZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkK
K2VuZCkKIAogbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZnNldFRvRnVu
Y3Rpb24pCiAgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCkBAIC0zMDQ2LDggKzMxNDgsOCBAQCBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRlcmF0b3JPcGVuLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRzdAogICAgIGVuZAogCi0KLSAg
ICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jf
b3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3Is
IHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50LCBtZXRh
ZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1l
bnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxw
ZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGws
IE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGlj
UmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlk
Q2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlz
U3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0QnlJZFN0YXJ0Ogog
ICAgIG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNoKHZhbHVlKQpAQCAtMzEwNCw3ICszMjA2LDgg
QEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUg
c2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCi0g
ICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9y
X25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUs
IHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRh
ZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1l
bnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxw
ZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGws
IE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9y
UmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNS
ZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVD
aGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNT
dGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CiAg
ICAgbWFjcm8gc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCmluZGV4IGNhZDIxNWFlMzQzY2M4NmIzYTEw
YTVmYWY2NjI4NDI0YTljMDJmMjguLmM3MDE2NjRhYjJiZmZmMjA3ZDEyZTVlMjIyZjk2NGNmYTkx
MmEyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29w
LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCkBAIC01
NzIsNiArNTcyLDE0IEBAIGRlZiBjbG9vcEVtaXRDYWxsU2xvd1BhdGhWb2lkKG9wZXJhbmRzKQog
ICAgICRhc20ucHV0YyAiI3tvcGVyYW5kc1swXS5jTGFiZWx9KCN7b3BlcmFuZHNbMV0uY2xEdW1w
fSwgI3tvcGVyYW5kc1syXS5jbER1bXB9KTsiCiBlbmQKIAorZGVmIGNsb29wRW1pdENhbGxTbG93
UGF0aDQob3BlcmFuZHMpCisgICAgJGFzbS5wdXRjICJ7IgorICAgICRhc20ucHV0YyAiICAgIGNs
b29wU3RhY2suc2V0Q3VycmVudFN0YWNrUG9pbnRlcihzcC52cCgpKTsiCisgICAgJGFzbS5wdXRj
ICIgICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9ICN7b3BlcmFuZHNbMF0uY0xhYmVsfSgj
e29wZXJhbmRzWzFdLmNsRHVtcH0sICN7b3BlcmFuZHNbMl0uY2xEdW1wfSwgI3tvcGVyYW5kc1sz
XS5jbER1bXB9LCAje29wZXJhbmRzWzRdLmNsRHVtcH0pOyIKKyAgICAkYXNtLnB1dGMgIiAgICBk
ZWNvZGVSZXN1bHQocmVzdWx0LCB0MCwgdDEpOyIKKyAgICAkYXNtLnB1dGMgIn0iCitlbmQKKwog
Y2xhc3MgSW5zdHJ1Y3Rpb24KICAgICBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgY2FzZSBvcGNv
ZGUKQEAgLTExNzUsNiArMTE4Myw5IEBAIGRlZiBsb3dlckNfTE9PUAogICAgICAgICB3aGVuICJj
bG9vcENhbGxTbG93UGF0aFZvaWQiCiAgICAgICAgICAgICBjbG9vcEVtaXRDYWxsU2xvd1BhdGhW
b2lkKG9wZXJhbmRzKQogCisgICAgICAgIHdoZW4gImNsb29wQ2FsbFNsb3dQYXRoNCIKKyAgICAg
ICAgICAgIGNsb29wRW1pdENhbGxTbG93UGF0aDQob3BlcmFuZHMpCisKICAgICAgICAgIyBGb3Ig
ZGVidWdnaW5nIG9ubHkuIFRoaXMgaXMgdXNlZCB0byBpbnNlcnQgaW5zdHJ1bWVudGF0aW9uIGlu
dG8gdGhlCiAgICAgICAgICMgZ2VuZXJhdGVkIExMSW50QXNzZW1ibHkuaCBkdXJpbmcgbGxpbnQg
ZGV2ZWxvcG1lbnQgb25seS4gRG8gbm90IHVzZQogICAgICAgICAjIGZvciBwcm9kdWN0aW9uIGNv
ZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVj
dGlvbnMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMu
cmIKaW5kZXggOWNiYTVkNjhmM2NhZDMxY2ZhMmQ5NmVhNGM5YmJhOGRmZTlkYTliMi4uYzAwYjUx
NmIzM2VjNWFkMTI5ZDU2YzNmZmQyM2U5ZjVlYzIwNWY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgpAQCAtNDU5LDYgKzQ1OSw3IEBA
CiAgICAgICJjbG9vcENhbGxOYXRpdmUiLCAgICAgICAgICMgb3BlcmFuZHM6IGNhbGxlZQogICAg
ICAiY2xvb3BDYWxsU2xvd1BhdGgiLCAgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBjdXJy
ZW50RnJhbWUsIGN1cnJlbnRQQwogICAgICAiY2xvb3BDYWxsU2xvd1BhdGhWb2lkIiwgICAjIG9w
ZXJhbmRzOiBjYWxsVGFyZ2V0LCBjdXJyZW50RnJhbWUsIGN1cnJlbnRQQworICAgICAiY2xvb3BD
YWxsU2xvd1BhdGg0IiwgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBhMCwgYTEsIGEyLCBh
MwogCiAgICAgICMgRm9yIGRlYnVnZ2luZyBvbmx5OgogICAgICAjIFRha2VzIG5vIG9wZXJhbmRz
IGJ1dCBzaW1wbHkgZW1pdHMgd2hhdGV2ZXIgZm9sbG93cyBpbiAvLyBjb21tZW50cyBhcwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKaW5kZXggOTU4
MTA1ZDMyNjZkZGZmODViZTVkNzZkODdjZGU1Y2IzMzEzMTRjMy4uNDhmZDkyZjhiNmE4ZWQyOTQ0
YTcyNDhiMTU3ZDJhZjcyNzczYzViNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlQmFzZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIGlubGluZSBib29sIGlzQ2Fs
bChDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAKIGNsYXNzIEV4ZWN1dGFibGVCYXNlIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7CiAKIHByb3Rl
Y3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmgKaW5kZXggNWFhNTQyYTEyZjI3MWRiZGZmMDIwYjkxMGVkYmNjOWExMWM4MzY1Ni4u
MmU5YjUwNjYwNWNmYzZmMWM1ZWRkMjJkYWQ5NzNlNzNlYWE4ZjYxNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRh
YmxlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaAppbmRleCBmNmEwNWIwNjVlMzJkOGFlY2Q1Njdi
ZjZhYjc0YWFlNjM4OTk3Nzc4Li5lNDc3OTJiODc2NGU5MWQ1MDYxMGU0Y2RkYWUzMjMxYzE0NTll
MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCkBAIC0zMyw2ICszMyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHYoaml0Q2FnZVB0ciwgTm9QdHJUYWcpIFwKICAgICB2KHRh
aWxDYWxsSlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KHRhaWxDYWxsSlNFbnRyeVNs
b3dQYXRoUHRyVGFnLCBOb1B0clRhZykgXAorICAgIHYodGFpbENhbGxXaXRob3V0VW50YWdKU0Vu
dHJ5UHRyVGFnLCBOb1B0clRhZykgXAogICAgIHYobG9vcE9TUkVudHJ5LCBOb1B0clRhZykgXAog
ICAgIHYoZW50cnlPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KHdhc21PU1JFbnRyeSwgTm9Q
dHJUYWcpIFwKQEAgLTQ2LDIwICs0NywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBK
U0NfSlNfR0FURV9PUENPREVTKHYpIFwKICAgICB2KG9wX2NhbGwsIEpTRW50cnlQdHJUYWcpIFwK
LSAgICB2KG9wX3RhaWxfY2FsbCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY29uc3RydWN0
LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9pdGVyYXRvcl9uZXh0LCBKU0VudHJ5UHRyVGFn
KSBcCiAgICAgdihvcF9pdGVyYXRvcl9vcGVuLCBKU0VudHJ5UHRyVGFnKSBcCi0gICAgdihvcF9j
YWxsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX3Ns
b3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3Nsb3csIEpT
RW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50
cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNF
bnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHNfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jb25zdHJ1Y3RfdmFy
YXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfdmFyYXJn
cywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3MsIEpTRW50cnlQ
dHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3Bf
dGFpbF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF9zbG93
LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9uZXh0X3Nsb3csIEpTRW50cnlQ
dHJUYWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRyeVB0clRhZykgXAor
ICAgIHYob3BfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3Rh
aWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50c19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25z
dHJ1Y3RfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9jYWxsX2V2YWxf
c2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9pdGVyYXRvcl9uZXh0X3Ns
b3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3Jfb3Blbl9zbG93
LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDljZjVmZWEwMTk4NDlkYjZlNjYw
OTEwYmI5NDUxY2QyN2MyNWZiYzUuLmVjNDgyMmY1YTkwM2Q0ZmI4NWNiNDg0MWE0Y2Q2OGYwYzEw
YmZiZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEzOCw2ICsxMzgs
NyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJKU1dpdGhTY29w
ZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50RXhjZXB0aW9ucy5o
IgogI2luY2x1ZGUgIk1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmgiCiAjaW5jbHVkZSAiTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgi
CkBAIC05MTAsNiArOTExLDQxIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kCiAgICAgcmV0dXJu
IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2ludGVybmFsX2Z1bmN0aW9u
X2NvbnN0cnVjdF90cmFtcG9saW5lKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IFZNOjpnZXRDVElMaW5rQ2FsbCgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBp
ZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiBnZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisjZW5k
aWYKKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfbGlu
a19jYWxsX3RyYW1wb2xpbmUpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0
clRhZz4gVk06OmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpCit7CisjaWYg
RU5BQkxFKEpJVCkKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiBn
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyNlbmRpZgorICAgIHJldHVybiBMTEludDo6
Y2FsbFRvVGhyb3coKnRoaXMpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Cit9
CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gVk06OmdldENU
SVZpcnR1YWxDYWxsKENhbGxNb2RlIGNhbGxNb2RlKQoreworI2lmIEVOQUJMRShKSVQpCisgICAg
aWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKCp0
aGlzLCBjYWxsTW9kZSk7CisjZW5kaWYKKyAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7CisgICAgY2Fz
ZSBDYWxsTW9kZTo6UmVndWxhcjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSk7CisgICAg
Y2FzZSBDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lKTsK
KyAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0
Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJh
bXBvbGluZSk7CisgICAgfQorICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworfQorCiBWTTo6Q2xp
ZW50RGF0YTo6fkNsaWVudERhdGEoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
aW5kZXggOWVmMzgyYzYwZWU4MzRmY2JiMWQ5MDgxYzc4MThmZDc4NjdmYTQwOC4uM2FiZjcxMWE2
NTUyYmU0YjMxYWZlNDdlMDU5ZjMzMWUwODk5MTkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCkBAIC0xMDYsNiArMTA2LDggQEAgY2xhc3MgQmFzaWNCbG9ja0xvY2F0aW9uOwogY2xh
c3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsK
IGNsYXNzIENhbGxGcmFtZTsKK2NsYXNzIENhbGxMaW5rSW5mbzsKK2VudW0gY2xhc3MgQ2FsbE1v
ZGU7CiBzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBDb2RlQ2FjaGU7CkBAIC05MDIsNiArOTA0LDkgQEAgY2xhc3MgVk0gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+
IHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRCb3VuZEZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0
aW9uLCBib29sIGNhbkNvbnN0cnVjdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+
IGdldENUSUxpbmtDYWxsKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IGdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gZ2V0Q1RJVmlydHVhbENhbGwoQ2Fs
bE1vZGUpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBleGNlcHRpb25PZmZzZXQoKQogICAgIHsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
YjQzZmQ3NTllYjM3NTkwNTQ3YTM4ZGU4ZWMyMjE2YzgwMmIwMmFiNi4uNGMzMzg2OWRjZWEzNzQz
MjYxMTE4YjlhYTY0NTBlYjJhMDkyNjVmZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMS0xMS0xMSAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFVzZSBDYWxs
TGlua0luZm8gaW4gTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1v
Zi1wcm94eS5qczoKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1l
LXNlY3Rpb24uanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci52
bS5pc1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9maWxlci13
YXNtLmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudm0uaXNX
YXNtU3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxp
bmdQcm9maWxlci5qczoKKyAgICAgICAgKGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2UpOgorICAgICAg
ICAocnVuVGVzdCk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5q
czoKKwogMjAyMS0xMS0xMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbmxpbmUgUmVnRXhwLnRlc3QgSklUIGNvZGUgaW4gREZHIGFuZCBGVEwKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2Fy
ZS1vZi1wcm94eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10
by1iZS1hd2FyZS1vZi1wcm94eS5qcwppbmRleCA1MGNhZWVkMTE0ODQyOWZkMWI1Y2UwYjBmZWFl
NmJkZGRlNjcxMGI4Li45NGRhYjQ2ZDJkNzE4NGYzNWQ0M2UyZGI0YTJkZDU2NDE5OGJlZmY1IDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUt
YXdhcmUtb2YtcHJveHkuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRs
LW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bkRl
ZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUgLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwg
Ii0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIsICIt
LXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVB
ZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcD0x
MDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xkRm9yRlRM
T3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29u
PTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQorLy9AIHJ1
bkRlZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUiLCAiLS11c2VDb25jdXJyZW50SklUPWZh
bHNlIiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0x
MCIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xk
Rm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1p
emVTb29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQog
CiBmdW5jdGlvbiBtYWluKCkgewogICAgIGxldCB2MTYyOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9z
dHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMgYi9KU1Rlc3RzL3N0
cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwppbmRleCA2ODlhMDA1
YWI1NTVhMWZjNjAxYTU0ZTRlYmY5NGU5OWE2NjhmNzdlLi41YzIyMGZkNzZjZGM1YzQwZTU5Y2M2
NmU1NzM0MmM3MmQ4YzdmM2FhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1w
cm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGlu
Zy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwpAQCAtNjksNSArNjksNSBAQAogICAgIHZh
ciB3YXNtRW50cnkgPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmV4cG9y
dHMuX3BhcnJvdCgxKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9zaWxseSIs
ICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0
aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0
aW9uW19wYXJyb3RdIiwgIndhc20tc3R1YiIsICIyNCIsICJ3YXNtRW50cnkiXSk7CisgICAgcnVu
VGVzdCh3YXNtRW50cnksIFsiX3NpbGx5IiwgIih1bmtub3duKSIsICI8Pz4ud2FzbS1mdW5jdGlv
bltfZWdnc10iLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXSIsICI8Pz4ud2FzbS1mdW5jdGlv
bltfc3BhbV0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF0iLCAiKHVua25vd24pIiwgIndh
c21FbnRyeSJdKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2Zp
bGVyLXdhc20uanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCmlu
ZGV4IGNkMjFmMjg4YzE0OGE0Yjc0MDViZjg2OGRlZjliNTQ1NzM0MDUwNDUuLjA2ZGYwMTI0OTU5
NjllMjg0MjE4Nzc4NjkwMTM1YmYwOTAxMGVjNmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNz
L3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmct
cHJvZmlsZXItd2FzbS5qcwpAQCAtOCw1ICs4LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5ID0gZnVu
Y3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmxvb3AoMTAwMDAwMDAp
OwogICAgIH07Ci0gICAgcnVuVGVzdCh3YXNtRW50cnksIFsiPD8+Lndhc20tZnVuY3Rpb25bMF0i
LCAid2FzbS1zdHViIiwgIjAiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2FzbUVudHJ5
LCBbIjw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnkiXSk7CiB9
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1By
b2ZpbGVyLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9m
aWxlci5qcwppbmRleCA5NjQyZGRjN2MxZTZmMDZlM2IxMzI3OWMwZTRhMDI1YjU0ZGNhYmYxLi4x
YjkyZTk0ODU0YWY2M2Y2N2QwOGY1NDg4N2M1MjE3OTE0ZWUyYmY1IDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCisrKyBiL0pT
VGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMKQEAgLTcw
LDExICs3MCwxMyBAQCBmdW5jdGlvbiBjaGVjayhub2RlKSB7CiAgICAgCiAgICAgbGV0IG5vZGUg
PSB0cmVlOwogICAgIGZvciAobGV0IGkgPSBzdGFja1RyYWNlLmxlbmd0aDsgaS0tOyApIHsKKyAg
ICAgICAgbGV0IHByZXYgPSBub2RlOwogICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJlbltzdGFj
a1RyYWNlW2ldXTsKICAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICBpZiAoVkVSQk9T
RSkgewogICAgICAgICAgICAgICAgIHByaW50KCJmYWlsaW5nIG9uICIgKyBpICsgIiA6ICIgKyBz
dGFja1RyYWNlW2ldKTsKICAgICAgICAgICAgICAgICBwcmludChKU09OLnN0cmluZ2lmeSh0cmVl
KSk7CisgICAgICAgICAgICAgICAgcHJpbnQoT2JqZWN0LmtleXMocHJldi5jaGlsZHJlbikpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0x
MDgsNyArMTEwLDcgQEAgZnVuY3Rpb24gcnVuVGVzdChmdW5jLCBzdGFja1RyYWNlT3JTdHJpbmcp
IHsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCB0aW1l
VG9GYWlsKTsKICAgICBwcmludChKU09OLnN0cmluZ2lmeShyb290LCB1bmRlZmluZWQsIDIpKTsK
LSAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2UsIHRydWUsIHRydWUp
OworICAgIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwgc3RhY2tUcmFjZU9yU3RyaW5nLCB0
cnVlLCB0cnVlKTsKICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGFjayB0cmFjZSIpOwogfQog
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMg
Yi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKaW5kZXggNjgwNWU2
ODlmNWM4NzllMmNhNTA5Yzg4ZDNlN2IzNzZkZTA5ZmFhYS4uMzNjODZiZjFjZGU5YThkYWIxMThl
MGU0Y2IwYmFjZDU5Yjc0OTFlOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRl
c3RzL25hbWVTZWN0aW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1l
U2VjdGlvbi5qcwpAQCAtNjksNCArNjksNCBAQAogYXNzZXJ0LmVxKHN0YWNrdHJhY2VbM10sICI8
Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dQFt3YXNtIGNvZGVdIik7CiBhc3NlcnQuZXEoc3RhY2t0
cmFjZVs0XSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0
LmVxKHN0YWNrdHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XUBbd2FzbSBjb2Rl
XSIpOwotYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW3dhc20gY29kZV0iKTsg
Ly8gd2FzbSBlbnRyeQorYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW25hdGl2
ZSBjb2RlXSIpOyAvLyB3YXNtIGVudHJ5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444032</attachid>
            <date>2021-11-11 18:09:51 -0800</date>
            <delta_ts>2021-11-11 19:20:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111180950.patch</filename>
            <type>text/plain</type>
            <size>406619</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDVkZDgyYWRiMWUzNWI4NmIyZTdmMzk1ZTI4ZTMzNmE5YTk0MWE5Li5jZTY0ZjkyMWE1OWNmZTNk
ZWI5N2EyOWQxNWVjN2JkODlmNzIxNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTUgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oOgor
ICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwOgor
ICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpkdW1wV2l0aE5hbWUgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oOgorICAgICAgICAoSlNDOjpjYWxsTGlua0luZm9Gb3IpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJT
dHViKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZSk6
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnZpc2l0V2Vhayk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoSW1wbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9TdHViKToKKyAgICAgICAgKiBieXRl
Y29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjppc0xpbmtl
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c3R1YiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZvckVhY2hEZXBlbmRlbnRDZWxsIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRTbG93U3R1Yik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Y2xlYXJTbG93U3R1Yik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGlu
ZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpq
ZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludE9y
QmFzZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hM
TEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAg
ICAgKiBieXRlY29kZS9SZXBhdGNoLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAuCisgICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAg
ICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU93bmVy
KToKKyAgICAgICAgKEpTQzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OnJl
dmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6anNU
b1dhc21JQ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAg
IChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2gu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oLgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpo
YW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjp2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJl
ZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFi
aWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwp
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8pOgorICAgICAgICAoSlND
OjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpK
SVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6
CisgICAgICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
dmlydHVhbEZvcldpdGhGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zvcik6CisgICAgICAgIChK
U0M6OnZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0
L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkxMSW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF9saW5rX2NhbGwpOgorICAgICAg
ICAoSlNDOjpMTEludDo6bGxpbnRfdmlydHVhbF9jYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAg
ICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAoSlNDOjpMTEludDo6TExJ
TlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6Y29tbW9uQ2FsbEV2YWwp
OgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOiBEZWxldGVkLgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmspOgorICAgICAgICAoSlND
OjpMTEludDo6Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVy
bkxvY2F0aW9uVGh1bmspOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmg6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wUmVnaXN0ZXI6Om9wZXJhdG9y
IENhbGxMaW5rSW5mbyopOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAg
ICAgKiBvZmZsaW5lYXNtL2Nsb29wLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rp
b25zLnJiOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2F0ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJTGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVZpcnR1YWxDYWxsKToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmg6CisKIDIwMjEtMTEtMTEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBWTTo6d3JpdGVCYXJyaWVyKCkgYW5kIFZNOjptdXRhdG9yRmVuY2Uo
KS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAxMmM0YTVjODI3N2NhNzcw
MWQ4NDllZmY2NDY3YmQ4ODc5NTkwMDA4Li5jYzQxZmMwM2QwYTA4NmNjNzdjZTRlN2QwMDJkZTE3
Yzg2NDMyMDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC02NTksNyAr
NjU5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAogICAgIGJ5dGVj
b2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmgKLSAg
ICBieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCiAgICAgYnl0ZWNvZGUvTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKICAgICBieXRlY29kZS9MYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg5YzljMTc0YmIyMjNiMzZjMzk2YmFmYzQ2ZmUx
MTY2YTY4MjBmNDMuLjMxNWI0ZjBmOTZlNDE3MzdmMzdiMDExOWY3MGM2YjY5OTcxNDg4YTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDcsNyArMTQ3LDYgQEAKIAkJMEYwQ0FF
RkMxRUM0REE2QjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclByaXZhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENBRUZBMUVDNERBNjIwMDk3
MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0FFRkYxRUM0REE4ODAwOTcwRDEyIC8qIEhl
YXBGaW5hbGl6ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxs
YmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQw
MDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJ
bnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTBGMUEz
MUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0
b20uaCAqLzsgfTsKIAkJMEYxMkRFMTAxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enou
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTJERTBF
MTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8q
IERlZmVyR0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE4Niw3ICsxODUsNiBAQAogCQkwRjI0
RTU0NDE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1M0YxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUklu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3
IC8qIEpJVE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0
ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3
IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi87IH07CiAJCTBGMjRF
NTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRCMTdFRTI3NDkw
MEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU1NjE3RjBCNzFDMDBBQkIyMTcg
LyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1l
U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCAqLzsgfTsKQEAgLTE4OTIsNiArMTg5MCw3IEBACiAJCUUzM0Y1MDg3MUI4
NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzRjUwODYxQjg0NDlF
RjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJ
CUUzNDAwRUMxMjJBMUNDN0IwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzQwMEVDMDIy
QTFDQzc4MDA5REVENTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5lcy5oICovOyB9OwogCQlF
MzQ5QTc4MTI0OTFGMTYxMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNDlBNzgwMjQ5MUYxNUEwMDFC
QTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUUzNEQxQUU1MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNo
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJbmxpbmVzLmggKi87IH07CiAJCUUz
NEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQYXJzZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEU2NTczMjA2NjhFOEQwMEZCODFBQyAvKiBQ
YXJzZUhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRFREJGNjFEQjVGRkMxMDBE
Qzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTM0RjkzMEUyMzIyRDg4MjAwMkI4REI0IC8qIEpTR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRGOTMw
QzIzMjJEODgxMDAyQjhEQjQgLyogSlNHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkwNiw2ICsxOTA1LDcgQEAKIAkJRTM1QTBC
OUQyMjBBRDg3QTAwQUM0NDc0IC8qIEV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1QTBCOUMyMjBBRDg3QTAwQUM0
NDc0IC8qIEV4ZWN1dGFibGVCYXNlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNUNBMTU0MURCQzNBNUMwMEY4MzUxNiAvKiBET01K
SVRIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzNUNBMTUyMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVDQTE1NjFEQkMz
QTVGMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9N
SklUQWJzdHJhY3RIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRTM1RTM2M0UyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUUzNjNDMjczREM4QzYw
MERCMjRDQyAvKiBSZXBhdGNoLmggKi87IH07CiAJCUUzNUU4OUZEMjVDNTBGODcwMDcxRUUxRSAv
KiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzVFODlGQjI1QzUwRjg2MDA3MUVFMUUgLyogQmlnSW50NjRBcnJheS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNUU4OUZFMjVD
NTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTg5RkMyNUM1MEY4NzAwNzFFRTFFIC8qIEJpZ1Vp
bnQ2NEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTM2MzdFRTkyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNjM3RUU3MjM2RTU2
QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzOTEsNyArMjM5MSw2IEBACiAJCTBGMENBRUZF
MUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZpbmFsaXplckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJ
bmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5k
ZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0lu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0Qy
IC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDdXN0
b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRnV6ei5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNl
cHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkZ1
enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NTQsOCArMjQ1Myw2IEBACiAJ
CTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRPcGVyYXRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAv
KiBUZW1wUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVt
cFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjRFNTQ5MTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjI0
RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRF
NTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTUzMTdGMEI3MUMwMEFCQjIxNyAvKiBJ
bmxpbmVDYWxsRnJhbWVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5saW5lQ2FsbEZyYW1lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMDcsNiArNTIwNCw3IEBACiAJCUUzNDAwRUMwMjJBMUND
NzgwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTM0OUE3N0YyNDkxRjE1OTAwMUJBMzM2IC8qIERGR0NvZGVPcmlnaW5Qb29sLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0NvZGVPcmlnaW5Qb29sLmNwcDsgcGF0aCA9IGRmZy9ERkdDb2Rl
T3JpZ2luUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNDlBNzgwMjQ5
MUYxNUEwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdD
b2RlT3JpZ2luUG9vbC5oOyBwYXRoID0gZGZnL0RGR0NvZGVPcmlnaW5Qb29sLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNEQxQUU0MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNo
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRFNjU3MzIwNjY4RThEMDBGQjgx
QUMgLyogUGFyc2VIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNl
SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRFNjU3NDIwNjY4RThFMDBG
QjgxQUMgLyogUGFyc2VIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhcnNlSGFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEVEQkY2
MURCNUZGQzEwMERDODdBNSAvKiBGcmFtZVRyYWNlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRnJhbWVUcmFjZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01MjI5LDYgKzUyMjcsOCBAQAogCQlFMzVDQTE1MDFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklU
QWJzdHJhY3RIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVEFi
c3RyYWN0SGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVDQTE1MTFEQkMz
QTU2MDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERPTUpJVEhlYXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzNUNBMTUyMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSklUSGVhcFJhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBh
dGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1RTM2M0QyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0
Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUU4OUZCMjVDNTBGODYwMDcxRUUxRSAv
KiBCaWdJbnQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZ0lu
dDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1RTg5RkMyNUM1MEY4
NzAwNzFFRTFFIC8qIEJpZ1VpbnQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJpZ1VpbnQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
NjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtUaW1lQ29uc3RhbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTY0NTgsOCArNjQ1OCw2IEBACiAJCQkJNjIzQTM3RUIxQjg3QTdCRDAw
NzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8sCiAJCQkJMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMy
IC8qIFJlZ2lzdGVyU2V0LmNwcCAqLywKIAkJCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyog
UmVnaXN0ZXJTZXQuaCAqLywKLQkJCQkwRjI0RTU0OTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRj
aC5jcHAgKi8sCi0JCQkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLywK
IAkJCQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcCAqLywKIAkJCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFy
YXJnc0ZyYW1lLmNwcCAqLywKQEAgLTg4MTUsNyArODgxMyw2IEBACiAJCQkJMEZCNTQ2NzYxNEY1
OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi8sCiAJCQkJRTM2MzdF
RTgyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuY3BwICovLAogCQkJCUUzNjM3
RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggKi8sCi0JCQkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8sCiAJCQkJNTNGQTJB
RTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovLAogCQkJCTE0Rjc5
RjZFMjE2RUFENTAwMDA0NkQzOSAvKiBNZXRhZGF0YVRhYmxlLmNwcCAqLywKQEAgLTg4NjIsNiAr
ODg1OSw5IEBACiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVkU3RhdHVz
ZXMuaCAqLywKIAkJCQkwRkY2MEFCRjE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFj
ZS5jcHAgKi8sCiAJCQkJMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3Bh
Y2UuaCAqLywKKwkJCQlFMzVFMzYzRDI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5jcHAgKi8s
CisJCQkJRTM1RTM2M0MyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guaCAqLywKKwkJCQlFMzRE
MUFFNDI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCAqLywKIAkJCQk4NjVEQTBD
OTI1Qjg5NjJBMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcCAqLywKIAkJCQk4
NjVEQTBDNzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmggKi8sCiAJ
CQkJODY1REEwQzYyNUI4OTU5RTAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFZhcmlhbnQuY3Bw
ICovLApAQCAtOTc0Nyw2ICs5NzQ3LDcgQEAKIAkJCQlGRUEwODYyMTE4MkI3QTA0MDBGNkQ4NTEg
LyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERERTE5ODMy
RDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzZE
NEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFOUZB
N0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZlckdDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZDNzEyREYxN0NEODc3QzAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVy
cmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0NjM4NzUxRTcwRERFQzAwRjEy
QUMxIC8qIERlZmVycmVkV29ya1RpbWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzIzLDggKzEw
MzI0LDYgQEAKIAkJCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyogSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUREN0Y1MjNDMUJCQjUwMDkwNUYxMyAvKiBK
U0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVCNzBDRkRFMURCNjlFNjYwMEVD
MjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTA1MjYsNyArMTA1
MjUsNiBAQAogCQkJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJh
bFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBERTlBMDkxQkU3RDY5RTAwNUQ4OUQ5IC8q
IExMSW50QXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMEZDNDVBMTRCRDE1RjUwMEI4
MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDcyNiw3ICsxMDcyNCw4IEBACiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJl
bW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgy
RTY5IC8qIFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTky
RjU2QjcxRTRFODRCMjAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBp
biBIZWFkZXJzICovLAotCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFMzVFMzYzRTI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTM0RDFBRTUyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTlGM0ZCOTI2MTNDNzg5MDA2OUU4OUYgLyog
UmVzb3VyY2VFeGhhdXN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBFOEM2RDRB
MDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQjY0MkYyNUQ2
RkI0RDAwMUFEREI0IC8qIFJvb3RNYXJrUmVhc29uLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNzg0
LDcgKzEwNzgzLDYgQEAKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJv
dmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUz
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAotCQkJ
CUZFOUZBN0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZlckdDSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBT
cGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0
MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTA1
Miw2ICsxMTA1MCw4IEBACiAJCQkJRTMyODJCQkIxRkU5MzBBRjAwRURBRjcxIC8qIFlhcnJFcnJv
ckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZ
YXJyRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2NzA0Qjg3MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTNCQzQzRjI2RDAxM0E2
MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNGMEZD
OTUyNkExMUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0NvbnRleHRIb2xkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4u
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDc5M2Y0NmY3
YmM1OGU1MDhjZGE2Y2I5MDE1YWEwOTJlOGM5ODYwZDkuLmI2OTU1NTdhZmU2MGYxNDc1MTAwOWIx
YjUwNWY1NTEzMzQwNWI5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTI3Myw2
ICsyNzMsNyBAQCBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKIGJ5dGVjb2RlL1B1dEJ5VmFyaWFu
dC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRlY29kZS9SZWR1Y2VXaGl0
ZXNwYWNlLmNwcAorYnl0ZWNvZGUvUmVwYXRjaC5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFu
ZFN0YXR1cy5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlhbnQuY3BwCiBieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTY3Niw3ICs2NzcsNiBAQCBqaXQvUmVnLmNwcAogaml0
L1JlZ2lzdGVyQXRPZmZzZXQuY3BwCiBqaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCiBqaXQv
UmVnaXN0ZXJTZXQuY3BwCi1qaXQvUmVwYXRjaC5jcHAKIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuY3BwCiBqaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCiBqaXQvU2xvd1BhdGhDYWxsLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKaW5k
ZXggYTZjYTVjODFjNTEwOTVmODE5OGQ5YjgyZGIxNGE1ODFhMjVjZTYwOS4uMDc1MDRiYTA0ZTU5
YjZkMWRjYTIzNTg4YmVmYjU0ZGYxOTE4NWEyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKIAotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0KIG5h
bWVzcGFjZSBKU0MgewogCiBlbnVtIGNsYXNzIE5lYXJDYWxsTW9kZSA6IHVpbnQ4X3QgeyBSZWd1
bGFyLCBUYWlsIH07CkBAIC0yNjksNSArMjY3LDMgQEAgaW5saW5lIENvZGVMb2NhdGlvbkNvbnZl
cnRpYmxlTG9hZDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252ZXJ0aWIK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKaW5kZXgg
MDYyNDBlODc0MzYzODczYjlkZjJjYzlmMzdmMzgyOTE4ZmU3ZTI5ZS4uZmY5MzA1ODlkYjI3MTE4
MGQwOTllMjM1NmM5OTdkYzU5YjM1NmU3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRGlz
YXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIK
LSNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAKICNpZiBPUyhMSU5VWCkKICNpbmNs
dWRlICJQZXJmTG9nLmgiCkBAIC00MywyOSArNDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIHNpemVf
dCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNpemVzW0xpbmtCdWZmZXI6
Om51bWJlck9mUHJvZmlsZXNdOwogc2l6ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0
aXZlTGlua2VkQ291bnRzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmlsZXNdOwogCi1ib29sIHNo
b3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAo
Y29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUo
KSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKTsKLX0KLQotYm9vbCBzaG91
bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAg
aWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2Rl
OjpCQlFNb2RlOgotICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEJCUURpc2Fzc2VtYmx5KCk7
Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGU6Ci0gICAgY2FzZSBXYXNt
OjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZToKLSAgICAgICAgcmV0dXJuIE9w
dGlvbnM6OmR1bXBPTUdEaXNhc3NlbWJseSgpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIExpbmtCdWZmZXI6OkNvZGVSZWY8TGlu
a0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5
SW1wbCgpCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCA1YTNmMDBmMDVjNjg1ODI5NTc3MjY2
N2ZjMjIzNTY3ZjY4ZTkyYjg3Li4yODVkZjBkMWExODA5ZGIyMGI0Nzk0Y2QzMTIwNTllZmM2ZWUw
MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApA
QCAtNDMsMTIgKzQzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSBXYXNtIHsK
LWVudW0gY2xhc3MgQ29tcGlsYXRpb25Nb2RlIDogdWludDhfdDsKLX0KLQotY2xhc3MgQ29kZUJs
b2NrOwotCiAvLyBMaW5rQnVmZmVyOgogLy8KIC8vIFRoaXMgY2xhc3MgYXNzaXN0cyBpbiBsaW5r
aW5nIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBtYWNybyBhc3NlbWJsZXIsIG9uY2UgY29kZSBnZW5l
cmF0aW9uCkBAIC00NDYsOCArNDQwLDYgQEAgY2xhc3MgTGlua0J1ZmZlciB7CiAgICAgICAgIDog
KGxpbmtCdWZmZXJSZWZlcmVuY2UpLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseTxyZXN1
bHRQdHJUYWc+KCkpCiAjZW5kaWYKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29k
ZUJsb2NrKik7Ci0KICNkZWZpbmUgRklOQUxJWkVfQ09ERV9GT1IoY29kZUJsb2NrLCBsaW5rQnVm
ZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIC4uLikgIFwKICAgICBGSU5BTElaRV9DT0RFX0lG
KChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY29kZUJsb2NrKSB8fCBPcHRpb25zOjphc3luY0Rp
c2Fzc2VtYmx5KCkpLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIF9fVkFfQVJH
U19fKQogCkBAIC00NzYsOCArNDY4LDYgQEAgYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
Q29kZUJsb2NrKik7CiAjZGVmaW5lIEZJTkFMSVpFX1JFR0VYUF9DT0RFKGxpbmtCdWZmZXJSZWZl
cmVuY2UsIHJlc3VsdFB0clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKSAgXAogICAg
IEZJTkFMSVpFX0NPREVfSUYoSlNDOjpPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgSlND
OjpPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wUmVnRXhwRGlzYXNz
ZW1ibHkoKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBkYXRhTG9nRkFyZ3Vt
ZW50c0ZvckhlYWRpbmcpCiAKLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNv
bXBpbGF0aW9uTW9kZSk7Ci0KICNkZWZpbmUgRklOQUxJWkVfV0FTTV9DT0RFKGxpbmtCdWZmZXJS
ZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgLi4uKSAgXAogICAgIEZJTkFMSVpFX0NPREVfSUYoKEpT
Qzo6T3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJl
ZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCmlu
ZGV4IDVkNTY3NDFlZmU2NjQyNmVmY2EyMDUyYWMyNTA5ODMyMjAyMzc3ZDAuLjcwZGIwZDAzOWVh
N2VkNjExYzhhNmU1ZDgwODkxM2YwYWQ1YmQ1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKQEAgLTI2
LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJEaXNhc3Nl
bWJsZXIuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNDUHRyVGFnLmgiCisj
aW5jbHVkZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYzLDUgKzY2LDI4IEBAIENTdHJpbmcg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPERpc2Fzc2VtYmx5CiAgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAorYm9vbCBz
aG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYg
KGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7Cit9CisKK2Jvb2wgc2hv
dWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9kZSBtb2RlKQoreworICAg
IGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9k
ZTo6QkJRTW9kZToKKyAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgp
OworICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlOgorICAgIGNhc2UgV2Fz
bTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU6CisgICAgICAgIHJldHVybiBP
cHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHkoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgKaW5kZXggOTI1NTkxOGIxYmExNzVhMWY0OWRjMzAyNWVjNmZjYTg4OTM5ZDM2
NC4uMWVhMzI0NTQxNWFiMDhhNDVjN2QzZTU5NTk2MGM0NDViMTlmZjc1MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCkBAIC01NCw2ICs1NCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdh
c20geworZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgOiB1aW50OF90OworfSAvLyBuYW1lc3Bh
Y2UgV2FzbQorCitjbGFzcyBDb2RlQmxvY2s7CiB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjsKIAogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwpAQCAtMzc3LDcg
KzM4MiwxMCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgOiBwcml2YXRlIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ckJhc2UgewogCiAgICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciog
bmFtZSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRhYmxlQWRkcmVzcygpLCBkYXRhTG9j
YXRpb24oKSwgbmFtZSwgb3V0KTsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShudWxscHRyLCBudWxscHRy
LCBuYW1lLCBvdXQpOwogICAgIH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdCB7IGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIsIG91dCk7IH0KQEAgLTUzNyw2ICs1NDUsOSBA
QCBpbmxpbmUgRnVuY3Rpb25QdHI8dGFnPjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPHRhZz4gcHRyKQogewogfQogCitib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2Rl
QmxvY2sqKTsKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9u
TW9kZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IGJlMmU4Yzgx
MWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIuLjAxMzg2MGI2NmMyYjE5YThjYmI1OTUz
YTVkMGU0NGRkMjc3ZmJkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYgpAQCAtMjYsNiArMjYsNyBAQAogCiAgICAgOkJhc2ljQmxvY2tMb2Nh
dGlvbiwKICAgICA6Qm91bmRMYWJlbCwKKyAgICA6Q2FsbExpbmtJbmZvLAogICAgIDpEZWJ1Z0hv
b2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lvbiwKQEAg
LTQ0LDcgKzQ1LDYgQEAKICAgICA6SlNTY29wZSwKICAgICA6SlNUeXBlLAogICAgIDpKU1ZhbHVl
LAotICAgIDpMTEludENhbGxMaW5rSW5mbywKICAgICA6UmVzdWx0VHlwZSwKICAgICA6T3BlcmFu
ZFR5cGVzLAogICAgIDpQcml2YXRlRmllbGRQdXRLaW5kLApAQCAtODQwLDcgKzg0MCw4IEBACiAg
ICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAg
Y2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBD
YWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NTIsNyArODUzLDggQEAKICAg
ICAgICAgYXJndjogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBj
YWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENh
bGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg2NSw3ICs4NjcsOCBAQAogICAg
ICAgICBlY21hTW9kZTogRUNNQU1vZGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAg
ICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86
IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg3OSw2ICs4ODIsNyBAQAog
ICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAg
ICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTkw
MCw2ICs5MDQsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CiAgICAgfSwKQEAgLTkyMSw2ICs5MjYsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0lu
Zm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUsCiAgICAgfQpAQCAtOTMzLDcgKzkzOSw4IEBACiAgICAgICAgIGFyZ3Y6
IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZv
OiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8s
CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBW
YWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC05NDcsNiArOTU0LDcgQEAKICAgICAgICAgZmlyc3RW
YXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5m
bzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC0xMjQ5LDcgKzEyNTcsOCBA
QAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGl0ZXJhdGlvbk1ldGFkYXRhOiBJdGVyYXRpb25N
b2RlTWV0YWRhdGEsCiAgICAgICAgIGl0ZXJhYmxlUHJvZmlsZTogVmFsdWVQcm9maWxlLAotICAg
ICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0lu
Zm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAg
ICAgICAgIGl0ZXJhdG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgICAgICBtb2RlTWV0YWRh
dGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIG5leHRQcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCkBAIC0xMjcyLDcgKzEyODEsOCBAQAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGl0ZXJh
dGlvbk1ldGFkYXRhOiBJdGVyYXRpb25Nb2RlTWV0YWRhdGEsCiAgICAgICAgIGl0ZXJhYmxlUHJv
ZmlsZTogQXJyYXlQcm9maWxlLAotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJ
bmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVBy
b2ZpbGUsCiAgICAgICAgIGRvbmVNb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAg
ICAgICAgIGRvbmVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCkBAIC0xMzkzLDYgKzE0MDMsOSBAQAog
b3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180NAogb3AgOmxsaW50X2Nsb29wX2Rp
ZF9yZXR1cm5fZnJvbV9qc180NQogb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180
Ngorb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180Nworb3AgOmxsaW50X2Nsb29w
X2RpZF9yZXR1cm5fZnJvbV9qc180OAorb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9q
c180OQogCiBlbmRfc2VjdGlvbiA6Q0xvb3BIZWxwZXJzCiAKQEAgLTE0MTUsNiArMTQyOCwxMCBA
QAogb3AgOmxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9u
X2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6bGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUKK29w
IDpsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfY29uc3Ry
dWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lCiBv
cCA6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lCiBvcCA6
Y2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lCiBvcCA6bm9ybWFsX29zcl9leGl0X3RyYW1w
b2xpbmUKQEAgLTE0MjMsNiArMTQ0MCw4IEBACiBvcCA6bGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4
Y2VwdGlvbgogb3AgOm9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3Jl
dHVybl9sb2NhdGlvbgorb3AgOm9wX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KK29wIDpv
cF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVy
bl9sb2NhdGlvbgogb3AgOm9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb24KQEAgLTE0MzgsMTUg
KzE0NTcsMTUgQEAKIG9wIDpvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpv
cF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0b3JfbmV4
dF9zbG93X3JldHVybl9sb2NhdGlvbgotb3AgOm9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb24K
IG9wIDpvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxf
dmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NhbGxfZXZhbF9zbG93X3JldHVy
bl9sb2NhdGlvbgogCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jYWxsCi1vcCA6anNfdHJhbXBvbGlu
ZV9vcF90YWlsX2NhbGwKIG9wIDpqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdAorb3AgOmpzX3Ry
YW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzCitvcCA6anNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Rf
dmFyYXJncwogb3AgOmpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dAogb3AgOmpzX3RyYW1w
b2xpbmVfb3BfaXRlcmF0b3Jfb3Blbgogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCmluZGV4IDRmNDdjOGJjY2Y4ZTU3NDhhYTliMGYzNmU2
ZjM2MzA1YWRjMzAwMTEuLjI3MGNkNmYxZDAyZjQ0ZDUzZGIzZTZhYTYzYWZmYTE1ZTBjMDkyNmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCkBAIC0xODAsNyArMTgwLDcgQEAgcHRyZGlm
Zl90IHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgdW5zaWduZWQgY2hlY2sKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVNZXRhZGF0
YT4KLUxMSW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYg
bWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK0NhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50
SW5kZXgpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CiAgICAgcmV0dXJu
IG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAppbmRleCAzYjgwM2IzOGE3ODY5YjQ5Mzg5YzA3OTBhYmM4
YmViOGQ0MGE1NThhLi5hMWFmY2Y5MzhhNTFmMmJjMTcyZjBmZDIwMjcxMzJlNjcyZWVkOTdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcApA
QCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUg
PHd0Zi9MaXN0RHVtcC5oPgogCi0jaWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCiBD
YWxsTGlua0luZm86OkNhbGxUeXBlIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3IoT3Bjb2RlSUQg
b3Bjb2RlSUQpCkBAIC04MiwxMSArODEsMTMgQEAgQ2FsbExpbmtJbmZvOjp+Q2FsbExpbmtJbmZv
KCkKIAogdm9pZCBDYWxsTGlua0luZm86OmNsZWFyU3R1YigpCiB7CisjaWYgRU5BQkxFKEpJVCkK
ICAgICBpZiAoIXN0dWIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdHViLT5jbGVhckNh
bGxOb2Rlc0Zvcih0aGlzKTsKICAgICBtX3N0dWIgPSBudWxscHRyOworI2VuZGlmCiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQpAQCAtMTEzLDE5ICsxMTQsMTkgQEAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpkb25lTG9jYXRp
b24oKQogICAgIHJldHVybiBtX2RvbmVMb2NhdGlvbjsKIH0KIAotc3RhdGljIGNvbnN0ZXhwciB1
aW50cHRyX3QgcG9seW1vcnBoaWNDYWxsZWVNYXNrID0gMTsKLQogdm9pZCBDYWxsTGlua0luZm86
OnNldE1vbm9tb3JwaGljQ2FsbGVlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNh
bGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCEoYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKSAmIHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwog
ICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suc2V0KHZtLCBvd25lciwgY2FsbGVlKTsKIAotICAgIGlm
IChpc0RhdGFJQygpKSAKKyAgICBpZiAoaXNEYXRhSUMoKSkKICAgICAgICAgdS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7CiAgICAgZWxzZSB7CisjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0
cikpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9j
YWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtMTM1LDggKzEz
NiwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUoKQogICAgIG1fY2FsbGVlT3JD
b2RlQmxvY2suY2xlYXIoKTsKICAgICBpZiAoaXNEYXRhSUMoKSkKICAgICAgICAgdS5kYXRhSUMu
bV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7Ci0gICAgZWxzZSBpZiAoIWNs
ZWFyZWRCeUpldHRpc29uKCkpCisgICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkpIHsK
KyNpZiBFTkFCTEUoSklUKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgbnVsbHB0cik7CisjZW5kaWYKKyAgICB9CiB9CiAK
IEpTT2JqZWN0KiBDYWxsTGlua0luZm86OmNhbGxlZSgpCkBAIC0yMjQsNiArMjI4LDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgCiAgICAgaWYgKGlzTGlua2Vk
KCkpIHsKICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAg
ICBpZiAoIXN0dWIoKS0+dmlzaXRXZWFrKHZtKSkgewogICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coCkBAIC0yMzQsNiArMjM5LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYg
dm0pCiAgICAgICAgICAgICAgICAgdW5saW5rKHZtKTsKICAgICAgICAgICAgICAgICBtX2NsZWFy
ZWRCeUdDID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB9IGVsc2UgaWYg
KCF2bS5oZWFwLmlzTWFya2VkKG1fY2FsbGVlT3JDb2RlQmxvY2suZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBpZiAoaXNEaXJlY3QoKSkgewogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp2ZXJib3NlT1NSKCkpKSB7CkBAIC0yODAsMTMgKzI4NiwxNCBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogdm9p
ZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEmIHNodWZmbGVEYXRhKQogewogICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlx
dWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KHNodWZmbGVEYXRhKTsKICAgICBtX2ZyYW1lU2h1ZmZs
ZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8dm9pZCgp
PiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCkBAIC0zNDUsNyArMzUyLDcgQEAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGwKICAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJ
bmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CkBAIC0zNTgsNyArMzY1LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFIKICAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBT
Y29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgcmV0dXJuIGVt
aXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CkBAIC0z
NjYsNyArMzczLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJgogCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCiB7Ci0gICAgc2V0U2xv
d1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7CisgICAgc2V0U2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOwogICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0
T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CkBAIC0zNzYs
MjEgKzM4MywzMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwg
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZgogICAgIGppdC5tb3ZlKGNhbGxM
aW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigp
KSwgSlNFbnRyeVB0clRhZyk7CiB9CisjZW5kaWYKIAotdm9pZCBDYWxsTGlua0luZm86OmluaXRp
YWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlu
a0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit2b2lkIENh
bGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIENhbGxUeXBlIGNhbGxUeXBlLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKiBmcmFtZVNo
dWZmbGVEYXRhKQogewotICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRDYWxs
TGlua0luZm8uYnl0ZWNvZGVJbmRleCk7Ci0gICAgc2V0VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJ
bmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOwotICAgIG1fZG9uZUxvY2F0aW9uID0gdW5saW5rZWRD
YWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOwotICAgIGlmICh1bmxpbmtlZENhbGxMaW5rSW5mby5m
cmFtZVNodWZmbGVEYXRhKSB7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lU2h1ZmZsZURhdGEpOwor
ICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jYWxs
VHlwZSA9IGNhbGxUeXBlOworI2lmIEVOQUJMRShKSVQpCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9
IEdQUkluZm86OnJlZ1QwOworICAgIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSBHUFJJbmZvOjpy
ZWdUMjsKKyAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVmZmxl
RGF0YSkgewogICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJl
ZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUuCi0gICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1h
a2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFt
ZVNodWZmbGVEYXRhKTsKKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4oKmZyYW1lU2h1ZmZsZURhdGEpOwogICAgIH0KLSAgICBzZXRV
c2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CiAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9H
UFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8
SlNFbnRyeVB0clRhZz4oKSk7CisjZW5kaWYKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6
Olllcyk7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwo
KS5jb2RlKCkpOworICAgIC8vIElmIEpJVCBpcyBkaXNhYmxlZCwgd2Ugc2hvdWxkIG5vdCBzdXBw
b3J0IGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjYWxsIElDLgorICAgIGlmICghT3B0aW9uczo6dXNl
SklUKCkpCisgICAgICAgIGRpc2FsbG93U3R1YnMoKTsKIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwpAQCAtNDA2LDcgKzQyMyw3IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQp
CiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmIGppdCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENh
bGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKIApAQCAtNDYyLDYgKzQ3
OSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IHRhcmdldCkKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHRhcmdldCk7CiB9CisjZW5kaWYK
IAogdm9pZCBDYWxsTGlua0luZm86OnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewpAQCAtNDgzLDExICs1MDEs
MTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIoKQogICAgICAgICBtX2Nh
bGxlZU9yQ29kZUJsb2NrLmNsZWFyKCk7CiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWND
YWxsRGVzdGluYXRpb24gPSBudWxscHRyOwogICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldp
dGhQYXRjaCgKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhcnRPZkJyYW5jaFB0cldpdGhQ
YXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiksIGNhbGxlZUdQUigpLCBu
dWxscHRyKTsKKyNlbmRpZgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxM
aW5rSW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1
YikKIHsKICAgICBjbGVhclN0dWIoKTsKQEAgLTUwNCw3ICs1MjUsNiBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikK
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0
dWItPmNvZGUoKS5jb2RlKCkpKTsKICAgICB9CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5oCmluZGV4IGU1Zjc3Y2YzN2JmMjY2ZjRiOWM5M2M1MGNmOTk2
ZDIxYzY2OGNlNDUuLmIyZDNhZmE2Y2Y2MGQxNWJlN2E1ZDQ5ZDg2MmNjNDVjZjhiNThhNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTI4
LDI1ICsyOCwyOSBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCiAjaW5jbHVk
ZSAiQ2FsbE1vZGUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUg
IlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5o
PgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKLSNpZiBFTkFCTEUoSklUKQotCiBjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBFeGVjdXRh
YmxlQmFzZTsKIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKK2Ns
YXNzIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVk
OwogCitzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlu
a0luZm87CiAKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKKwogICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9u
ZSwKICAgICAgICAgQ2FsbCwKQEAgLTU5LDYgKzYzLDggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDog
cHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgRGly
ZWN0Q29uc3RydWN0LAogICAgICAgICBEaXJlY3RUYWlsQ2FsbAogICAgIH07CisKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwogICAgIAog
ICAgIHN0YXRpYyBDYWxsVHlwZSBjYWxsVHlwZUZvcihPcGNvZGVJRCBvcGNvZGVJRCk7CiAKQEAg
LTE3NCwzNSArMTgwLDQzIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdT
ZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBpc1ZhcmFyZ3NDYWxs
VHlwZShzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSkpOwogICAgIH0KIAotICAgIGJv
b2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiBtX3N0dWIgfHwgbV9jYWxsZWVPckNvZGVCbG9j
azsgfQorICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiBzdHViKCkgfHwgbV9jYWxs
ZWVPckNvZGVCbG9jazsgfQogICAgIHZvaWQgdW5saW5rKFZNJik7CiAKKyNpZiBFTkFCTEUoSklU
KQogICAgIHZvaWQgc2V0VXBDYWxsKENhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlR1BS
KQogICAgIHsKICAgICAgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOwogICAgICAgICBtX2NhbGxl
ZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0m
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIpOwotCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bGVlR1BSOyB9CisjZW5kaWYKKworICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIENhbGxU
eXBlLCBCeXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSopOwogICAgIAogICAgIGVu
dW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CiAgICAgICAgIFllcywKICAgICAgICAgTm8K
ICAgICB9OwogCisjaWYgRU5BQkxFKEpJVCkKIHByaXZhdGU6Ci0gICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1Rh
aWxDYWxsLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9V
TlVTRURfUkVUVVJOOwogcHVibGljOgogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VE
YXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZh
c3RQYXRoKENDYWxsSGVscGVycyYpOwotICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCk7CisgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBT
Y29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0
U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKICAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlD
U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwor
ICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB2b2lkIHNldERpcmVjdENhbGxU
YXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOworI2VuZGlmCisKICAgICB2
b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6Olll
czsgfQpAQCAtMjE3LDcgKzIzMSw2IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIG1fZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwo
KTsKIAogICAgIGJvb2wgYWxsb3dTdHVicygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsg
fQogCkBAIC0yMzcsNyArMjUwLDYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tl
ZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIHNldENvZGVCbG9jayhW
TSYsIEpTQ2VsbCosIEZ1bmN0aW9uQ29kZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVCbG9j
aygpOwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2soKTsKLSAgICB2b2lkIHNldERp
cmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAgICAg
dm9pZCBzZXRMYXN0U2VlbkNhbGxlZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0
KiBjYWxsZWUpOwogICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjQ3LDIyICsy
NTksMTggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9k
ZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlv
bihFeGVjdXRhYmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAg
ICAgCisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lPiYmKTsKKyNlbmRpZgogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YigpIGNvbnN0CiAgICAgeworI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgIHJldHVybiBtX3N0dWIuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRTbG93U3R1YihSZWY8SklUU3R1YlJvdXRpbmU+JiYgbmV3U2xvd1N0dWIpCi0gICAgewotICAg
ICAgICBtX3Nsb3dTdHViID0gV1RGTW92ZShuZXdTbG93U3R1Yik7Ci0gICAgfQotCi0gICAgdm9p
ZCBjbGVhclNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwor
I2Vsc2UKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKICAgICB9CiAKICAgICBib29s
IHNlZW5PbmNlKCkKQEAgLTMzMCwxOSArMzM4LDE3IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHVpbnQzMl90KiBh
ZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCi0gICAgewotICAgICAgICBy
ZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0gICAgfQotI2VuZGlmCi0K
ICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBzZXRNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCk7Cisg
ICAgdm9pZCB1cGRhdGVNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICB7CisgICAgICAgIGlmIChtX21heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgICAg
ICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRo
Q291bnQoKQogICAgIHsKQEAgLTM2NCwxMCArMzcwLDEyIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fY2FsbGVlR1BSOwogICAgIH0KKyNlbmRpZgogCiAgICAg
dWludDMyX3Qgc2xvd1BhdGhDb3VudCgpCiAgICAgewpAQCAtMzgzLDkgKzM5MSwxMSBAQCBjbGFz
cyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4gewogICAgIHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0xpbmtlZCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoc3R1YigpKQorICAgICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgICAgICAgICAgc3R1YigpLT5mb3JFYWNoRGVwZW5kZW50Q2VsbChmdW5jdG9yKTsKLSAg
ICAgICAgICAgIGVsc2UgeworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIGZ1bmN0b3IobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzRGlyZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9sYXN0U2Vl
bkNhbGxlZU9yRXhlY3V0YWJsZS5nZXQoKSk7CkBAIC0zOTcsMjYgKzQwNywzNSBAQCBjbGFzcyBD
YWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4g
ewogCiAgICAgdm9pZCB2aXNpdFdlYWsoVk0mKTsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgdm9p
ZCBzZXRGcmFtZVNodWZmbGVEYXRhKGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CiAKICAg
ICBjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0YSgpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9mcmFtZVNodWZmbGVEYXRhLmdldCgpOwogICAgIH0KKyNlbmRpZgog
CiBwcml2YXRlOgogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFz
dFBhdGhTdGFydCgpOwogCisgICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBv
ZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2Nh
dGVkIGZvciBhcmd1bWVudHMuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKICAg
ICAgICAgVW5pb25UeXBlKCkgCisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIDogZGF0YUlD
IHsgbnVsbHB0ciwgSW52YWxpZEdQUlJlZyB9CisjZWxzZQorICAgICAgICAgICAgOiBkYXRhSUMg
eyBudWxscHRyIH0KKyNlbmRpZgogICAgICAgICB7IH0KICAgICAgICAgc3RydWN0IERhdGFJQyB7
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25v
bW9ycGhpY0NhbGxEZXN0aW5hdGlvbjsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgR1BS
UmVnIG1fY2FsbExpbmtJbmZvR1BSOworI2VuZGlmCiAgICAgICAgIH0gZGF0YUlDOwogCiAgICAg
ICAgIHN0cnVjdCB7CkBAIC00MjksOSArNDQ4LDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAKICAgICBXcml0ZUJh
cnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0Nl
bGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CisjaWYgRU5BQkxFKEpJVCkKICAgICBS
ZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+IG1fc3R1YjsKLSAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IG1fc2xvd1N0dWI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNo
dWZmbGVEYXRhPiBtX2ZyYW1lU2h1ZmZsZURhdGE7CisjZW5kaWYKICAgICBDb2RlT3JpZ2luIG1f
Y29kZU9yaWdpbjsKICAgICBib29sIG1faGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgIGJv
b2wgbV9oYXNTZWVuQ2xvc3VyZSA6IDE7CkBAIC00NDEsOSArNDYxLDEwIEBAIGNsYXNzIENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAg
ICAgYm9vbCBtX2NsZWFyZWRCeUpldHRpc29uIDogMTsKICAgICB1bnNpZ25lZCBtX2NhbGxUeXBl
IDogNDsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBtX3VzZURhdGFJQyA6IDE7IC8vIFVzZURh
dGFJQworI2lmIEVOQUJMRShKSVQpCiAgICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQ
UlJlZyB9OworI2VuZGlmCiAgICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9OwotICAg
IHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2
YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGly
ZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgog
fTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKQEAgLTQ1MywxMSArNDc0LDcgQEAgaW5saW5lIENvZGVPcmln
aW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
IAogc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNh
biB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxs
VHlwZSBjYWxsVHlwZTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBk
b25lTG9jYXRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBm
cmFtZVNodWZmbGVEYXRhOwogfTsKIAotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAKaW5kZXggZjdhZmIyYjBmMjhmZDllNWZmYzVjMzRiNmEzYTg1NmFlMzczMDJm
NS4uZjJkZGEwZWVkYWFiOTY0NGEwM2JlYjZlNTNmZWExNzIyM2EwY2FmZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZv
LmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgogCkBAIC02MywzNCArNjIsNyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQgogICAgICAg
ICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIH0KICNlbmRpZgotCi0gICAgYXV0byBpbnN0
cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpOwotICAgIE9wY29kZUlEIG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7Ci0K
LSAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwotICAgIHN3aXRjaCAob3ApIHsK
LSAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+
YXM8T3BDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIG9wX2NvbnN0cnVjdDoKLSAgICAgICAgY2FsbExpbmtJbmZv
ID0gJmluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2Nr
KS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF90YWlsX2NhbGw6
Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbD4oKS5t
ZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1
Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2Fs
bExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCku
bWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0gICAgfQot
ICAgIAotICAgIAotICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhjYWxsTGlua0luZm8tPmxhc3RT
ZWVuQ2FsbGVlKCkpOworICAgIHJldHVybiBDYWxsTGlua1N0YXR1cygpOwogfQogCiBDYWxsTGlu
a1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNzdjYWE4ZTU3ZTk0YWQ3MzJhODcwM2I3
MTBmZDQ4MGY3MTgxM2FlNi4uY2IwMTYyNWQ1ZjhkM2ZiZmFkYmM1NDI5NWE4NzU0MDE1MTY0YzQ0
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAg
LTQ0OSwxNCArNDQ5LDE3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSh0aGlzKTsgXAogICAgIG5ldyAoJm1ldGFkYXRhKSBf
X29wOjpNZXRhZGF0YSB7IGJ5dGVjb2RlIH07IFwKIAotI2RlZmluZSBDQVNFKF9fb3ApIGNhc2Ug
X19vcDo6b3Bjb2RlSUQKLQotI2RlZmluZSBMSU5LKC4uLikgXAotICAgIENBU0UoV1RGX0xBWllf
RklSU1QoX19WQV9BUkdTX18pKTogeyBcCisjZGVmaW5lIExJTktfSU1QTCguLi4pIFwKICAgICAg
ICAgSU5JVElBTElaRV9NRVRBREFUQShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpIFwKICAg
ICAgICAgV1RGX0xBWllfSEFTX1JFU1QoX19WQV9BUkdTX18pKHsgXAogICAgICAgICAgICAgV1RG
X0xBWllfRk9SX0VBQ0hfVEVSTShMSU5LX0ZJRUxELCAgV1RGX0xBWllfUkVTVF8oX19WQV9BUkdT
X18pKSBcCiAgICAgICAgIH0pIFwKKworI2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bj
b2RlSUQKKworI2RlZmluZSBMSU5LKC4uLikgXAorICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19W
QV9BUkdTX18pKTogeyBcCisgICAgICAgIExJTktfSU1QTChfX1ZBX0FSR1NfXykgXAogICAgICAg
ICBicmVhazsgXAogICAgIH0KIApAQCAtNDY1LDEwICs0NjgsNiBAQCBib29sIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGluawogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpOwogICAgICAgICBtX2J5dGVjb2RlQ29zdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsK
ICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBMSU5LKE9wQ2FsbFZhcmFyZ3Ms
IHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAg
ICAgIExJTksoT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUpCi0gICAgICAgIExJ
TksoT3BDb25zdHJ1Y3RWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0QnlWYWws
IHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRQcml2YXRlTmFtZSwgcHJvZmlsZSkKIApAQCAt
NDk4LDExICs0OTcsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9w
RW51bWVyYXRvckhhc093blByb3BlcnR5KQogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5
VmFsLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQotICAgICAgICBM
SU5LKE9wVGFpbENhbGwsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmls
ZSkKLSAgICAgICAgTElOSyhPcENvbnN0cnVjdCwgcHJvZmlsZSkKLQogICAgICAgICBMSU5LKE9w
SW5CeVZhbCkKICAgICAgICAgTElOSyhPcFB1dEJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlW
YWxEaXJlY3QpCkBAIC01MjcsMTMgKzUyMSw5MyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
ICAgICAgICBMSU5LKE9wQ2F0Y2gpCiAgICAgICAgIExJTksoT3BQcm9maWxlQ29udHJvbEZsb3cp
CiAKKyAgICAgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxs
LCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6
ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0
aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFp
bENhbGwsIHByb2ZpbGUpCisjaWYgRU5BQkxFKEpJVCkKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1Qw
IH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OworI2Vu
ZGlmCisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbnVtUGFyYW1ldGVycygpOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3Rl
ciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworI2VuZGlmCisgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1Mb2NhbHMgPSBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5y
ZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgeworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJ
bkpTU3RhY2soCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAgICAg
ICAgICAgICBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgfQorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihj
YWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOworI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOworI2VuZGlm
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lz
dGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtZXRhZGF0
YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgJnNodWZmbGVEYXRhKTsKKyNl
bHNlCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlD
KHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5k
ZXgoKSwgbnVsbHB0cik7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENh
bGxFdmFsLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5p
dGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGlu
c3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogeworICAgICAgICAgICAgTElOS19JTVBM
KE9wQ29uc3RydWN0LCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0lu
Zm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgICAg
IElOSVRJQUxJWkVfTUVUQURBVEEoT3BJdGVyYXRvck9wZW4pCisgICAgICAgICAgICBMSU5LX0lN
UEwoT3BJdGVyYXRvck9wZW4pCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5p
bml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwg
aW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogewotICAgICAgICAgICAgSU5J
VElBTElaRV9NRVRBREFUQShPcEl0ZXJhdG9yTmV4dCkKKyAgICAgICAgICAgIExJTktfSU1QTChP
cEl0ZXJhdG9yTmV4dCkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRp
YWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0
cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIExJTktfSU1Q
TChPcENhbGxWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlu
a0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNv
ZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAg
ICAgICAgICBMSU5LX0lNUEwoT3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAg
ICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0lu
Zm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxM
aW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIExJTktfSU1QTChPcENvbnN0cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAg
ICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlu
a0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC03ODMsMjEgKzg1NywxOCBA
QCB2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2Vs
aW5lSklUQ29kZT4gaml0Q29kZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2pp
dENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOwogICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7
CiAgICAgICAgIGppdERhdGEubV9zdHViSW5mb3MgPSBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVTdHVi
SW5mbz4oaml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpOwotICAgICAgICBqaXRE
YXRhLm1fY2FsbExpbmtJbmZvcyA9IEZpeGVkVmVjdG9yPENhbGxMaW5rSW5mbz4oaml0Q29kZS0+
bV91bmxpbmtlZENhbGxzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgdW5saW5rZWRDYWxs
TGlua0luZm8gOiBqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMpIHsKKyAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChs
b2NrZXIsIHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAg
QVNTRVJUKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENvZGVM
b2NhdGlvbnMoeyB9LCB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb24pOworICAgICAg
ICB9CisKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50
UG9vbC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1f
Y29uc3RhbnRQb29sLmF0KGkpOwogICAgICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CiAg
ICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogewotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucG9pbnRlcigpKTsKLSAg
ICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8g
PSBqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHNbaW5kZXhdOwotICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3NbaW5kZXhdOwot
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtKCksIHVubGlu
a2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSAmY2FsbExpbmtJbmZvOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVy
KCkpOwogICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2Vk
U3R1YkluZm8gPSBqaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zW2luZGV4XTsKQEAgLTE1Njcs
MTUgKzE2MzgsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcygp
CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwotCi0gICAgZm9yRWFjaExMSW50Q2Fs
bExpbmtJbmZvKFsmXShMTEludENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAg
IGlmIChjYWxsTGlua0luZm8uaXNMaW5rZWQoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChjYWxsTGlu
a0luZm8uY2FsbGVlKCkpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksICJDbGVhcmluZyBMTEludCBjYWxsIGZyb20gIiwgKnRoaXMpOwotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLnVubGluaygpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjYWxsTGlu
a0luZm8ubGFzdFNlZW5DYWxsZWUoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChjYWxsTGlua0luZm8u
bGFzdFNlZW5DYWxsZWUoKSkpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJMYXN0U2Vl
bkNhbGxlZSgpOwotICAgIH0pOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE1OTMsOCArMTY1
NSw2IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVREYXRhU2xvdyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5s
aW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJ
bmZvcykKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0oKSk7CiAgICAgICAg
IGZvciAoYXV0byYgc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykgewogICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyQmFzZSBsb2NrZXIoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKICAg
ICAgICAgICAgIHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsKQEAg
LTE2MTIsMTkgKzE2NzIsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNo
ZXMoKQogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IGlmIChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKLSAgICAgICAgLy8gVmVy
aWZ5IHdlIGRvbid0IG5lZWQgdG8gZmluYWxpemUgdGhlc2Ugc2luY2UgdGhleSdyZSB2aXJ0dWFs
IGNhbGxzLgotICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogc3RhdGlj
X2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9ldmFsQ2FsbExpbmtJ
bmZvcykgewotICAgICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwot
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5mb3JFYWNoRGVwZW5kZW50Q2VsbChbXSAoSlNDZWxs
KikgewotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0KLQotICAgIH0KLSNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTE2MzcsNiAr
MTY4NCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mIHZt
KQogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAg
ICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCisgICAgZm9yRWFjaExMSW50T3JCYXNl
bGluZUNhbGxMaW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAg
ICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSk7CisgICAgfSk7CisKICNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghIWppdENvZGUoKSkKICAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMo
KTsKQEAgLTE3MDAsMTIgKzE3NTEsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogdm9pZCBDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIElDU3RhdHVzTWFwJiByZXN1bHQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKKyAgICBm
b3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykgeworICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCks
IElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsTGlua0luZm8gPSAmY2FsbExpbmtJbmZv
OworICAgIH0pOwogICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCiAgICAgICAgICAgICAgICAg
cmVzdWx0LmFkZChzdHViSW5mby5jb2RlT3JpZ2luLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFs
dWUuc3R1YkluZm8gPSAmc3R1YkluZm87Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5r
SW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAgICByZXN1bHQu
YWRkKGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1
ZS5jYWxsTGlua0luZm8gPSAmY2FsbExpbmtJbmZvOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
ewpAQCAtMTc2MCwxNSArMTgxMiwyMiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpm
aW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1DYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleChCeXRlY29kZUluZGV4IGluZGV4KQorQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0
ZWNvZGVJbmRleCBpbmRleCkKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpIHsKLSAg
ICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpID09IENvZGVPcmlnaW4oaW5k
ZXgpKQotICAgICAgICAgICAgICAgIHJldHVybiAmY2FsbExpbmtJbmZvOwotICAgICAgICB9Cisg
ICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCk7CisgICAgc3dp
dGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworI2RlZmluZSBDQVNFKE9wKSBcCisgICAg
Y2FzZSBPcDo6b3Bjb2RlSUQ6IFwKKyAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+
KCkubWV0YWRhdGEodGhpcykubV9jYWxsTGlua0luZm87IFwKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDQVNFKQorCisjdW5k
ZWYgQ0FTRQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KKwogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkg
ewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29t
bW9uKCk7CkBAIC0yMTM1LDEzICsyMTk0LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNocmlua01vZGUgc2hyaW5rTW9kZSkKIH0KIAog
I2lmIEVOQUJMRShKSVQpCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJh
bWUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8qIGluY29taW5nKQotewotICAgIG5vdGljZUlu
Y29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2luY29taW5nQ2FsbHMucHVzaChp
bmNvbWluZyk7Ci19Ci0KIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0Nh
bGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcp
CiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKQEAgLTIxNTIsMTAgKzIy
MDQsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChDYWxs
RnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0MKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCit2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZy
YW1lLCBDYWxsTGlua0luZm8qIGluY29taW5nKQoreworICAgIG5vdGljZUluY29taW5nQ2FsbChj
YWxsZXJGcmFtZSk7CisgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOworfQorCiB2
b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiB7Ci0gICAgd2hpbGUgKG1faW5j
b21pbmdMTEludENhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCi0g
ICAgICAgIG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCktPnVubGluaygpOworICAgIHdoaWxl
IChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCisgICAg
ICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsodm0oKSk7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBKSVREYXRhKiBqaXREYXRhID0gbnVsbHB0cjsKICAgICB7CkBAIC0yMTYzLDIwICsy
MjIxLDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICAgICAg
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKTsKICAgICB9CiAgICAgaWYgKGppdERhdGEpIHsKLSAg
ICAgICAgd2hpbGUgKGppdERhdGEtPm1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IGppdERhdGEt
Pm1faW5jb21pbmdDYWxscy5lbmQoKSkKLSAgICAgICAgICAgIGppdERhdGEtPm1faW5jb21pbmdD
YWxscy5iZWdpbigpLT51bmxpbmsodm0oKSk7CiAgICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2lu
Y29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IGppdERhdGEtPm1faW5jb21pbmdQb2x5
bW9ycGhpY0NhbGxzLmVuZCgpKQogICAgICAgICAgICAgaml0RGF0YS0+bV9pbmNvbWluZ1BvbHlt
b3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUq
IGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyogaW5jb21pbmcpCi17Ci0gICAgbm90aWNl
SW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2luY29taW5nTExJbnRDYWxscy5wdXNo
KGluY29taW5nKTsKLX0KLQogQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkK
IHsKICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKQEAgLTIzMjksMTMgKzIzNzksMTIgQEAgdm9pZCBD
b2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFzb24sIFJlb3B0
aW1pemF0aW9uTW9kZSBtb2QKICAgICBpZiAodm0uaGVhcC5jdXJyZW50VGhyZWFkSXNEb2luZ0dD
V29yaygpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkKICAgICAgICAg
cmV0dXJuOwogCi0jaWYgRU5BQkxFKEpJVCkKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgaWYgKEpJVERhdGEqIGppdERhdGEgPSBtX2pp
dERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0
RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRD
bGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9CisgICAgICAgIGZvckVhY2hMTEludE9yQmFz
ZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKKyAgICAgICAgfSk7
CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1v
biA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CkBAIC0yMzQ0LDcgKzIzOTMsNiBAQCB2b2lkIENv
ZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRp
bWl6YXRpb25Nb2RlIG1vZAogICAgICAgICB9CiAjZW5kaWYKICAgICB9Ci0jZW5kaWYKIAogICAg
IC8vIFRoaXMgYWNjb21wbGlzaGVzICgyKS4KICAgICBvd25lckV4ZWN1dGFibGUoKS0+aW5zdGFs
bENvZGUodm0sIGFsdGVybmF0aXZlKCksIGNvZGVUeXBlKCksIHNwZWNpYWxpemF0aW9uS2luZCgp
KTsKQEAgLTI4NDcsMTkgKzI4OTUsMTMgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFy
cmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGUKIHsKICAg
ICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAg
ICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgewotI2RlZmluZSBDQVNFMShPcCkg
XAorI2RlZmluZSBDQVNFKE9wKSBcCiAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKICAgICAgICAg
cmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2Zp
bGU7CiAKLSNkZWZpbmUgQ0FTRTIoT3ApIFwKLSAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAg
ICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxM
aW5rSW5mby5tX2FycmF5UHJvZmlsZTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUoQ0FTRTEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5L
X0lORk8oQ0FTRTIpCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNF
KQogCi0jdW5kZWYgQ0FTRTEKLSN1bmRlZiBDQVNFMgorI3VuZGVmIENBU0UKIAogICAgIGNhc2Ug
T3BHZXRCeUlkOjpvcGNvZGVJRDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZD4oKTsKQEAgLTMwMjksMTcgKzMwNzEsMTIgQEAgdm9pZCBDb2RlQmxv
Y2s6OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVByZWRpY3Rpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYgbG9ja2UKICAgICAgICAgfQogICAgIH0pOwogCi0jZGVmaW5lIFZJU0lUMShfX29wKSBc
CisjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsm
XSAoYXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSk7IH0p
OwogCi0jZGVmaW5lIFZJU0lUMihfX29wKSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29w
PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEubV9jYWxsTGlua0luZm8u
bV9hcnJheVByb2ZpbGUpOyB9KTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BS
T0ZJTEUoVklTSVQxKQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19J
TkZPKFZJU0lUMikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lU
KQogCi0jdW5kZWYgVklTSVQxCi0jdW5kZWYgVklTSVQyCisjdW5kZWYgVklTSVQKIAogICAgIG1f
bWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck5leHQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsK
ICAgICAgICAgcHJvY2VzcyhtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggNjRmOWY1YWJjZmUyYWU3MDVk
MWRhNjVhYTlmODMxOTdiOTZjNmQzMS4uYjdhZWEyNjc3ZjVlOTQ5MDhhYjM1NWY5NmIwZDIzYzM3
ODI0MjAxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApA
QCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlu
a0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUg
Ik1ldGFkYXRhVGFibGUuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpA
QCAtMjYxLDggKzI2MCw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAg
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEZpeGVk
VmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgRml4ZWRWZWN0
b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7Ci0gICAgICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxDYWxsTGlua0luZm8sIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBt
X2luY29taW5nQ2FsbHM7CiAgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0Nh
bGxOb2RlLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lz
dGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2
ZVJlZ2lzdGVyczsKQEAgLTI5MSw3ICsyODgsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFy
aWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRzIGluIHRoZSBjYXNlCiAgICAgLy8gdGhhdCB0aGVy
ZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMs
IHlvdSdyZSByZWFsbHkKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBh
bW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCi0gICAgQ2FsbExpbmtJbmZvKiBnZXRD
YWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOworICAgIENhbGxMaW5r
SW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBCeXRlY29kZUluZGV4KTsKICAgICAKICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRD
b2RlTWFwKCk7CiAKQEAgLTMwOSwxNCArMzA2LDExIEBAIGNsYXNzIENvZGVCbG9jayA6IHB1Ymxp
YyBKU0NlbGwgewogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICB2b2lkIHVubGlua0luY29t
aW5nQ2FsbHMoKTsKLQotI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxs
KENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyopOworI2lmIEVOQUJMRShKSVQp
CiAgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJG
cmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSAg
ICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxs
TGlua0luZm8qKTsKLQogICAgIGNvbnN0IEluc3RydWN0aW9uKiBvdXRPZkxpbmVKdW1wVGFyZ2V0
KGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNDUzLDcgKzQ0Nyw3IEBA
IGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKGNv
bnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYpOwogCiAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBiaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiB1bmFyeUFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CkBAIC05NTksNyArOTUzLDcgQEAgY2xhc3MgQ29k
ZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgVk0qIG1fdm07CiAKICAgICBjb25zdCB2b2lk
KiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIgeyBudWxscHRyIH07Ci0gICAgU2VudGluZWxMaW5r
ZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxs
TGlua0luZm8+PiBtX2luY29taW5nTExJbnRDYWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8
Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNv
bWluZ0NhbGxzOwogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRj
aHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCmluZGV4IDFkNTk0YWI4MzUyODk3ZWM4YTc0NWVhMjQ5M2Y4ZDJkYTAxOGI5NjIuLjkyZGE5
OWEwYmEyYWNjMWZjZGI2YTk3MzVmY2RkZTIzZWZjOTMzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaApAQCAtODYsNyArODYsNyBA
QCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIENvZGVC
bG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit2b2lk
IENvZGVCbG9jazo6Zm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhjb25zdCBGdW5j
dG9yJiBmdW5jKQogewogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3Ap
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxM
aW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJ
bmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMzJlOWI2NmJiN2M2MWZlYjMz
OWY4MDUyOGMyZDM0NzFkODA2OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJ
bmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJKU0NQdHJUYWcuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCi0jaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IEluc3RydWN0aW9uOwotCi1jbGFzcyBMTEludENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0lu
Zm8+IHsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgdW5saW5rZWRCaXQgPSAweDE7Ci0KLSAg
ICBMTEludENhbGxMaW5rSW5mbygpID0gZGVmYXVsdDsKLSAgICAKLSAgICB+TExJbnRDYWxsTGlu
a0luZm8oKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAgICByZW1v
dmUoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuICEo
bV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgJiB1bmxpbmtlZEJpdCk7IH0KLSAg
ICAKLQotICAgIHZvaWQgbGluayhWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxs
ZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQotICAgIHsK
LSAgICAgICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICAgICAg
bV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihjYWxsZWUpOwotICAgICAgICB2bS53cml0ZUJhcnJpZXIob3duZXIsIGNhbGxlZSk7Ci0g
ICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwotICAgIH0KLQotICAgIHZvaWQg
dW5saW5rKCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2UgbGluayBpbnZhbGlkYXRlZC4gSXQgd29y
a3MgYmVjYXVzZSBMTEludCB0ZXN0cyB0aGUgZ2l2ZW4gY2FsbGVlIHdpdGggdGhpcyBwb2ludGVy
LiBCdXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMgbGFzdFNlZW5DYWxsZWUhCi0gICAgICAgIG1fY2Fs
bGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHw9IHVubGlua2VkQml0OwotICAgICAgICBt
X21hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
KCk7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAg
fQotCi0gICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWlz
TGlua2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0
KTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogbGFzdFNlZW5DYWxsZWUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0ICYgfnVubGlua2VkQml0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNs
ZWFyTGFzdFNlZW5DYWxsZWUoKQotICAgIHsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2Fs
bGVlV2l0aExpbmtCaXQgPSB1bmxpbmtlZEJpdDsKLSAgICB9Ci0KLSAgICBBcnJheVByb2ZpbGUg
bV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmls
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVBy
b2ZpbGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNh
bGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZVRhcmdldDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29k
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4IGNhOGJl
ZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFhYzgzOWJkMzYuLjFjYmM2NmY4NDk5NTQ5OTdlZjdj
NTBkNDkzODQzMDJmMzVjNjI5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bj
b2RlLmgKQEAgLTEyNiwxMSArMTI2LDE5IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0
V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAg
bWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNybyhPcEdldFByaXZhdGVOYW1lKSBcCiAKLSNkZWZp
bmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAorI2RlZmluZSBG
T1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAorICAgIG1h
Y3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKKyAgICBtYWNybyhPcENhbGxF
dmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yT3Bl
bikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8oT3BDYWxsVmFyYXJn
cykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBtYWNybyhPcENvbnN0cnVjdFZhcmFyZ3MpIFwKKwor
I2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1hY3JvKSBcCiAgICAg
bWFjcm8oT3BHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9w
UHV0QnlWYWwpIFwKQEAgLTEzOSw2ICsxNDcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQog
ICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9y
SW5CeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCisgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKIAogI2Rl
ZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8p
IFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1T
QlNldENvbnN0ZXhwcihtCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09CSkVDVF9BTExP
Q0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld09iamVjdCkgXAogCi0jZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCi0g
ICAgbWFjcm8oT3BDYWxsKSBcCi0gICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAgIG1hY3JvKE9w
Q2FsbEV2YWwpIFwKLSAgICBtYWNybyhPcENvbnN0cnVjdCkgXAotICAgIG1hY3JvKE9wSXRlcmF0
b3JPcGVuKSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmluZSBGT1JfRUFD
SF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9w
QWRkKSBcCiAgICAgbWFjcm8oT3BNdWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZXBhdGNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDljMmVkN2Q0OGU1YmEyNTZhMzM0NGRmMTY2ZGNh
ZmI3NWM2MWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1JlcGF0Y2guY3BwCkBAIC0wLDAgKzEsMjAzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZXBhdGNoLmgiCisKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgor
I2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiRE9NSklUR2V0dGVy
U2V0dGVyLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhlY3V0
YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCisjaW5jbHVkZSAiRnVs
bENvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2lu
Y2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXRzLmgiCisj
aW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2Uu
aCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSklU
LmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgorI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRl
ICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgorI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25t
ZW50LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3JzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyB2b2lk
IGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3sKKyAgICBjYWxs
TGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxh
dGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorc3Rh
dGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIGxpbmtTbG93UGF0aFRvKHZtLCBj
YWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91
dGluZVB0clRhZz4oKSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1
YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwg
Y2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworfQorCitzdGF0aWMgSlNDZWxsKiB3ZWJBc3Nl
bWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICAvLyBFYWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVp
ciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRl
IG93bmVyLgorICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQorfQorCit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCisgICAgVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayog
Y2FsbGVlQ29kZUJsb2NrLAorICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQoreworICAgIEFTU0VSVCghY2FsbExpbmtJbmZv
LnN0dWIoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxs
ZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNh
bGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwo
KSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2Rl
QmxvY2soKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2
YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUo
Y2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKKyAgICBBU1NFUlQo
b3duZXIpOworCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2Fs
bExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRy
KTsKKyAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUp
OworCisgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQor
ICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVy
Q29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVt
cChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwor
CisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5r
SW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKKworI2lmIEVOQUJMRShK
SVQpCisgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9y
Q2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7CisgICAgICAgIGxpbmtTbG93UGF0
aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2
bSwgY2FsbExpbmtJbmZvKTsKK30KKworc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgp
KSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29kZUJsb2Nr
KCk7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpCisgICAg
ICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyNlbmRpZgorICAg
IH0gZWxzZSB7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkp
IHsKKyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYp
OworCisgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOworICAgICAgICB9CisgICAgICAgIGNh
bGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUg
Y2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCisgICAgfQorICAgIGNh
bGxMaW5rSW5mby5jbGVhclNlZW4oKTsKKyAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7Cisg
ICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBjYWxsTGlua0luZm8ucmVt
b3ZlKCk7Cit9CisKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQoreworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAi
VW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7Cisg
ICAgCisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElMaW5rQ2FsbCgp
LnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICBpZiAoIWNhbGxlZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
aWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24q
Pih2bSwgY2FsbGVlKSkKKyAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlw
b2ludCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIFVOVVNFRF9QQVJBTShr
aW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKKyNlbmRpZgorICAgIHJldHVybiBudWxs
cHRyOworfQorCisjaWYgRU5BQkxFKEpJVCkKKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+IG9wZXJhdGlvbikKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX09QRVJBVElP
Tl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9uKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oQ29kZUxvY2F0aW9u
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsKQoreworICAgIEpTQ19SRVRVUk5fUkVUQUdHRURf
Q0FMTF9UQVJHRVRfV0lUSF9WQUxJREFUSU9OKGNhbGwpOworfQorCitzdGF0aWMgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKGNvZGVCbG9jay0+
dXNlRGF0YUlDKCkpCisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9u
KHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7CisgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbjsKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
RlRMSklUKSB7CisgICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBN
YWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgcmV0dXJuIHJldGFnT3Bl
cmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xv
d1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7CisgICAgfQorI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICBy
ZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oY2FsbCk7Cit9CisKK3ZvaWQgZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25D
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pCit7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgICAgICBWTSYgdm0gPSBj
b2RlQmxvY2stPnZtKCk7CisgICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1
bmtzOworICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9B
c3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAg
YXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
Pjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtleUZvclNsb3dQ
YXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOworICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxU
YXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHRodW5rcy5nZXRTbG93UGF0
aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChj
YWxsLCBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOworfQor
CitzdGF0aWMgdm9pZCByZXBhdGNoU2xvd1BhdGhDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pCit7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsK
KyAgICAgICAgc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0
YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZ0
bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxs
TG9jYXRpb24sIG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30KKworZW51bSBJbmxpbmVDYWNoZUFjdGlv
biB7CisgICAgR2l2ZVVwT25DYWNoZSwKKyAgICBSZXRyeUNhY2hlTGF0ZXIsCisgICAgQXR0ZW1w
dFRvQ2FjaGUKK307CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+
c3RydWN0dXJlKHZtKTsKKworICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3RydWN0dXJlLT50eXBl
SW5mbygpOworICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5GbGF0
dGVuZWRCZWZvcmUoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAvLyBGbGF0dGVuaW5nIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgb2Zmc2V0LCBzbyByZXR1cm4g
ZWFybHkgZm9yIGFub3RoZXIgdHJ5LgorICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAg
IH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIHJldHVybiBBdHRlbXB0
VG9DYWNoZTsKK30KKworc3RhdGljIGJvb2wgZm9yY2VJQ0ZhaWx1cmUoSlNHbG9iYWxPYmplY3Qq
KQoreworICAgIHJldHVybiBPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpOworfQorCitBTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKFZN
JiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCYgcmVzdWx0KQoreworICAgIGlmIChyZXN1bHQuc2hvdWxk
UmVzZXRTdHViQW5kRmlyZVdhdGNocG9pbnRzKCkpIHsKKyAgICAgICAgcmVzdWx0LmZpcmVXYXRj
aHBvaW50cyh2bSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAgICAgc3R1Yklu
Zm8ucmVzZXQobG9ja2VyLCBjb2RlQmxvY2spOworICAgICAgICB9CisgICAgfQorfQorCitpbmxp
bmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6VHJ5
QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICBj
YXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2
YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7
CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZE9wdGltaXplOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCit7CisgICAgc3dp
dGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25HZXRCeUlkOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXM7CisgICAgY2FzZSBHZXRCeUtpbmQ6
OlRyeUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkOworICAgIGNhc2Ug
R2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZERp
cmVjdDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25HZXRCeVZhbEdlbmVyaWM7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgorICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWU7CisgICAgY2FzZSBHZXRCeUtpbmQ6
OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
QnlJZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsK
KworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0Zh
aWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1t
ZWRpYXRlcy4KKyAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKKyAgICAgICAgY29uc3QgYm9vbCBpc1ByaXZhdGUgPSBraW5kID09IEdldEJ5
S2luZDo6UHJpdmF0ZU5hbWUgfHwga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDsK
KworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAocHJv
cGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKSkgeworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAg
ICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNv
ZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2Nr
LCBzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5l
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3Ry
aW5nTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChEaXJlY3RB
cmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odm0s
IGJhc2VDZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3ZlcnJpZGVz
LCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2FkISBHdWFy
ZGluZworICAgICAgICAgICAgICAgIC8vIHRoaXMgd2l0aCBzdWNoIGEgY2hlY2sgZW5hYmxlcyB1
cyB0byBhZGQgYW4gSUMgY2FzZSBmb3IgdGhhdCBsb2FkIGlmIG5lZWRlZC4KKyAgICAgICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpEaXJlY3RBcmd1bWVudHNMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxTY29wZWRB
cmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgLy8gRGl0dG8uCisg
ICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCisgICAgICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSAmJiBiYXNlQ2VsbC0+aW5oZXJpdHM8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+KHZtKSAmJiAh
c2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vZHVsZU5hbWVzcGFjZVNs
b3QgPSBzbG90Lm1vZHVsZU5hbWVzcGFjZVNsb3QoKSkKKyAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHByb3Bl
cnR5TmFtZSwganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oYmFzZUNlbGwpLCBtb2R1
bGVOYW1lc3BhY2VTbG90LT5lbnZpcm9ubWVudCwgU2NvcGVPZmZzZXQobW9kdWxlTmFtZXNwYWNl
U2xvdC0+c2NvcGVPZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFu
ZXdDYXNlKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5p
c1Vuc2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisKKyAg
ICAgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOworICAgICAgICAgICAg
aWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaXNQcml2YXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+
KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFs
dWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFj
dGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKKyAgICAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0
ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICAg
ICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCisgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICYmIHNsb3QuaXND
YWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJh
c2VWYWx1ZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQor
ICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rp
b24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYo
bG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZlB0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisKKyAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ3VzdG9tKCkgJiYg
c2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgIC8vIFRvIGNh
Y2hlIHNlbGYgY3VzdG9tcywgd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMgYmVjYXVzZSB3
ZQorICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBn
b2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlCisgICAgICAgICAgICAgICAgLy8gY29uc3RhbnQg
ZnVuY3Rpb24gcG9pbnRlci4KKworICAgICAgICAgICAgICAgIGlmICghcHJlcGFyZUNoYWluRm9y
Q2FjaGluZyhnbG9iYWxPYmplY3QsIHNsb3Quc2xvdEJhc2UoKSwgc2xvdC5zbG90QmFzZSgpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0g
YmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5w
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRl
bmVkQmVmb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsgLy8gV2UgbWF5IGhhdmUgY2hhbmdlZCBwcm9wZXJ0
eSBvZmZzZXRzLgorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzbG90
LmlzVW5zZXQoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGtpbmQgaXMgR2V0QnlLaW5k
OjpCeUlkRGlyZWN0IG9yIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUsIHdlIGRvIG5vdCBuZWVkIHRv
IGludmVzdGlnYXRlIHByb3RvdHlwZSBjaGFpbnMgZnVydGhlci4KKyAgICAgICAgICAgICAgICAv
LyBDYWNoZWFiaWxpdHkganVzdCBkZXBlbmRzIG9uIHRoZSBoZWFkIHN0cnVjdHVyZS4KKyAgICAg
ICAgICAgICAgICBpZiAoa2luZCAhPSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3QgJiYgIWlzUHJpdmF0
ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+Zmxh
dHRlbmVkRGljdGlvbmFyeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkg
b2Zmc2V0cyBtYXkgaGF2ZSBjaGFuZ2VkIGR1ZSB0byBmbGF0dGVuaW5nLiBXZSdsbCBjYWNoZSBs
YXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3Qs
IGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJl
KHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gb2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZvciBmYXN0ZXIgYWNj
ZXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51
bGxwdHI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIGBp
ZmAgc2hvdWxkIGJlIGluc2lkZSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eUJsYWguCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg1MjE1CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0
ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29u
ZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZS51aWQoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGdldHRlciA9IG51bGxwdHI7CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgIGdldHRlciA9IGpz
RHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBzbG90LmdldHRlclNldHRlcigpLT5nZXR0ZXIo
KSk7CisKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlOworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAm
JiBzbG90LmRvbUF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSA9IHNs
b3QuZG9tQXR0cmlidXRlKCk7CisKKyAgICAgICAgICAgIGlmIChraW5kID09IEdldEJ5S2luZDo6
VHJ5QnlJZCkgeworICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsK
KyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2Fz
ZTo6TWlzczsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXRHZXR0ZXI7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwg
c3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hw
b2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKHN0dWJJbmZvLCBnZXR0ZXIsIHN0
cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBnZXR0ZXIsIFdURk1vdmUocHJvdG90eXBl
QWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChp
c1ByaXZhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNsb3QuaXNV
bnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaXNQcm94eSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6OkxvYWQsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIGlzUHJveHksIHNsb3Qud2F0Y2hwb2lu
dFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNVbnNldCgpID8gQWNjZXNzQ2FzZTo6TWlzcyA6IEFjY2Vz
c0Nhc2U6OkxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsIG9mZnNl
dCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0
Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlw
ZSB0eXBlOworICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigp
KQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0g
QWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1
ZUdldHRlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OkJ5
SWRXaXRoVGhpcyAmJiB0eXBlID09IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyICYm
IGRvbUF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBl
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJn
ZXRGcm9tUHJveHksCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQo
KSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQ
dHJUYWc+KHNsb3QuY3VzdG9tR2V0dGVyKCkpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LnNsb3RCYXNlKCkgIT0gYmFz
ZVZhbHVlID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvbUF0dHJpYnV0ZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExPR19JQygo
SUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZt
KSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90
QmFzZSgpID09IGJhc2VWYWx1ZSkpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFj
Y2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmlj
dCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1
bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpH
ZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAg
IGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRX
aXRoVGhpczoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgICAgICAg
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6CisgICAgICAgICAgICBjYXNlIEdldEJ5S2lu
ZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgICAgICBj
YXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2
bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hv
dWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2
b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgR2V0QnlLaW5kIGtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZUdldEJ5KGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtp
bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKK30KKworCitz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgIGlmICghaW5kZXguaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAg
ICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3ND
YXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChiYXNlLT50eXBlKCkgPT0g
RGlyZWN0QXJndW1lbnRzVHlwZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkRGlyZWN0QXJndW1lbnRzTG9hZDsKKyAgICAgICAgZWxzZSBpZiAoYmFzZS0+dHlw
ZSgpID09IFNjb3BlZEFyZ3VtZW50c1R5cGUpCisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFNjb3BlZEFyZ3VtZW50c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJh
c2UtPnR5cGUoKSA9PSBTdHJpbmdUeXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOworICAgICAgICBlbHNlIGlmIChpc1R5cGVkVmlldyhi
YXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4TG9hZDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50
OENsYW1wZWRMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
eXBlSW50MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5SW50MTZMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5Rmxv
YXQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVG
bG9hdDY0OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUZsb2F0NjRMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJ
QworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNl
IFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZEludDMyTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzTG9hZDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VMb2FkOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChy
ZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElk
ZW50aWZpZXIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZt
LCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxk
R2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lk
IHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheUdldEJ5VmFsKGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2Fj
aGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0
eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAg
ICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAg
ICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoK
KyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAg
ICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAg
ICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3
aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFT
U0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZp
ZWxkR2VuZXJpYzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorICAg
IC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKGNvbnN0
IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRL
aW5kKQoreworICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5
SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToK
KyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHN3aXRjaCAocHV0
S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQo
c2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlW
YWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRP
cHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gTWFrZSB3
aW4gcG9ydCBjb21waWxlciBoYXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJs
ZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBw
dXRLaW5kKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICB7CisgICAgICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVj
dC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
YmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCisgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRy
eSB0byBkbyBzb21ldGhpbmcgc21hcnRlciBoZXJlLi4uCisgICAgICAgIGlmIChpc0NvcHlPbldy
aXRlKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgIC8vIFdlIGNhbid0IGVuZCB1cCBzdG9yaW5nIHRvIGEgQ29X
IG9uIHRoZSBwcm90b3R5cGUgc2luY2UgaXQgc2hvdWxkbid0IG93biBwcm9wZXJ0aWVzLgorICAg
ICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc2xvdC5iYXNlKCktPmluZGV4aW5nTW9kZSgpKSk7
CisKKyAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFi
bGUoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgYm9vbCBpc1Byb3h5
ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5n
UHJveHlUeXBlKSB7CisgICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFz
ZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxsOworICAg
ICAgICAgICAgaXNQcm94eSA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBv
bmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHkuIFdlIGRv
bid0CisgICAgICAgICAgICAvLyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2JhbCBvYmpl
Y3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgICAgICAvLyBp
biBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGJvb2wgaXNDYWNoZWFi
bGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBlKCkgPT0gUHV0UHJv
cGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKTsKKyAgICAgICAgICAgIGlmICghaXNDYWNoZWFibGVQcm94eSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1Byb3h5
ICYmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCB8fCBwdXRLaW5k
ID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkpCisgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsK
KworICAgICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFi
bGVQdXQoKSkgeworICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0IGhl
bHBzIGNhdGNoIGJ1Z3MgaWYgd2UgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBkaXNhYmxlIGNhY2hp
bmcKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHRyYW5zaXRpb24gdGhlbiBzdG9yZSB0byBh
biBleGlzdGluZyBwcm9wZXJ0eS4gVGhpcyBpcyBjb21tb24gYW1vbmcKKyAgICAgICAgICAgICAg
ICAvLyBwYXRocyB0aGF0IHJlaWZ5IGxhenkgcHJvcGVydGllcy4gSWYgd2UgcmVpZnkgYSBsYXp5
IHByb3BlcnR5IGFuZCBmb3JnZXQKKyAgICAgICAgICAgICAgICAvLyB0byBkaXNhYmxlIGNhY2hp
bmcsIHdlIG1heSBjb21lIGRvd24gdGhpcyBwYXRoLiBUaGUgUmVwbGFjZSBJQyBkb2VzIG5vdAor
ICAgICAgICAgICAgICAgIC8vIGtub3cgaG93IHRvIG1vZGVsIHRoZXNlIHR5cGVzIG9mIHN0cnVj
dHVyZSB0cmFuc2l0aW9ucyAob3IgYW55IHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIHRy
YW5zaXRpb24gZm9yIHRoYXQgbWF0dGVyKS4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gb2xkU3RydWN0dXJlKTsKKwor
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50
KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAg
ICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAg
ICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQor
ICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgeworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xk
U3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50
LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6
aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9j
aywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2Ug
PSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
UmVwbGFjZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvbGRTdHJ1Y3R1cmUs
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIGlzUHJveHkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWlzUHJveHkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKKwor
ICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBvbGQgc3RydWN0dXJlIGlzIGRpY3Rpb25hcnksIGl0IG1lYW5zIHRoYXQgdGhpcyBpcyBv
bmUtb24tb25lIGJldHdlZW4gYW4gb2JqZWN0IGFuZCBhIHN0cnVjdHVyZS4KKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIE5ld1Byb3BlcnR5IG9wZXJhdGlvbiwgZ2VuZXJhdGluZyBJQyBm
b3IgdGhpcyBkb2VzIG5vdCBvZmZlciBhbnkgYmVuZWZpdCBiZWNhdXNlIHRoaXMgdHJhbnNpdGlv
biBuZXZlciBoYXBwZW5zIGFnYWluLgorICAgICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOworCisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRl
bnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUp
LCBvZmZzZXQpOworICAgICAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBKU09iamVj
dDo6cHV0IGlzIG92ZXJyaWRkZW4gYnkgVXNlck9iamVjdCwgVXNlck9iamVjdDo6cHV0IHBlcmZv
cm1zIHNpZGUtZWZmZWN0IG9uIEpTT2JqZWN0OjpwdXQsIGFuZCBpdCBuZWdsZWN0cyB0byBtYXJr
IHRoZSBQdXRQcm9wZXJ0eVNsb3QgYXMgbm9uLWNhY2hhZWJsZSwKKyAgICAgICAgICAgICAgICAv
LyB0aGVuIGFyYml0cmFyeSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgY2FuIGhhcHBlbiBkdXJpbmcg
dGhlIHB1dCBvcGVyYXRpb24sIGFuZCB0aGlzIGdlbmVyYXRlcyB3cm9uZyB0cmFuc2l0aW9uIGlu
Zm9ybWF0aW9uIGhlcmUgYXMgaWYgb2xkU3RydWN0dXJlIC0+IG5ld1N0cnVjdHVyZS4KKyAgICAg
ICAgICAgICAgICAvLyBJbiByZWFsaXR5LCB0aGUgdHJhbnNpdGlvbiBpcyBvbGRTdHJ1Y3R1cmUg
LT4gc29tZXRoaW5nIHVua25vd24gc3RydWN0dXJlcyAtPiBiYXNlVmFsdWUncyBzdHJ1Y3R1cmUu
CisgICAgICAgICAgICAgICAgLy8gVG8gZ3VhcmQgYWdhaW5zdCB0aGUgZW1iZWRkZXIncyBwb3Rl
bnRpYWxseSBpbmNvcnJlY3QgVXNlck9iamVjdDo6cHV0IGltcGxlbWVudGF0aW9uLCB3ZSBzaG91
bGQgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uIGFuZCBpZiBmb3VuZCwgYW5kIGdpdmUgdXAgb24g
Y2FjaGluZyB0aGUgcHV0LgorICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSh2bSkgPT0gbmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAo
YmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pICE9IG5ld1N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBB
U1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90
eXBlQWNjZXNzQ2hhaW47CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtpbmQ6
Ok5vdERpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJl
cGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNo
ZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9i
amVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFw
cm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
U2V0dGVyTWlzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoaWRlbnQuaXNQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCBjb2RlQmxvY2ssIGds
b2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlVHJhbnNpdGlvbih2bSwgY29kZUJsb2Nr
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIHN0dWJJbmZvKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwg
c2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0OworICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3ND
aGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZSBhIHNlbGYgY3VzdG9tLCBzaW5jZSB3ZSBtdXN0IGRp
c2FsbG93IGRpY3Rpb25hcmllcworICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0
byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9tIGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNoZSB0aGUg
Y29uc3RhbnQKKyAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBwb2ludGVyLgorICAgICAgICAg
ICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9i
amVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhY2hl
U3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAg
ICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0
cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBz
bG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlB
dHRyaWJ1dGU6Ok5vbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNDdXN0b21BY2Nlc3Nvcigp
ID8gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXIgOiBBY2Nlc3NDYXNlOjpDdXN0b21W
YWx1ZVNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAg
ICAgIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbiksIGlzUHJveHksIHNsb3QuY3VzdG9tU2V0dGVyKCkucmV0YWdnZWQ8Q3VzdG9tQWNjZXNz
b3JQdHJUYWc+KCksIHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3QuYmFzZSgpIDogbnVs
bHB0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzbG90
LmlzQ2FjaGVhYmxlU2V0dGVyKCkpOworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFz
ZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6
dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBiYXNlQ2VsbC0+
c3RydWN0dXJlKHZtKSktPmdldCh2bSwgaWRlbnQuaW1wbCgpLCBhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpIHx8ICEoYXR0cmli
dXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBzbG90LmJhc2Uo
KSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY29uZGl0aW9uU2V0LnNs
b3RCYXNlQ29uZGl0aW9uKCkuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vz
c29yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNl
dCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nh
c2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nh
c2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/
IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBX
VEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2Rl
KCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAs
IG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7CisKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBTdXBl
clNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgCisgICAgaWYgKHRy
eUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQs
IHB1dEtpbmQpKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0S2luZCkKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAg
ICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vz
c0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJh
c2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDhDbGFtcGVkU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVJbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9y
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5RmxvYXQzMlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFy
cmF5IGluIElDCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkg
JiBJbmRleGluZ1NoYXBlTWFzazsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkg
eworICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFn
ZVN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZv
LmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6
OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNj
ZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVt
cCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOworCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50
c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0
cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpT
VmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5k
LCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8sIHB1dEtpbmQpID09
IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2Vu
ZXJpYykpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRl
UHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIGlmIChmb3JjZUlD
RmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7CisgICAgICAgIGlmICghYmFzZVZhbHVl
LmlzT2JqZWN0KCkgfHwgIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpIHx8IG9sZFN0cnVjdHVyZS0+aXNQcm94eSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlRGVsZXRlKCkpCisgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBpZiAoYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmIChi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBqc0Nh
c3Q8SlNPYmplY3QqPihiYXNlVmFsdWUpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7Cisg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOworCisgICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworCisg
ICAgICAgIGlmIChzbG90LmlzRGVsZXRlSGl0KCkpIHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG5ld09mZnNldCA9IGludmFsaWRPZmZzZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0
aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgp
LCBuZXdPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIGlmICghbmV3U3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgfHwgbmV3U3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgIEFTU0VSVChuZXdPZmZzZXQgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAg
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsK
KyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkgPT0gVHJh
bnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOworICAgICAgICAgICAgQVNTRVJUKG5ld1N0
cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChu
ZXdPZmZzZXQpKTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVEZWxl
dGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBuZXdPZmZzZXQsIG9sZFN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlKTsKKyAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzTm9uY29uZmlndXJhYmxl
KCkpIHsKKyAgICAgICAgICAgIGlmIChlY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0ZU5vbkNvbmZpZ3Vy
YWJsZSwgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVs
bHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVNaXNzLCBwcm9wZXJ0eU5h
bWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwgeyB9LCBudWxscHRyKTsKKworICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGVjbWFNb2RlLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisg
ICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkRlbEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
KworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDog
UmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90
JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IERlbEJ5S2luZCBraW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworCisgICAgaWYgKHRyeUNhY2hlRGVsZXRlQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIHNsb3QsIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHN0dWJJbmZv
LCBraW5kLCBlY21hTW9kZSkgPT0gR2l2ZVVwT25DYWNoZSkgeworICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhHZW5lcmljLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxs
KGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFt
ZS51aWQoKSkpKTsKKyAgICAgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQorICAgICAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25E
ZWxldGVCeUlkR2VuZXJpYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxHZW5lcmlj
KTsKKyAgICB9Cit9CisKK2lubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJv
cHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQoreworICAgIHN3aXRj
aCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICBjYXNlIEluQnlLaW5kOjpQcml2
YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5jdGlv
bihJbkJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtp
bmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5SWRHZW5lcmljOworICAgIGNh
c2UgSW5CeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeVZhbEdlbmVy
aWM7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25IYXNQcml2YXRlTmFtZUdlbmVyaWM7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnko
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKKyAgICBi
b29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7CisK
KyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkp
CisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8
ICghd2FzRm91bmQgJiYgIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGVGb3JBYnNlbmNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgIAorICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIGlmICghc2xv
dC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2Ut
PnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNz
Q2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICAg
ICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Cisg
ICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAgICAgICAg
IHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgor
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQK
KyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAg
ICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCisgICAgICAgICAgICAgICAgJiYgIXNsb3Qu
d2F0Y2hwb2ludFNldCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQ
YXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBi
YXNlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5
SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
IHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
c2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3Rh
dHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOwor
ICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+Zmxh
dHRlbmVkRGljdGlvbmFyeSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKKworICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykg
eworICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0Fj
Y2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4t
PnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90
b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFs
T2JqZWN0LCBiYXNlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgIGlmIChj
YWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3Qs
IGJhc2UsIHNsb3QpOworICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4p
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQg
PyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgcHJvcGVydHlOYW1lLCB3
YXNGb3VuZCA/IHNsb3QuY2FjaGVkT2Zmc2V0KCkgOiBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworCisgICAgICAg
IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2Fz
ZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgaWYgKGtpbmQgPT0g
SW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNv
ZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNo
SW5CeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBi
b29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
CisgICAgaWYgKHRyeUNhY2hlSW5CeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVj
dCwgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVV
cE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoR2VuZXJp
YywgYmFzZU9iamVjdC0+Y2xhc3NJbmZvKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6
OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rp
b24oa2luZCkpOworICAgIH0KK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
SGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBi
b29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElE
LnVpZCgpKTsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xv
YmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKworICAgICAgICBJ
bmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKKyAgICAg
ICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rp
b247CisKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIExPR19J
QygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6
OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBicmFuZElELCBpbnZhbGlkT2Zmc2V0LCBzdHJ1
Y3R1cmUsIHsgfSwgeyB9KTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwg
YnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0
ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdp
dGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsK
KworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIGJvb2wgd2FzRm91
bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisKKyAgICBpZiAodHJ5Q2FjaGVIYXNQcml2YXRl
QnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHdhc0Zv
dW5kLCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRHZW5lcmlj
KTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQ2hlY2tQcml2YXRlQnJh
bmQoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVy
IGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7
CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24g
YWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24gIT0g
QXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAgICAgIGJv
b2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNr
UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQs
IGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpjcmVhdGVDaGVja1ByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElE
LCBzdHJ1Y3R1cmUpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
bG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFu
ZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNv
bWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6Q2hlY2tQcml2YXRlQnJh
bmRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQ
cm9wZXJ0eSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsK
KyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNp
bmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29k
ZUJsb2NrLCByZXN1bHQpOworCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/
IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaENoZWNr
UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElE
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlQ2hlY2tQcml2YXRl
QnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHN0dWJJ
bmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisK
K3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVNldFByaXZhdGVCcmFuZCgKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmpl
Y3QqIGJhc2UsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJy
YW5kSUQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsK
KyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51
aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2Jh
bE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOworCisgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKwor
ICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNl
KTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJl
dHVybiBhY3Rpb247CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6c2V0QnJhbmRUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3Vy
cmVudGx5KG9sZFN0cnVjdHVyZSwgYnJhbmRJRC51aWQoKSk7CisgICAgICAgIGlmICghbmV3U3Ry
dWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgaWYg
KG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9s
ZFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5k
KCkgPT0gVHJhbnNpdGlvbktpbmQ6OlNldEJyYW5kKTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVj
dHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAgIAorICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5
ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRBZGRBY2Nl
c3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZVNldFByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElELCBvbGRTdHJ1Y3R1cmUsIG5l
d1N0cnVjdHVyZSk7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShs
b2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5k
SUQsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29t
ZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRS
ZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQ
cm9wZXJ0eSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBz
dHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1bHQuc2hv
dWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2
b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsICBicmFuZElELCBzdHViSW5mbykg
PT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRHZW5lcmljKTsKK30KKworc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5zdGFuY2VPZigKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVl
LCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisg
ICAgYm9vbCB3YXNGb3VuZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgCisgICAgUkVMRUFTRV9BU1NF
UlQodmFsdWVWYWx1ZS5pc0NlbGwoKSk7IC8vIHNob3VsZENvbnNpZGVyQ2FjaGluZyByZWplY3Rz
IG5vbi1jZWxscy4KKyAgICAKKyAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgCisgICAgeworICAgICAgICBHQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAg
ICAgIAorICAgICAgICBKU0NlbGwqIHZhbHVlID0gdmFsdWVWYWx1ZS5hc0NlbGwoKTsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
UmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3RvdHlwZVZhbHVlKTsKKyAgICAgICAg
aWYgKHByb3RvdHlwZSkgeworICAgICAgICAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4odm0sIHZhbHVlKSkgeworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5jZU9mQWNj
ZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpJbnN0YW5jZU9mTWlzcywgc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCgpLAorICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChzdHJ1Y3R1cmUtPnByb3RvdHlwZVF1ZXJpZXNBcmVDYWNoZWFibGUoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUZWFjaCB0aGlzIHRvIGRvIHBvbHkgcHJvdG8uCisgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
NTY2MworICAgICAgICAgICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0
LCB2YWx1ZSwgd2FzRm91bmQgPyBwcm90b3R5cGUgOiBudWxscHRyKTsKKyAgICAgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JJbnN0YW5jZU9mKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvdG90eXBlLCB3YXNGb3VuZCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICB3YXNGb3Vu
ZCA/IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZIaXQgOiBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlz
cywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBwcm90
b3R5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKCFuZXdDYXNlKQorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJp
YywgQ2FjaGVhYmxlSWRlbnRpZmllcigpKTsKKyAgICAgICAgCisgICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5zdGFuY2VPZkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElk
ZW50aWZpZXIoKSkpOworICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNj
ZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0
KCksIG51bGxwdHIsIFdURk1vdmUobmV3Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHJl
c3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
Okluc3RhbmNlT2ZSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50
aWZpZXIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2
bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30K
Kwordm9pZCByZXBhdGNoSW5zdGFuY2VPZigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHBy
b3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgYm9vbCB3YXNG
b3VuZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CisgICAgaWYgKHRyeUNhY2hlSW5zdGFuY2VPZihnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgdmFs
dWVWYWx1ZSwgcHJvdG90eXBlVmFsdWUsIHN0dWJJbmZvLCB3YXNGb3VuZCkgPT0gR2l2ZVVwT25D
YWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7Cit9CisKK3ZvaWQgbGlua0RpcmVjdENhbGwoCisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2Rl
QmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwor
ICAgIAorICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKKworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBB
U1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0Q29k
ZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNh
bGxlZUNvZGVCbG9jaykpOworICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVy
Q29kZUJsb2NrKSkKKyAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2Rl
T3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8g
IiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2Rl
UHRyLCAiXG4iKTsKKworICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKKworICAgIGlmIChjYWxsZWVD
b2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxs
RnJhbWUsICZjYWxsTGlua0luZm8pOworfQorCit2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7
CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIGxpbmtTbG93
Rm9yKHZtLCBjYWxsTGlua0luZm8pOworfQorCitzdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihW
TSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
K3sKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
OworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9j
aygpOworCisgICAgZGF0YUxvZ0xuSWYoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNv
ZGVCbG9jayksCisgICAgICAgICJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCBGdWxsQ29kZU9y
aWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCkpKTsKKworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5r
ID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkpOworICAgIHJl
dmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBjYWxsTGlua0lu
Zm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOworfQorCituYW1lc3BhY2Ugeworc3RydWN0IENhbGxU
b0NvZGVQdHIgeworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworfTsKK30gLy8gYW5ub255bW91cyBu
YW1lc3BhY2UKKwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlu
a0luZm8uYWxsb3dTdHVicygpKTsKKworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
CisgICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBsaW5rUG9seW1vcnBoaWNDYWxsLCB3ZSBzdHJv
bmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBHQy4KKyAgICAvLyBHQyBqZXR0aXNvbnMgQ29k
ZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8gZXRjLiBhbmQgYnJlYWtzIGFzc3VtcHRpb24g
ZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2FsbC4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRl
ZmVyR0NGb3JBV2hpbGUodm0pOworICAgIAorICAgIGlmICghbmV3VmFyaWFudCkgeworICAgICAg
ICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZv
ciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCisgICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3Vy
ZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgp
LmlzQ2VsbCgpKTsKKworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJh
bWUtPmNvZGVCbG9jaygpOworICAgIGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlN
b2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKTsKKworICAgIC8vIFdlYkFzc2Vt
Ymx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxs
KiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5j
YWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgQVNTRVJUKG93bmVyKTsK
KworICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OworICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgIGxpc3QgPSBzdHVi
LT52YXJpYW50cygpOworICAgIGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlu
a0luZm8uY2FsbGVlKCkpCisgICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3QgeyBDYWxsVmFy
aWFudChvbGRDYWxsZWUpIH07CisgICAgCisgICAgbGlzdCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlh
bnQobGlzdCwgbmV3VmFyaWFudCk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNsb3N1cmUg
Y2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCBhbGwgb2YgdGhlbSBhcyBjbG9zdXJl
IGNhbGxzLgorICAgIC8vIFRoaXMgbWFrZXMgc3dpdGNoaW5nIG9uIGNhbGxlZSBjaGVhcGVyLiBJ
dCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0J3MgZWFzaWVyIG9uIHRoZSBERkc7CisgICAg
Ly8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50IHRvIGRlYWwgd2l0aCBhIGNvbWJpbmF0aW9u
IG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNhbGxlZXMuCisgICAgYm9vbCBpc0Nsb3N1cmVD
YWxsID0gZmFsc2U7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgIHsKKyAg
ICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7CisgICAgICAgICAgICBsaXN0ID0g
ZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsKKyAgICAgICAgICAgIGlzQ2xvc3VyZUNhbGwg
PSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
aWYgKGlzQ2xvc3VyZUNhbGwpCisgICAgICAgIGNhbGxMaW5rSW5mby5zZXRIYXNTZWVuQ2xvc3Vy
ZSgpOworICAgIAorICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7Cisg
ICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7CisgICAgCisgICAgLy8gRmlndXJlIG91dCB3
aGF0IG91ciBjYXNlcyBhcmUuCisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkg
eworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmICh2
YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFudC5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0
aW9uKCkpIHsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdmFyaWFu
dC5leGVjdXRhYmxlKCk7CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgICAg
IC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGVpdGhlciBiZWNhdXNlIHdlIGRvbid0
IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBhcml0eSBtaXNtYXRjaCwKKyAgICAgICAgICAg
IC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEg
dmlydHVhbCBjYWxsLgorICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2sgfHwgY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmlzVmFyYXJncygpKSB7CisgICAg
ICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7CisgICAgICAgIGlmIChpc0Nsb3N1cmVDYWxs
KSB7CisgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
cmlhbnQuZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQg
YSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCisgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MzEx
CisgICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbiA9IHZh
cmlhbnQuZnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuaW50ZXJu
YWxGdW5jdGlvbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkg
eworICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMuY29udGFpbnMobmV3Q2FzZVZhbHVlKSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9SOiBBdHRlbXB0IHRvIGFkZCBkdXBsaWNhdGUg
Y2FzZSB2YWx1ZS5cbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4aXN0aW5nIGNhc2Ug
dmFsdWVzOiAiKTsKKyAgICAgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhc2VWYWx1ZXMpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8gYWRkOiAiLCBuZXdDYXNl
VmFsdWUsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhbnQgbGlzdDogIiwg
bGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNh
bGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50LCBjb2RlQmxvY2spKTsK
KyAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3Q2FzZVZhbHVlKTsKKyAgICB9CisgICAgQVNT
RVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZhbHVlcy5zaXplKCkpOworCisgICAgLy8gSWYg
d2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVzZSBhIG5vcm1hbCB2aXJ0dWFsIGNhbGwuCisg
ICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplOworICAgIGlmIChp
c1dlYkFzc2VtYmx5KQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUg
PSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JXZWJBc3NlbWJs
eVRvSlMoKTsKKyAgICBlbHNlIGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjp0b3BUaWVySklUKCkpCisgICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0
U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZvclRvcFRp
ZXIoKTsKKyAgICBlbHNlCisgICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6
ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSgpOworCisgICAg
Ly8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQgb2YgY2FsbENhc2VzLnNpemUoKSBiZWNhdXNl
IHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBmb3Igbm93LgorICAgIGlmIChsaXN0LnNpemUo
KSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSkgeworICAgICAgICBsaW5rVmly
dHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+IGNhbGxzKGNhbGxDYXNlcy5zaXplKCkp
OworICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBmYXN0Q291bnRzOworCisgICAgaWYgKCFpc1dl
YkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OnRvcFRp
ZXJKSVQoKSkgeworICAgICAgICBmYXN0Q291bnRzID0gbWFrZVVuaXF1ZUFycmF5PHVpbnQzMl90
PihjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgbWVtc2V0KGZhc3RDb3VudHMuZ2V0KCksIDAs
IGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICB9CisgICAgCisgICAg
R1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKTsKKworICAgIGJvb2wg
aXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRhSUMoKTsKKyAgICBDQ2FsbEhlbHBlcnMgc3R1
YkppdChjYWxsZXJDb2RlQmxvY2spOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNo
dWZmbGVyPiBmcmFtZVNodWZmbGVyOworICAgIGlmIChjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxl
RGF0YSgpKSB7CisgICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKTsKKyAg
ICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZXI+KHN0dWJK
aXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBj
YWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCisgICAgICAgIC8vIHVzZSB0aGUgYWRkaXRpb25h
bCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPmFzc3VtZUNh
bGxlZUlzQ2VsbCgpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPmxvY2tHUFIoY2Fs
bGVlR1BSKTsKKyAgICB9CisKKyAgICBHUFJSZWcgY29tcGFyaXNvblZhbHVlR1BSOworICAgIGlm
IChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICAg
ICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBBc3NlbWJseUhlbHBl
cnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29t
cGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOworCisgICAgR1BSUmVnIGZhc3RDb3VudHNCYXNl
R1BSOworICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9
IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZmFzdENv
dW50c0Jhc2VHUFIgPQorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7CisgICAg
fQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50
cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKKworICAgIGlmICghZnJhbWVTaHVmZmxlciAm
JiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIC8vIFdlIHN0cm9uZ2x5IGFz
c3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBjYWxsZWUgc2F2ZSByZWdpc3RlciBpbiB0aGUg
c2xvdyBwYXRoLgorICAgICAgICBBU1NFUlQoIWNhbGxlckNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOworICAgICAgICBzdHViSml0LmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOworICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdl
IGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4K
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwo
KSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChj
YWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSKSk7
CisjZWxzZQorICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRo
ZSBjYWxsZWUgaXMgYSBjZWxsLgorI2VuZGlmCisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBh
ZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCisg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVl
R1BSKSk7CisKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
YWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIGNv
bXBhcmlzb25WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IHN0dWJKaXQu
YnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNvbXBhcmlzb25WYWx1ZUdQUiwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb21wYXJpc29uVmFsdWVH
UFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBoYXNFeGVjdXRhYmxl
LmxpbmsoJnN0dWJKaXQpOworICAgIH0KKworICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2go
Y29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgIHdoaWxlIChiaW5hcnlTd2l0Y2gu
YWR2YW5jZShzdHViSml0KSkgeworICAgICAgICBzaXplX3QgY2FzZUluZGV4ID0gYmluYXJ5U3dp
dGNoLmNhc2VJbmRleCgpOworICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9
IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworICAgICAgICBpZiAodmFy
aWFudC5leGVjdXRhYmxlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFi
bGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNv
ZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwgY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9u
S2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOworICAgICAgICAgICAgaWYgKCFjb2RlUHRyKQor
ICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmludGVybmFsRnVu
Y3Rpb24oKSk7CisgICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlv
blRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoZmFzdENvdW50cykgeworICAgICAgICAgICAgc3R1YkppdC5hZGQzMigKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNhc2VJbmRleCAqIHNpemVv
Zih1aW50MzJfdCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbmVlZHNEb25lSnVtcCA9
IGZhbHNlOworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikgeworICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+c25hcHNob3QoKSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0
Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxD
YWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwor
ICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwo
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0RhdGFJQykKKyAgICAgICAg
ICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxs
ID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIG5lZWRzRG9uZUp1bXAgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0u
Y29kZVB0ciA9IGNvZGVQdHI7CisgICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKSB7CisgICAgICAg
ICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQu
anVtcCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZzdHVi
Sml0KTsKKyAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKKwor
ICAgIGlmIChmcmFtZVNodWZmbGVyKSB7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VH
UFIoY2FsbGVlR1BSKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJp
c29uVmFsdWVHUFIpOworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3Vu
dHNCYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBmcmFtZVNodWZmbGVy
LT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApKTsKKyNlbHNlCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFs
dWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CisjZW5kaWYKKyAgICAgICAgZnJh
bWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgfQorICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BS
SW5mbzo6cmVnVDMpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIDEuIElmIGl0IGlz
IG5vdCBEYXRhSUMsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlv
bi4KKyAgICAvLyAyLiBJZiBpdCBpcyB0YWlsLWNhbGwsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9p
bnRpbmcgdGhlIGRvbmVMb2NhdGlvbiBmb3Igc2xvdy1jYWxsIGNhc2UuCisgICAgLy8gVGh1cyB3
ZSBuZWVkIHRvIHB1dCBpdCBmb3IgdGhlIHNsb3ctcGF0aCBjYWxsLgorICAgIGlmICghaXNEYXRh
SUMpIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
YWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwg
R1BSSW5mbzo6cmVnVDQpOworICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
aXNEYXRhSUMpOworICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAg
ICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bS5nZXRD
VElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5jb2RlKCkudW50YWdnZWRF
eGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICAgICAgc3R1Ykpp
dC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQu
anVtcCgpOworICAgICAgICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93
bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKKyAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAg
ICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkg
PT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6
IGNhbGxzKSB7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgICAgIC8vIFRhaWwgY2FsbCBzcGVj
aWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEg
dGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJlc3MKKyAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNv
cmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGgg
YSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KKyAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRv
Q29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOworICAgICAg
ICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFM
b2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxK
U0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQpKSk7CisjZWxzZQorICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4o
Y2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIWRvbmUu
ZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOworICAgIH0KKyAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2
bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7
CisgICAgCisgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICAgICAg
Y2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAg
ICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0
YXJnZXRzICVzIiwKKyAgICAgICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5
IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25l
TG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAorICAgICAgICB2bSwgb3duZXIsIGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCisgICAgICAgIFdU
Rk1vdmUoZmFzdENvdW50cykpKTsKKworICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMg
dW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0IHN0aWxsCisgICAgLy8gcmVhY2hhYmxlIG9uIDMy
LWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKKyAgICAvLyB0cmlnZ2Vy
IHRoZSBzbG93IHBhdGgKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKworICAg
IC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3
aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCisgICAgLy8gdGhhdCBpdCdz
IG5vIGxvbmdlciBvbiBzdGFjay4KKyAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0
dWJSb3V0aW5lKSk7CisgICAgCisgICAgLy8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBo
YXMgYSBjYWxsIGNhY2hlIGFwYXJ0IGZyb20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNh
bGwKKyAgICAvLyBzdHViLgorICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAg
ICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQp
Cit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhU
aGlzOgorICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgIGNhc2UgR2V0QnlLaW5kOjpC
eUlkRGlyZWN0OgorICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
byk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKKyAgICBjYXNl
IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCit7
CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICB1
c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSBy
ZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxv
Y2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZp
bmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKKyAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5
cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5jdGlvblR5
cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihy
ZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOworICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVBy
aXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOworICAg
ICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0
UHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24p
OworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lk
IHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgRGVsQnlLaW5kIGtpbmQpCit7CisgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlk
KQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CisgICAgZWxzZQorICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUp
OworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKK30KKwordm9pZCByZXNldEluQnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2lu
ZCkKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihraW5kKSk7CisgICAgaWYgKGtpbmQgPT0gSW5C
eUtpbmQ6OkJ5SWQpCisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgZWxzZQorICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbnN0YW5j
ZU9mKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUpOworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5B
Y2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKK30KKwordm9p
ZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKKyNlbmRpZgor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkzYTAzNjUzMjZhYmZiZWRlZTA1NzU4OWM0NTQwOWIyZWIzNjU4OTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCitlbnVtIGNs
YXNzIEdldEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKKyAgICBUcnlCeUlkLAorICAg
IEJ5SWRXaXRoVGhpcywKKyAgICBCeUlkRGlyZWN0LAorICAgIFByaXZhdGVOYW1lLAorICAgIFBy
aXZhdGVOYW1lQnlJZCwKK307CisKK2VudW0gY2xhc3MgUHV0QnlLaW5kIHsKKyAgICBCeUlkLAor
ICAgIEJ5VmFsLAorfTsKKworZW51bSBjbGFzcyBEZWxCeUtpbmQgeworICAgIEJ5SWQsCisgICAg
QnlWYWwKK307CisKK2VudW0gY2xhc3MgSW5CeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWws
CisgICAgUHJpdmF0ZU5hbWUKK307CisKK3ZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9i
YWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVj
dHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlW
YWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5k
ZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNo
UHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2Jh
bE9iamVjdCosIENvZGVCbG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVj
dHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5k
LCBFQ01BTW9kZSk7Cit2b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQgcmVwYXRj
aEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0Kiwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7
Cit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsK
K3ZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayos
IEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1
YkluZm8mKTsKK3ZvaWQgcmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8m
LCBib29sIHdhc0ZvdW5kKTsKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFt
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxG
cmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYpOwordm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7Cit2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBD
YWxsVmFyaWFudCk7Cit2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBHZXRCeUtpbmQpOwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJiwgUHV0QnlLaW5kKTsKK3ZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7Cit2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJh
bmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZnRsVGh1bmtBd2FyZVJl
cGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4s
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOworTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqIGNhbGxlZSk7CisKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5l
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJlZmU3YjFiMzM3NjRiZGY0MmIyZTRmMDJkNGRmMGNkOWU4MWM0OWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aElubGluZXMuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVwYXRjaC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0
Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1l
LCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CisK
KyAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2Fs
bCkgeworICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIGNhbGxlZSk7Cisg
ICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7CisKKyAg
ICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2ZSkgeworICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOwor
ICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAg
ICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZl
LmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1l
KTsKKyAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgICAgICAg
ICAgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNhbGxEYXRh
LnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3Qs
IGNhbGxlZSkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgdm0u
Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktp
bmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKworICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdl
dENvbnN0cnVjdERhdGEodm0sIGNhbGxlZSk7CisgICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlw
ZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9
PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxl
ZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFs
dWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9i
YWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dH
QzsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxs
UmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgIH0KKworICAgIEFTU0VSVChj
b25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGds
b2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAg
dm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVl
RnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktp
bmQoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwor
CisgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNEaXJlY3QoKSk7CisKKyAgICBK
U1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxs
ZWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihj
YWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CisgICAgICAg
IGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0
aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25U
cmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRy
KTsKKworICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCisgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlu
a0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOworCisgICAgICAgICAg
ICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1
c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxl
ZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1
bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxs
KTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5j
dGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwg
Y2FsbGVlKTsKKyAgICAgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgY29kZVB0ciA9IGV4
ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisKKyAgICAgICAgYXV0
byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7CisgICAgICAgICAgICB2b2lkKiB0aHJv
d1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0
aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAg
ICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxl
LT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0
KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAg
ICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29k
ZUJsb2NrKCk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlv
bjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJsb2Nr
U2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhy
b3dFeGNlcHRpb24oKSk7CisKKyAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Nsb3Q7Cisg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworCisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5
OworICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxs
TGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0
eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWly
ZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
a2luZCwgYXJpdHkpOworICAgIH0KKworICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgp
KQorICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGxp
bmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxv
Y2ssIGNhbGxlZSwgY29kZVB0cik7CisKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZv
LT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVG
cmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpT
VmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxl
ZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1Zh
bHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgeworICAgICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUp
KSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29k
ZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAg
ICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBj
YWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAg
IEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChV
TkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKKyAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKworICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhj
ZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0
Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxp
dHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0
cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOworICAgICAgICAgICAgcmV0dXJu
IGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sq
KiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAg
ICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVj
dXRhYmxlPih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24o
KSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQorICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigKKyAgICAgICAga2luZCwgTXVzdENo
ZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNl
VGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAppbmRleCAwZDE5ZTI3OTA1NmU1ZjM3ZTc3MWM1YzQ5YTJkYjBlNmMyZDg0OGQ3Li5hYzU3MTI3
YmNmODkwNzJiZTAzODQxNmRhMTM5YjQxZjE2NGFlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTQwMyw3ICs0
MDMsNiBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVu
c2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMsCiAKICNkZWZpbmUgQ09VTlQoX19vcCkgbnVt
YmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKICAg
ICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDT1VOVCkKLSAgICAgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ09VTlQpCiAjdW5kZWYg
Q09VTlQKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVu
dHJpZXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyAr
PSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wR2V0QnlJZD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggNDAzOTRhOTQz
OTkyOTkzZjU0NWEyYWM2MmNmNmVkYzA5ZGY1NTVmYS4uMWM1OTA0MmUwZDBjMzgxMWIzYzliZTIx
NThjZGM1NGMwMWRiYjgxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgQ2FjaGVkQ29k
ZUJsb2NrOwogCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5
cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5rSW5mbzsKIAogc3RydWN0IFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDVjNzIwNThk
Y2YyMTk2MGRjZjg1M2UwYTkyYzI3ZTg5YTJkNTZiZWUuLjVlMzJkMmQyNGYxYjNlZDg3MGMzMzBm
MmVmMjNkODVlNGVjZTQ4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAKQEAgLTMxNSw2ICszMTUsMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFi
aWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IEkKICAgICBjYXNlIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNl
IGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
bGlua19jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBv
bGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRf
Z2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6CiAgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVn
aHRfZXhjZXB0aW9uOgogICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRf
Y2FsbF90cmFtcG9saW5lOgpAQCAtMzI1LDYgKzMyOSw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBh
YmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNl
IG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9s
b2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CisgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1
cm5fbG9jYXRpb246CkBAIC0zMzUsNyArMzQxLDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxp
dHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkK
ICAgICBjYXNlIG9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9w
X2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRv
cl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgotICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVy
bl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoK
ICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2Nh
dGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgpAQCAtMzQzLDggKzM0OCw5IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSB3
YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgogICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9u
b190bHM6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NhbGw6Ci0gICAgY2FzZSBqc190cmFt
cG9saW5lX29wX3RhaWxfY2FsbDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0
OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBqc190
cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9pdGVyYXRvcl9uZXh0OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVu
OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3c6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXgg
YjQ1MWNkYjYxZjdhMTFiMzMwMmMxODVjNjZiZmYxN2E5ZmRiZTA5Zi4uZTcyMmY5ZWJkYWNjODkz
NjkwNjU2ZDViNjNlOWY2MjQ0NDYxNWY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMTY2LDEwICsxNjYs
MTAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJS
ZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICBq
dW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KTsK
KyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92
YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFt
ZTo6Q29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2Fs
bDogewogICAgICAgICAgICAgaWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX2dl
dF9ieV9pZCkKQEAgLTIwMSwxMCArMjAxLDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAg
ICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgSW5s
aW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6
OkNvbnN0cnVjdFZhcmFyZ3M6IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0KLSAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2Fs
bExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxwdHI7CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8gPSBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChs
b2NrZXIsIGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7Ci0KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBj
YWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOTU2ZDY5NDBlN2QyMGI4
MjAyZjI1NTNlYzVmZTcwYjdlOGU5ZTYwYS4uZTYxZjg5NGJlMTA4Y2NiZmExMmRiMjA4OTI5ZWNk
ZTJjM2RmMGYyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC04NDcsMTAgKzg0NywxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7Cisg
ICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgc2NvcGVk
TGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1f
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQ
YXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KEludmFsaWRHUFJSZWcpOwpAQCAtODkyLDcgKzg5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0geworICAgICAgICBz
bG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9h
ZEdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2pp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAg
ICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Cisg
ICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZh
c3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAwZmU3YTc5MDkxNWE3MjRmNGUxZmZiZDk2YmEx
NGU3YTg1Y2I4Yzc5Li43NzA3M2YzNGFmYmZkZjk1ZmU1ODI1YTNjODk4OWMzMjIzZGRhYTVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKQEAgLTkzOCwxMCArOTM4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2pp
dC5sYWJlbCgpOwogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxs
U2l0ZSk7CiAKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsK
ICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0geworICAgICAgICBzbG93
Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVH
UFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTg5LDcgKzk4
OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAg
IG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExp
bmtJbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCmluZGV4IGUxYzgyZGY4ODM0MTQ5MTk4NGIwOTgzODFiODBkNWVhMzY3MmQ2ZWIuLjAx
OGEyZjg1OGY0MjExZDM4N2I0MmI2OTJlMjViNTE4NjFiZTRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTEwNDAzLDEwICsxMDQwMywx
MCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVt
aXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChqaXQsIHNjb3BlZExhbWJk
YTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
SklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDU1
OSwxMCArMTA1NTksMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5h
ZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0g
ICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pKTsK
IAogICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAg
YXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CkBAIC0xMDkwMiwxMCArMTA5MDIsMTAg
QEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2Fs
bExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29w
ZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAg
ICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwpAQCAtMTExODMsMTAgKzExMTgzLDEwIEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQ
UkluZm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVk
TGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICB9KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAg
ICAgICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCBjOGNiYmVlMDZiZjdkNjY2MmMxOWE0YTRhOGEx
OGMyMWNlZmQzZjcyLi5lNjQ1ODUzMWViYzkwNGRlNWRkMDRjZTNhYmE1M2M1YmQzYzcwYjBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC03
NDUsMTggKzc0NSwxOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVz
RnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUAogdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3Qodm0sIEdQUkluZm86OnJlZ1QyLCBpbmZvLT5jYWxsTW9kZSgpKTsKIH0KIAotdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qo
Vk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIENhbGxNb2RlIGNhbGxNb2RlKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihp
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIG1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhb
PSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFn
PihjYWxsKTsKICAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFz
ayhbPSwgJnZtXSAoKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgKmluZm8p
OwotICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpj
cmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFs
Q2FsbChjYWxsTW9kZSk7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCA2NWRkOGVkZWY3NDc5OTZk
NWY2ZDhmMTkyNDZlNmFkOTMzNmQ0NzM4Li5hNDRhYTVjZjk1NGYyYzE2NTQ3OWVjMmRjZDkyM2Q1
ZmY0ZjNkMWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTE3NTIsNyArMTc1Miw3IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBN
YWNyb0Fzc2VtYmxlciB7CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKLSAgICB2b2lkIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKKyAgICB2
b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZSk7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0
YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKaW5kZXggMTU4OTYw
M2YxNDljMjc2YzM1OWU3YmIyNmQ2NGY0ZDg1NzI3ZjE1MC4uMzAwM2IwNzM1MDE4OGU1ZjczZmNj
OTY3MjBkNmE5ZTc0MWY4YmNiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9CYXNlbGluZUpJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2Vs
aW5lSklUQ29kZS5oCkBAIC02Miw3ICs2Miw2IEBAIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CiAK
ICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgR2xvYmFsT2JqZWN0LAot
ICAgICAgICBDYWxsTGlua0luZm8sCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAogICAgICAg
ICBGdW5jdGlvbkRlY2wsCiAgICAgICAgIEZ1bmN0aW9uRXhwciwKQEAgLTkzLDcgKzkyLDYgQEAg
Y2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRo
SUNIb2xkZXIgewogICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKICAgICBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9D
b2RlT3JpZ2luTWFwLmdldCgpOyB9CiAKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxs
TGlua0luZm9zOwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlu
a2VkQ2FsbHM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91
bmxpbmtlZFN0dWJJbmZvczsKICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dp
dGNoSnVtcFRhYmxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA5Mjk0MjQ2MDcz
NDAwOTExYjZjMzU3Yzc4YTRhMGM2YTc0ZTlhYWQ0Li4yOGFlNmY3NzBkZGFjZDcxYzZmMTgyYzlk
MTc5ZmQxY2NlYjhkZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMDEsMTIg
KzEwMSw5IEBAIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rCiAgICAgcmV0dXJuIHN0ZDo6dHVwbGUg
eyBzdHViSW5mbywgc3R1YkluZm9JbmRleCB9OwogfQogCi1zdGQ6OnR1cGxlPFVubGlua2VkQ2Fs
bExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxpbmtlZENh
bGxMaW5rSW5mbygpCitVbmxpbmtlZENhbGxMaW5rSW5mbyogSklUOjphZGRVbmxpbmtlZENhbGxM
aW5rSW5mbygpCiB7Ci0gICAgdm9pZCogdW5saW5rZWRDYWxsTGlua0luZm9JbmRleCA9IGJpdHdp
c2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihtX3VubGlua2VkQ2FsbHMuc2l6
ZSgpKSk7Ci0gICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSAmbV91bmxpbmtlZENhbGxz
LmFsbG9jKCk7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9JbmRl
eCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZv
LCB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4KTsKLSAgICByZXR1cm4gc3RkOjp0dXBsZSB7IGlu
Zm8sIGNhbGxMaW5rSW5mb0luZGV4IH07CisgICAgcmV0dXJuICZtX3VubGlua2VkQ2FsbHMuYWxs
b2MoKTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTAxMCw3ICsxMDA3LDYgQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gRml4ZWRWZWN0
b3I8VW5saW5rZWRDYWxsTGlua0luZm8+KG1fdW5saW5rZWRDYWxscy5zaXplKCkpOwogICAgIGlm
IChtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpCiAgICAgICAgIHN0ZDo6bW92ZSht
X3VubGlua2VkQ2FsbHMuYmVnaW4oKSwgbV91bmxpbmtlZENhbGxzLmVuZCgpLCBtX2ppdENvZGUt
Pm1fdW5saW5rZWRDYWxscy5iZWdpbigpKTsKLSAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5r
SW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogICAgIG1faml0Q29kZS0+bV91
bmxpbmtlZFN0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+
KG1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKICAgICBpZiAobV9qaXRDb2RlLT5tX3VubGlu
a2VkU3R1YkluZm9zLnNpemUoKSkKICAgICAgICAgc3RkOjptb3ZlKG1fdW5saW5rZWRTdHViSW5m
b3MuYmVnaW4oKSwgbV91bmxpbmtlZFN0dWJJbmZvcy5lbmQoKSwgbV9qaXRDb2RlLT5tX3VubGlu
a2VkU3R1YkluZm9zLmJlZ2luKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggZGUyYzVj
ZTc3MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlhMS4uNjdiNDNkOGZhMzBiNzJjYmQ0OTQ0
NjIyOGM2NDI5NjRmM2QzMzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0xNTMsNyAr
MTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8g
ewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBV
bmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87Ci0gICAgICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAg
IHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMjk0LDE2ICsy
OTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAg
ICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAg
ICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAgICAsIHZvaWQ+
IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRD
YWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5s
aW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzA2LDYgKzcw
NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAg
IHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJl
cGF0Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihW
TSYpOworCisgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAg
ICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogCiAg
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3Bl
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQpAQCAtOTU4LDcgKzk2MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgYWRkVG9Db25zdGFudFBv
b2woSklUQ29uc3RhbnRQb29sOjpUeXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cik7CiAgICAg
ICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKLSAgICAgICAgc3Rk
Ojp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+
IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZv
KiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2lu
dGVycHJldGVyOwogCkBAIC0xMDI5LDcgKzEwMzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBWZWN0b3I8SklUQ29uc3RhbnRQb29sOjpWYWx1ZT4gbV9jb25zdGFudFBvb2w7CiAgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAgICAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VW5s
aW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CiAgICAg
ICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZlMTAyYjVk
ZmJmYTJiZTRmZTE3MzE5N2UyYi4uODE1MWZmZGU2YTlmMmViMGMzMjQ3NWQ1YmZkZGFhZWRhMTAw
MDM4MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01OSwxNyArNTks
MjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIgKHJl
dHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwotCi0jaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0g
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7
Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1
YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgorICAgIGVtaXROYWtl
ZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNv
ZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpy
ZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7
CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwor
ICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBv
cF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC04NCw3ICs4OCw3IEBAIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0g
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdU
aGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQp
OwpAQCAtOTcsNyArMTAxLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1IpOwogICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3ModG1wSlNS
LnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdG1wR1BSKTsKLSAg
ICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0K
IApAQCAtMTEwLDcgKzExNCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlE
ID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwpAQCAtMTYwLDcgKzE2NCw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsK
LSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZDYWxsTGlua0luZm8oKSwgcmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxs
TGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1Qz
KTsKICAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsK
ICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwpAQCAtMjAzLDY0ICsyMDcsNTkgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
cmVnVDApOwotCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKIAog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWRWYWx1ZShBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSwgY2FsbGVlSlNSKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBp
bmZvKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BDYWxsRXZhbDo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgY2FsbExpbmtJbmZv
R1BSLCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklU
Ojpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2ln
bmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNv
bnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENh
bGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1
ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOwotICAgIHNodWZm
bGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRh
LT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcFRhaWxDYWxsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBKdW1wTGlzdCBz
bG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2
b2lkKCk+KFsmXXsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGEgeyB9
OworICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwor
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPm51
bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgICAgIHNo
dWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7
CiAjZW5kaWYKLSAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KLSAgICAgICAgYnl0ZWNvZGUu
bV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAg
ICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZs
ZURhdGEtPmFyZ3NbaV0gPQotICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5K
U1N0YWNrKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVk
aW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKLSAgICAgICAgICAgICAgICBEYXRhRm9ybWF0
SlMpOwotICAgIH0KKyAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICAgICAgICAg
IGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdp
c3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkg
eworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3Ys
CisgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0KICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBzaHVmZmxl
RGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigp
LCBEYXRhRm9ybWF0SlMpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzaHVmZmxlRGF0
YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwgY2Fs
bGVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVl
UmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BS
KCkpOwogI2VuZGlmCi0gICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwotCi0gICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKLSAgICBs
b2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAg
SnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0
UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0g
ewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURh
dGEgfTsKKyAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cisg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsIHNodWZmbGVEYXRhIH07
CiAgICAgICAgIHNodWZmbGVyLmxvY2tHUFIoY2FsbExpbmtJbmZvR1BSKTsKICAgICAgICAgc2h1
ZmZsZXIucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgfSk7CisgICAgfSkpOwogICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRocyk7CiAKLSAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKLSAg
ICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7Ci0KICAgICBh
dXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0y
ODgsMTcgKzI4NywxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgICovCiAKICAgICBV
bmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKICAgICBpZiAob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIHN0ZDo6dGllKGluZm8sIGluZm9Db25zdGFudCkgPSBh
ZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOworICAgICAgICBpbmZvID0gYWRkVW5saW5rZWRDYWxs
TGlua0luZm8oKTsKICAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKLSAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKTsKICAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0g
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5k
KENhbGxDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOwotICAgICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0
YW50ID0gaW5mb0NvbnN0YW50OwogICAgIH0KLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29k
ZSwgaW5mb0NvbnN0YW50KTsKKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSk7CiAKICAg
ICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdp
dGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwpAQCAtMzE2LDE2ICszMTIs
MTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoY2FsbGVlSlNSKSk7CiAjZW5kaWYKIAotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0
ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQorICAgIGlmIChj
b21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdU
MjsKLSAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigp
LCBjYWxsTGlua0luZm9HUFIsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxv
YWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAg
ICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9y
VGFpbENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7
CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgICAgIGF1dG8gZG9uZUxvY2F0
aW9uID0gbGFiZWwoKTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CkBAIC0zNDQsMTUgKzM0MCwxNiBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCB1bnNpZ25lZCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIEFTU0VSVChv
cGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGxvYWRDb25zdGFudChtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCBy
ZWdUMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QyKTsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjYsNyArMzYzLDYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUUKIAogICAgIHJlc2V0U1AoKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0NTg3ODAz
YzI2MThjNjgwMzk4MzZjZWU2YzdiMzRmZDJjMzA0Li4yZmUyM2M0OWZkMGY5NDA5MWY2ODYwNWI3
NTdhZTJjZTMyMjAxNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKQEAgLTM3MCwyMSArMzcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOwotfQotI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmlt
aXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMGUyZDdkMDhj
ZmI3NWYzMjcxZDA2MmIwOTZhYmIwYzM1YzdmMWE4NS4uNmJjZTc0YWI4MmM1NTdkMDA4NTE1MDc4
NTFhMDRlNGUxNDYzMGMwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCkBAIC02MCw3ICs2MCw3IEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIK
LSNpbmNsdWRlICJSZXBhdGNoLmgiCisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIKICNpbmNs
dWRlICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNp
bmNsdWRlICJTdXBlclNhbXBsZXIuaCIKQEAgLTE0NDYsMTg2ICsxNDQ2LDkgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiBnbG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
LXN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBj
YWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOwotCi0gICAgaWYgKGNhbGxMaW5rSW5m
by0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgYXV0byBj
YWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOwotICAgICAgICBBU1NFUlQoY2FsbERh
dGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOwotCi0gICAgICAgIGlmIChjYWxsRGF0YS50
eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxlZUZy
YW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS5lbmNvZGVk
SG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChj
YWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBEaXNh
bGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAg
ICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAotICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2lu
dCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFp
bCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgIAotICAg
ICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAg
ICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlv
bkVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoCi0gICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwotICAgIH0KLQotICAgIEFTU0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpOwotCi0gICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0
Q29uc3RydWN0RGF0YSh2bSwgY2FsbGVlKTsKLSAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBl
ICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7Ci0KLSAgICBpZiAoY29uc3RydWN0RGF0YS50eXBlID09
IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOwotICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVl
KGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1
ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2Jh
bE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dD
OwotICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRy
eVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQo
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2Vl
cFRoZUZyYW1lKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSA9PSBD
YWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsK
LSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJU
YWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7Ci19Ci0KIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25MaW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8p
KQogewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1l
KCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOwotICAgIAotICAgIEpTVmFsdWUgY2Fs
bGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOwotICAg
IEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFs
dWUpOwotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAgICAgICAgaWYgKGF1dG8q
IGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwg
Y2FsbGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3Ioa2luZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOwotCi0gICAg
ICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVs
bHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7Ci0KLSAgICAgICAgICAgIHZvaWQqIGxp
bmtlZFRhcmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNh
bGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLQotICAgIEpTRnVuY3Rpb24qIGNh
bGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpT
U2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwotICAgIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7Ci0KLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG51bGxwdHI7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsK
LSAgICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBraW5kLCBjYWxsZWUpOwot
ICAgICAgICBpZiAoIWNvZGVQdHIpCi0gICAgICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRsZVRo
cm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0g
dm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2FsbChr
aW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1
Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xv
YmFsT2JqZWN0LCBjYWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2Vw
dGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9
IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgZnVuY3Rpb25FeGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxl
ZSwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKLQotICAgICAgICBjb2Rl
QmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAg
ICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7Ci0gICAgICAgIGlmIChjYWxsZWVGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpCi0gICAgICAg
ICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
cml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7Ci0gICAgfQotCi0gICAgaWYg
KCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2Vl
bigpOwotICAgIGVsc2UKLSAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJh
bWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLQotICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwg
PyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci19Ci0KLWlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywg
SlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNp
YWxpemF0aW9uS2luZCgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3Vh
cmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpT
RnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCkpIHsKLSAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+
KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZUZvcihraW5kKTsKLSAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6
VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7Ci0gICAgfQot
ICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGVV
bmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5l
eGVjdXRhYmxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9y
KGtpbmQpKSkgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotCi0gICAg
ICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9p
ZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9OwotCi0gICAg
ICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJp
bGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgewotICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29u
c3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uKSk7Ci0gICAgICAgICAgICByZXR1
cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvZGVCbG9j
ayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0g
ICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4
ZWN1dGFibGU+KHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlv
bigpKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KLSAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5Ci0gICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0
Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1
c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZy
YW1lLCBnbG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsLCBTbG93UGF0aFJldHVyblR5cGUs
IChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZDUxY2RhNGUyYTIxYTkyMTc5
YjUxNWY5ODRhZjJjNjhkNmRmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjAyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlcGF0
Y2guaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKLSNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgotI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiRE9N
SklUR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVk
ZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRlRMVGh1bmtzLmgiCi0jaW5j
bHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgot
I2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0
YXRzLmgiCi0jaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCi0jaW5jbHVkZSAiSW5zdGFuY2VPZkFj
Y2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5j
bHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklUSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHkuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIK
LSNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50
cy5oIgotI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2luY2x1ZGUgIlN0
YWNrQWxpZ25tZW50LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCi0jaW5jbHVkZSAi
VGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgotI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLSNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0
YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnT3BlcmF0aW9uV2l0aFZhbGlk
YXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVyYXRpb24pCi17Ci0gICAgSlND
X1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJREFUSU9OKG9wZXJhdGlvbik7Ci19
Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdldFdp
dGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkKLXsK
LSAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihjYWxs
KTsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2Fs
bFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZXR1cm4gcmV0
YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24pOwotICAg
IENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCA9IHN0dWJJbmZvLm1fc2xv
d1BhdGhDYWxsTG9jYXRpb247Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewotICAgICAgICBGdW5jdGlvblB0cjxK
SVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJ
VFRodW5rUHRyVGFnPihjYWxsKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46
OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Ci0gICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+
dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0
KCkpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCi0gICAgcmV0dXJuIHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0
aW9uKGNhbGwpOwotfQotCi12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotI2lmIEVOQUJM
RShGVExfSklUKQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExK
SVQpIHsKLSAgICAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgICAgICBGVEw6OlRo
dW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rpb25QdHI8SklUVGh1
bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVu
a1B0clRhZz4oY2FsbCk7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0
YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5
IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsKLSAg
ICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5r
UHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIGtleSkuY29kZSgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBVTlVT
RURfUEFSQU0oY29kZUJsb2NrKTsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8
T3BlcmF0aW9uUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotICAgIGlmIChj
b2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIHN0dWJJbmZvLm1fc2xvd09wZXJhdGlv
biA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19
Ci0KLWVudW0gSW5saW5lQ2FjaGVBY3Rpb24gewotICAgIEdpdmVVcE9uQ2FjaGUsCi0gICAgUmV0
cnlDYWNoZUxhdGVyLAotICAgIEF0dGVtcHRUb0NhY2hlCi19OwotCi1zdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICBUeXBlSW5mbyB0
eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLSAgICBpZiAodHlwZUluZm8ucHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0g
ICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBp
ZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCi0gICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgLy8gRmxhdHRlbmluZyBjb3VsZCBoYXZlIGNoYW5n
ZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZvciBhbm90aGVyIHRyeS4KLSAgICAgICAg
YXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKLSAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFzdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0KLSAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Ci19Ci0KLXN0YXRpYyBib29sIGZvcmNl
SUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6Zm9yY2VJ
Q0ZhaWx1cmUoKTsKLX0KLQotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQmIHJlc3VsdCkK
LXsKLSAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50cygpKSB7
Ci0gICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHModm0pOwotCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ss
IHZtKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KGxvY2tlciwgY29kZUJsb2NrKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkKLXsKLSAg
ICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdp
dGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7
Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsK
LSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFt
ZUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWRPcHRpbWl6
ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotaW5saW5l
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdl
dEJ5S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0QnlLaW5k
OjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5
S2luZDo6QnlJZFdpdGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzOwotICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uVHJ5R2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFs
OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljOwotICAgIGNhc2UgR2V0
QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIHJldHVy
biBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdl
dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtp
bmQga2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7
Ci0KLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBDYWNo
ZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgICAgIGlmICghYmFzZVZhbHVl
LmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGNvbnN0IGJvb2wg
aXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lIHx8IGtpbmQgPT0gR2V0
QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5l
d0Nhc2U7Ci0KLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAg
ICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAg
ICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKLQotICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihi
YXNlQ2VsbCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlM
ZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmco
YmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09
IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpp
c0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgewotICAgICAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXpp
bmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWND
YXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICAv
LyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFuZGxlIHRoaXMgYXMgYSBu
b3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHdp
dGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNhc2UgZm9yIHRoYXQgbG9h
ZCBpZiBuZWVkZWQuCi0gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhp
bmdzKCkpCi0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUo
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChTY29wZWRBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgewotICAg
ICAgICAgICAgICAgIC8vIERpdHRvLgotICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5v
dmVycm9kZVRoaW5ncygpKQotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0
aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNlbGwtPmluaGVyaXRzPEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5tb2R1bGVOYW1lc3BhY2VTbG90KCkp
Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNlU2xvdC0+ZW52aXJvbm1lbnQsIFNj
b3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3BlT2Zmc2V0KSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkgewotICAgICAgICAgICAgaWYgKCFzbG90
LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VD
ZWxsLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAgICAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJv
eHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3
YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgYmFz
ZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOwotICAgICAgICAg
ICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGxvYWRU
YXJnZXRGcm9tUHJveHkgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJbmxp
bmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7Ci0gICAg
ICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBhY3Rpb247Ci0KLSAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAg
ICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAgICAgICAg
ICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAgICAgICAgICAgICAgICAmJiAhc2xv
dC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZy
b21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluOwotCi0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5z
ZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgICAg
ICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsK
LSAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1c3RvbXMsIHdlIG11c3QgZGlzYWxs
b3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKLSAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJl
IGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hlIHRoZQotICAg
ICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBvaW50ZXIuCi0KLSAgICAgICAgICAg
ICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBzbG90LnNsb3RC
YXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpzQ2FzdDxKU09iamVjdCo+KGJhc2VD
ZWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7IC8vIFdl
IG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgJiYgc3RydWN0dXJlLT50eXBlSW5m
bygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERpcmVjdCBvciBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3RpZ2F0ZSBwcm90b3R5cGUgY2hhaW5zIGZ1
cnRoZXIuCi0gICAgICAgICAgICAgICAgLy8gQ2FjaGVhYmlsaXR5IGp1c3QgZGVwZW5kcyBvbiB0
aGUgaGVhZCBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gR2V0QnlLaW5k
OjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBj
YWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2Vs
bCwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMgbWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8g
ZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWlu
Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vz
c0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUudWlkKCkpID09IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAg
cHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3VsZCBiZSBpbnNpZGUgZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlCbGFoLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IG9mZnNldCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0cmlidXRlcygp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0Z1bmN0aW9uKiBnZXR0ZXIg
PSBudWxscHRyOwotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAg
ICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgc2xv
dC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOwotCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZTsKLSAgICAgICAgICAgIGlmIChz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21BdHRyaWJ1dGUoKSkKLSAgICAgICAg
ICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJpYnV0ZSgpOwotCi0gICAgICAgICAg
ICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsKLSAgICAgICAgICAgICAgICBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9h
ZDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0g
QWNjZXNzQ2FzZTo6R2V0R2V0dGVyOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgdHlw
ZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFy
Z2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nl
c3NDaGFpbikpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZyb21Qcm94eSAm
JiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dl
dHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgcHJv
cGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
Z2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpMb2FkLCBwcm9wZXJ0eU5hbWUs
IG9mZnNldCwgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0
LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVl
KCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFBy
b3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmlzVW5zZXQoKSA/
IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2Fk
VGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBBY2Nlc3NDYXNlOjpHZXR0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3Qu
YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVy
OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICBuZXdD
YXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IEZ1
bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRlcigpKSA6IG51
bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkg
JiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxw
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1vdmUocHJvdG90
eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFz
ZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3Bl
cnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLQotICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nh
c2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgc3dp
dGNoIChraW5kKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAg
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5
S2luZDo6VHJ5QnlJZDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0Ogot
ICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHZXRCeUtp
bmQ6OkJ5VmFsOgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgotICAg
ICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNp
bmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9p
bnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6
IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewotICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBpZiAo
dHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICBy
ZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2V0QnlG
dW5jdGlvbihraW5kKSk7Ci19Ci0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
QXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKLSAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAg
ICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xv
YmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7Ci0KLSAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAg
ICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFyZ3VtZW50c1R5cGUpCi0gICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERpcmVjdEFyZ3VtZW50c0xvYWQ7Ci0g
ICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTY29wZWRBcmd1bWVudHNUeXBlKQotICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTY29wZWRBcmd1bWVudHNM
b2FkOwotICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU3RyaW5nVHlwZSkKLSAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDsKLSAgICAg
ICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0
b3JhZ2VUeXBlKSkgewotICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50
eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Ci0gICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50
OExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50
ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlVaW50OExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFR5cGVVaW50OENsYW1wZWQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2Fk
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6Ci0g
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
SW50MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBl
VWludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheVVpbnQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFy
cmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIGNhc2UgVHlwZUJp
Z0ludDY0OgotICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgotICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNl
LT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOwotICAgICAgICAgICAgc3dpdGNo
IChpbmRleGluZ1NoYXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMkxvYWQ7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgotICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlTG9hZDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgot
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91
c0xvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5U3Rv
cmFnZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkQXJyYXlTdG9yYWdlTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwg
bnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51
bGxwdHIpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAg
ICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
LSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBK
U1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHRy
eUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgs
IHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7Ci19Ci0KLXN0
YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5k
LCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKLSAgICBjYXNl
IFB1dEJ5S2luZDo6QnlJZDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNT
RVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRT
dHJpY3Q7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHV0QnlL
aW5kOjpCeVZhbDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljOwot
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKLSAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RHZW5lcmljOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmlj
OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAg
ICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWM7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRp
bWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2lu
ZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBzd2l0Y2ggKHB1dEJ5S2luZCkg
ewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
LSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5
VmFsOgotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9w
dGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0g
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5
S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQo
KSk7Ci0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChmb3JjZUlD
RmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5pc0NhY2hl
YWJsZVNldHRlcigpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8gc29tZXRoaW5nIHNtYXJ0ZXIgaGVyZS4u
LgotICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAvLyBXZSBjYW4n
dCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUgcHJvdG90eXBlIHNpbmNlIGl0IHNob3Vs
ZG4ndCBvd24gcHJvcGVydGllcy4KLSAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHNsb3Qu
YmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOwotCi0gICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OwotCi0gICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNlOwotICAgICAgICBpZiAoYmFzZUNlbGwt
PnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICAgICAgYmFzZUNl
bGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICBi
YXNlVmFsdWUgPSBiYXNlQ2VsbDsKLSAgICAgICAgICAgIGlzUHJveHkgPSB0cnVlOwotCi0gICAg
ICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFuZCBKUy9DdXN0b20g
U2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAotICAgICAgICAgICAgLy8gY2FjaGUgdHJhbnNp
dGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0
cnVjdHVyZQotICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCi0g
ICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0NhY2hlYWJsZVB1dCgp
ICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkKLSAg
ICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKLSAgICAgICAgICAgICAg
ICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Ci0gICAgICAgICAgICBpZiAoIWlzQ2FjaGVh
YmxlUHJveHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmUpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgUmVm
UHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJh
c2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90
LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRjaCBidWdzIGlmIHdlIGFjY2lkZW50YWxs
eSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCi0gICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSB0
cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkuIFRoaXMgaXMgY29t
bW9uIGFtb25nCi0gICAgICAgICAgICAgICAgLy8gcGF0aHMgdGhhdCByZWlmeSBsYXp5IHByb3Bl
cnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBhbmQgZm9yZ2V0Ci0gICAgICAgICAg
ICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkgY29tZSBkb3duIHRoaXMgcGF0aC4g
VGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKLSAgICAgICAgICAgICAgICAvLyBrbm93IGhvdyB0byBt
b2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKG9yIGFueSBzdHJ1Y3R1
cmUKLSAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGZvciB0aGF0IG1hdHRlcikuCi0gICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
dm0pID09IG9sZFN0cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRp
ZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2Fj
aGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hl
ZE9mZnNldCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkp
IHsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5k
LCBwdXRLaW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJ
ZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZt
LCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLCBp
c1Byb3h5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFp
c1Byb3h5KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpOZXdQcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVy
ZS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIHN0cnVjdHVyZSBpcyBkaWN0aW9uYXJ5
LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBiZXR3ZWVuIGFuIG9iamVjdCBhbmQg
YSBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBOZXdQcm9wZXJ0eSBv
cGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9lcyBub3Qgb2ZmZXIgYW55IGJlbmVm
aXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFwcGVucyBhZ2Fpbi4KLSAgICAgICAg
ICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1
cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAo
IW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
ICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBpcyBvdmVycmlkZGVuIGJ5IFVzZXJPYmpl
Y3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVmZmVjdCBvbiBKU09iamVjdDo6cHV0
LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0UHJvcGVydHlTbG90IGFzIG5vbi1jYWNo
YWVibGUsCi0gICAgICAgICAgICAgICAgLy8gdGhlbiBhcmJpdHJhcnkgc3RydWN0dXJlIHRyYW5z
aXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQgb3BlcmF0aW9uLCBhbmQgdGhpcyBnZW5l
cmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBoZXJlIGFzIGlmIG9sZFN0cnVjdHVy
ZSAtPiBuZXdTdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSW4gcmVhbGl0eSwgdGhlIHRy
YW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0aGluZyB1bmtub3duIHN0cnVjdHVyZXMg
LT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIC8vIFRvIGd1YXJkIGFn
YWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5jb3JyZWN0IFVzZXJPYmplY3Q6OnB1
dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbiBhbmQg
aWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhlIHB1dC4KLSAgICAgICAgICAgICAg
ICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG5ld1N0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZt
KSAhPSBuZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
ID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5p
c09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSZWZQdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAg
ICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0
LCBiYXNlQ2VsbCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0
dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNz
Q2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50
LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50LmlzUHJpdmF0ZU5hbWUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBvZmZzZXQsIG9sZFN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNz
Q2hhaW4pLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgewotICAg
ICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAg
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAg
ICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotCi0g
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgd2UncmUgYSBzZWxm
IGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMKLSAgICAgICAgICAg
ICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBnb2Vz
IGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50Ci0gICAgICAgICAgICAgICAgLy8gZnVu
Y3Rpb24gcG9pbnRlci4KLSAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFy
ZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0g
YmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1Bv
bHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4g
PSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGws
IHNsb3QuYmFzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNj
ZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhp
dEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0
dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLAotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQs
IFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1c3RvbVNldHRl
cigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFnPigpLCBzbG90LmJhc2UoKSAhPSBiYXNl
VmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsKLSAgICAgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAg
ICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFp
bjsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9m
ZnNldCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9y
Q2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT5m
bGF0dGVuZWREaWN0aW9uYXJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQ
b2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWlu
ID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxs
LCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFj
Y2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFz
ZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSkpLT5nZXQodm0sIGlkZW50Lmlt
cGwoKSwgYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNz
b3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
cm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLmF0dHJpYnV0ZXMoKSAm
IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
LCBpc1Byb3h5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgIAotICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6
c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotCi0gICAgICAgICAgICBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3Vs
ZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9p
ZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRL
aW5kIHB1dEtpbmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
bywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGlu
ZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCi17Ci0gICAgaWYgKCFi
YXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
aWYgKCFpbmRleC5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0K
LSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5h
c0NlbGwoKTsKLQotICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0g
ICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5
cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKLSAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4
U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50
ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlVaW50OFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBUeXBlVWludDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZT
dG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDMy
OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFR5cGVVaW50MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJp
Z0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAgICAgY2Fz
ZSBUeXBlQmlnSW50NjQ6Ci0gICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3Rv
cmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBl
OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91Ymxl
U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENvbnRpZ3Vv
dXNTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZENvbnRpZ3VvdXNTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQXJyYXlTdG9yYWdlU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwot
ICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6
Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKLQotICAgICAgICBp
ZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0p
LCBJZGVudGlmaWVyKCkpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1Yklu
Zm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNo
QXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17Ci0gICAgaWYg
KHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5k
ZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0S2luZDo6RGly
ZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNl
VmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQsIEVDTUFNb2Rl
IGVjbWFNb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgp
KTsKLQotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUp
OwotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpIHx8ICFvbGRTdHJ1Y3R1cmUtPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzUHJveHkoKSkK
LSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmICghc2xvdC5p
c0NhY2hlYWJsZURlbGV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0K
LSAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFy
eSgpKSB7Ci0gICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICAgICAganNDYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKS0+ZmxhdHRl
bkRpY3Rpb25hcnlPYmplY3Qodm0pOwotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KQotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICBSZWZQdHI8
QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLQotICAgICAgICBpZiAoc2xvdC5pc0RlbGV0ZUhpdCgpKSB7
Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBpbnZhbGlkT2Zmc2V0Owot
ICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVBy
b3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICgh
bmV3U3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0g
ICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBBU1NFUlQobmV3T2Zmc2V0ID09IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlv
dXNJRCgpID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJl
LT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsK
LSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAg
ICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7Ci0gICAgICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwg
bmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoZWNtYU1vZGUu
aXNTdHJpY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHByb3BlcnR5TmFtZSwgaW52YWxpZE9mZnNl
dCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUs
IHsgfSwgbnVsbHB0cik7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgcHJvcGVydHlOYW1l
LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVD
b2RlKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAg
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVp
ZCgpKSkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nl
c3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBh
dGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCwgRUNNQU1vZGUgZWNtYU1v
ZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwot
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZURlbGV0
ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwgZWNtYU1vZGUpID09IEdpdmVVcE9uQ2Fj
aGUpIHsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoR2VuZXJpYywg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAgICAgIGlmIChraW5kID09
IERlbEJ5S2luZDo6QnlJZCkKLSAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotfQotCi1pbmxpbmUgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24oSW5C
eUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluQnlLaW5kOjpC
eUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBJ
bkJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7
Ci0gICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHBy
b3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uSW5CeUlkR2VuZXJpYzsKLSAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOwotICAgIGNhc2UgSW5CeUtpbmQ6OlByaXZhdGVO
YW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVHZW5lcmljOwotICAg
IH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1zdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsCi0gICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0g
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1
bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3Jj
ZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFiYXNlLT5zdHJ1Y3R1cmUo
dm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5jZSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKHdhc0ZvdW5k
KSB7Ci0gICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAKLSAgICAg
ICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBp
ZiAod2FzRm91bmQpIHsKLSAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFj
dGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0
VG9DYWNoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgICAgICAv
LyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5
cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQot
ICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAgICAgICAg
ICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwotICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xv
YmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVz
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBl
QWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVj
dCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNz
Q2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
IHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJl
KS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0g
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgp
ID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVw
YXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVsbHB0cik7Ci0gICAgICAg
ICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWlu
Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKLQotICAgICAgICBS
ZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNl
OjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQgPyBzbG90LmNhY2hlZE9mZnNldCgpIDog
aW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBl
QWNjZXNzQ2hhaW4pKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJv
cGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNl
V2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsK
LSAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQotICAgICAgICAgICAgICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUo
KSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHVi
SWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hl
TGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0g
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZUluQnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQsIHNsb3Qs
IHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7Ci0gICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VPYmplY3QtPmNsYXNzSW5mbyhnbG9iYWxP
YmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KSk7Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBw
cm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAg
ICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0
cnVjdHVyZSh2bSk7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9u
Rm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUp
Ci0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgIGJvb2wgaXNCYXNlUHJvcGVy
dHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAg
UmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgYnJh
bmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7IH0sIHsgfSk7Ci0KLSAgICAgICAgcmVz
dWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0g
ICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3Vs
ZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9p
ZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Ci17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotCi0g
ICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUp
Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFp
bHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0K
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotCi0g
ICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2Up
OwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgcmV0
dXJuIGFjdGlvbjsKLQotICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZEFkZEFjY2Vzc0Nhc2UsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJl
ZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlQ2hlY2tQcml2YXRlQnJh
bmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0dXJlKTsKLQotICAgICAgICByZXN1bHQg
PSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAg
ICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJ
Zk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJldHVybiBy
ZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVy
OwotfQotCi12b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENh
Y2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAg
IGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVTZXRQcml2YXRlQnJhbmQoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAg
IGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlKTsKLQot
ICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9u
ID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1w
dFRvQ2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgICAgICAKLSAgICAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnNldEJyYW5kVHJhbnNpdGlvbkZy
b21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGJyYW5kSUQudWlk
KCkpOwotICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7Ci0gICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQot
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlQobmV3
U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpTZXRCcmFuZCk7
Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAKLSAg
ICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExPR19JQygoSUNFdmVu
dDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywg
YnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwotCi0gICAgICAgIHJlc3VsdCA9
IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
RUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAg
ICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihy
ZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNB
bmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6
IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCog
YmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIg
YnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNoZVNldFBy
aXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0
dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluc3Rh
bmNlT2YoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0
OwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFsdWUuaXNDZWxsKCkpOyAvLyBzaG91
bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2VsbHMuCi0gICAgCi0gICAgaWYgKGZvcmNl
SUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgIAotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICAKLSAgICAgICAgSlNDZWxsKiB2YWx1ZSA9IHZh
bHVlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUt
PnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwotICAg
ICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBw
cm90b3R5cGVWYWx1ZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUpIHsKLSAgICAgICAgICAgIGlm
ICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsIHN0cnVjdHVy
ZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgcHJv
dG90eXBlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVRdWVy
aWVzQXJlQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGVhY2ggdGhp
cyB0byBkbyBwb2x5IHByb3RvLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKLSAgICAgICAgICAgICAgICBwcmVwYXJlQ2hh
aW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUsIHdhc0ZvdW5kID8gcHJvdG90eXBlIDog
bnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKLSAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZSwgd2FzRm91bmQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNl
OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLAotICAgICAg
ICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mSGl0IDog
QWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkKLSAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNj
ZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hlYWJsZUlkZW50aWZpZXIoKSk7Ci0gICAg
ICAgIAotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZBZGRBY2Nlc3NDYXNlLCBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgCi0gICAgICAg
IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBXVEZNb3ZlKG5ld0Nhc2UpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAg
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVwbGFjZVdpdGhKdW1wLCBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihy
ZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgZmlyZVdhdGNocG9p
bnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2Fj
aGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCi0gICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUg
c3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIGlmICh0cnlDYWNoZUluc3RhbmNlT2YoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUsIHByb3RvdHlwZVZhbHVlLCBzdHViSW5m
bywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwotfQot
Ci1zdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYp
Ci17Ci0gICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYu
Y29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwotfQotCi1zdGF0aWMg
dm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCi17Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxM
aW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExp
bmtJbmZvKTsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1
bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIHdlYkFzc2Vt
Ymx5T3duZXIoSlNDZWxsKiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAg
IC8vIEVhY2ggV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc2hhcmVzIHRoZSBzdHVicyBmcm9tIHRoZWly
IFdlYkFzc2VtYmx5Lk1vZHVsZSwgd2hpY2ggYXJlIHRoZXJlZm9yZSB0aGUgYXBwcm9wcmlhdGUg
b3duZXIuCi0gICAgcmV0dXJuIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2FsbGVlKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCi19Ci0KLXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbCgKLSAgICBWTSYgdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBj
YWxsZWVDb2RlQmxvY2ssCi0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8u
c3R1YigpKTsKLQotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKCk7Ci0gICAgLy8gT3VyIGNhbGxlciBtdXN0IGhhdmUgYSBjZWxsIGZvciBhIGNhbGxl
ZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2Fs
bGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgp
KTsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVC
bG9jaygpOwotCi0gICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZh
bGlkIENvZGVCbG9jay4KLSAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseU1vZHVsZShj
YWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJG
cmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFTU0VSVChv
d25lcik7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxs
TGlua0luZm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUsIGNvZGVQdHIp
OwotICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7
Ci0KLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCi0g
ICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJD
b2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1w
KGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7Ci0K
LSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJ
bmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8pOwotCi0gICAgaWYgKGNhbGxM
aW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0lu
Zm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0lu
Zm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci19Ci0KLXZv
aWQgbGlua0RpcmVjdENhbGwoCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLXsKLSAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5zdHViKCkpOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKLSAgICAKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAg
ICBjYWxsTGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxG
dW5jdGlvbkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9jaykpOwotICAgIGlmIChzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKLSAgICAgICAgZGF0YUxvZygiTGlua2lu
ZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZv
LmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwg
ZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKLQotICAgIGNhbGxMaW5rSW5mby5zZXRE
aXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIp
KTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+
bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0luZm8pOwotfQotCi12b2lkIGxp
bmtTbG93Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bykKLXsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWUoKS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgp
OwotICAgIAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCi1zdGF0aWMg
dm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKLXsKLSAgICBp
ZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFy
Q29kZUJsb2NrKCk7Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29u
KCkpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigp
KSB7Ci0gICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVm
KTsKLQotICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCi0gICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsKLSAgICAgICAgfQotICAgICAgICBj
YWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5l
IGNhY2hlIGJvdGggZm9yIGRhdGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgotICAgIH0KLSAgICBj
YWxsTGlua0luZm8uY2xlYXJTZWVuKCk7Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOwot
ICAgIGNhbGxMaW5rSW5mby5jbGVhclNsb3dTdHViKCk7Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5p
c09uTGlzdCgpKQotICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgdW5s
aW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5m
bzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7Ci0gICAgCi0gICAgcmV2ZXJ0Q2FsbCh2
bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJl
dGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Zp
cnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWUoKTsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1l
LT5jb2RlQmxvY2soKTsKLQotICAgIGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihjYWxsZXJDb2RlQmxvY2spLAotICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwg
RnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigp
KSk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICByZXZl
cnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExpbmtJbmZv
LnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1
bmspKTsKLSAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwotfQotCi1uYW1l
c3BhY2Ugewotc3RydWN0IENhbGxUb0NvZGVQdHIgewotICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwot
fTsKLX0gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKTsKLQotICAgIENhbGxGcmFt
ZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBsaW5rUG9s
eW1vcnBoaWNDYWxsLCB3ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBHQy4KLSAg
ICAvLyBHQyBqZXR0aXNvbnMgQ29kZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8gZXRjLiBh
bmQgYnJlYWtzIGFzc3VtcHRpb24gZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2FsbC4KLSAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUodm0pOwotICAgIAotICAgIGlmICgh
bmV3VmFyaWFudCkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxs
TGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gT3VyIGNhbGxlciBt
dXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhp
cyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQo
Y2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQotICAgIENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGJvb2wgaXNXZWJBc3Nl
bWJseSA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgp
KTsKLQotICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBD
b2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJs
eU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7
Ci0gICAgQVNTRVJUKG93bmVyKTsKLQotICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OwotICAgIGlm
IChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkp
Ci0gICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOwotICAgIGVsc2UgaWYgKEpTT2JqZWN0
KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCi0gICAgICAgIGxpc3QgPSBDYWxs
VmFyaWFudExpc3QgeyBDYWxsVmFyaWFudChvbGRDYWxsZWUpIH07Ci0gICAgCi0gICAgbGlzdCA9
IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7Ci0KLSAgICAvLyBJZiB0
aGVyZSBhcmUgYW55IGNsb3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCBh
bGwgb2YgdGhlbSBhcyBjbG9zdXJlIGNhbGxzLgotICAgIC8vIFRoaXMgbWFrZXMgc3dpdGNoaW5n
IG9uIGNhbGxlZSBjaGVhcGVyLiBJdCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0J3MgZWFz
aWVyIG9uIHRoZSBERkc7Ci0gICAgLy8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50IHRvIGRl
YWwgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNhbGxlZXMu
Ci0gICAgYm9vbCBpc0Nsb3N1cmVDYWxsID0gZmFsc2U7Ci0gICAgZm9yIChDYWxsVmFyaWFudCB2
YXJpYW50IDogbGlzdCkgIHsKLSAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7
Ci0gICAgICAgICAgICBsaXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsKLSAgICAg
ICAgICAgIGlzQ2xvc3VyZUNhbGwgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpCi0gICAgICAgIGNhbGxMaW5r
SW5mby5zZXRIYXNTZWVuQ2xvc3VyZSgpOwotICAgIAotICAgIFZlY3RvcjxQb2x5bW9ycGhpY0Nh
bGxDYXNlPiBjYWxsQ2FzZXM7Ci0gICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7Ci0gICAg
Ci0gICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCi0gICAgZm9yIChDYWxsVmFy
aWFudCB2YXJpYW50IDogbGlzdCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51
bGxwdHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFudC5leGVj
dXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICBjb2RlQmxv
Y2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0Zv
ckNhbGwoKTsKLSAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGVp
dGhlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBhcml0eSBt
aXNtYXRjaCwKLSAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlz
IHdob2xlIHRoaW5nIHRvIGJlIGEgdmlydHVhbCBjYWxsLgotICAgICAgICAgICAgaWYgKCFjb2Rl
QmxvY2sgfHwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZv
LmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxG
cmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7Ci0gICAg
ICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0
aCBjbG9zdXJlIGNhbGwuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc5MzExCi0gICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1ZSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChhdXRvKiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBu
ZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMuY29udGFp
bnMobmV3Q2FzZVZhbHVlKSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9SOiBBdHRl
bXB0IHRvIGFkZCBkdXBsaWNhdGUgY2FzZSB2YWx1ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRh
dGFMb2coIkV4aXN0aW5nIGNhc2UgdmFsdWVzOiAiKTsKLSAgICAgICAgICAgICAgICBDb21tYVBy
aW50ZXIgY29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhc2VWYWx1
ZXMpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0dGVtcHRp
bmcgdG8gYWRkOiAiLCBuZXdDYXNlVmFsdWUsICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFM
b2coIlZhcmlhbnQgbGlzdDogIiwgbGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2
YXJpYW50LCBjb2RlQmxvY2spKTsKLSAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3Q2FzZVZh
bHVlKTsKLSAgICB9Ci0gICAgQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZhbHVlcy5z
aXplKCkpOwotCi0gICAgLy8gSWYgd2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVzZSBhIG5v
cm1hbCB2aXJ0dWFsIGNhbGwuCi0gICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFu
dExpc3RTaXplOwotICAgIGlmIChpc1dlYkFzc2VtYmx5KQotICAgICAgICBtYXhQb2x5bW9ycGhp
Y0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50
TGlzdFNpemVGb3JXZWJBc3NlbWJseVRvSlMoKTsKLSAgICBlbHNlIGlmIChjYWxsZXJDb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCi0gICAgICAgIG1heFBvbHlt
b3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZh
cmlhbnRMaXN0U2l6ZUZvclRvcFRpZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIG1heFBvbHltb3Jw
aGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlh
bnRMaXN0U2l6ZSgpOwotCi0gICAgLy8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQgb2YgY2Fs
bENhc2VzLnNpemUoKSBiZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBmb3Igbm93
LgotICAgIGlmIChsaXN0LnNpemUoKSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6
ZSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+IGNh
bGxzKGNhbGxDYXNlcy5zaXplKCkpOwotICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBmYXN0Q291
bnRzOwotCi0gICAgaWYgKCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+aml0VHlw
ZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkgewotICAgICAgICBmYXN0Q291bnRzID0gbWFr
ZVVuaXF1ZUFycmF5PHVpbnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgpKTsKLSAgICAgICAgbWVtc2V0
KGZhc3RDb3VudHMuZ2V0KCksIDAsIGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWludDMyX3Qp
KTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5mby5jYWxs
ZWVHUFIoKTsKLQotICAgIGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRhSUMoKTsK
LSAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOwotICAgIGlmIChjYWxs
TGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsTGlua0lu
Zm8uaXNUYWlsQ2FsbCgpKTsKLSAgICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlxdWU8Q2Fs
bEZyYW1lU2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgp
KTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVh
ZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCi0gICAgICAg
IC8vIHVzZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCi0gICAgICAgIGZy
YW1lU2h1ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgpOwotI2VuZGlmCi0gICAgICAgIGZyYW1l
U2h1ZmZsZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgY29tcGFy
aXNvblZhbHVlR1BSOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgIGlmIChmcmFt
ZVNodWZmbGVyKQotICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVTaHVmZmxl
ci0+YWNxdWlyZUdQUigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wYXJpc29uVmFs
dWVHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwotCi0gICAg
R1BSUmVnIGZhc3RDb3VudHNCYXNlR1BSOwotICAgIGlmIChmcmFtZVNodWZmbGVyKQotICAgICAg
ICBmYXN0Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPQotICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBH
UFJJbmZvOjpyZWdUMyk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKLQotICAg
IGlmICghZnJhbWVTaHVmZmxlciAmJiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAg
ICAgIC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBjYWxsZWUg
c2F2ZSByZWdpc3RlciBpbiB0aGUgc2xvdyBwYXRoLgotICAgICAgICBBU1NFUlQoIWNhbGxlckNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOwotICAgICAg
ICBzdHViSml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAg
ICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1
dGFibGUgaW4gc2NyYXRjaEdQUi4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLmlzVGFpbENhbGwoKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHVi
Sml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJ
Zk5vdENlbGwoY2FsbGVlR1BSKSk7Ci0jZWxzZQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFs
cmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0gICAgICAg
IC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24g
d2l0aCBjbG9zdXJlIGNhbGwuCi0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5j
aElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0
YWJsZU9yUmFyZURhdGEoKSksIGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gaGFz
RXhlY3V0YWJsZSA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNv
bXBhcmlzb25WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKTsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhjb21wYXJpc29uVmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0
YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVHUFIpOwot
ICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJnN0dWJKaXQpOwotICAgIH0KLQotICAgIEJpbmFy
eVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5h
cnlTd2l0Y2g6OkludFB0cik7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAg
IHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkgewotICAgICAgICBzaXplX3Qg
Y2FzZUluZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOwotICAgICAgICAKLSAgICAgICAg
Q2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKLSAg
ICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyOwotICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKLSAgICAgICAgICAgIEFT
U0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwgY2FsbExp
bmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOwotICAgICAg
ICAgICAgaWYgKCFjb2RlUHRyKQotICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4
ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJp
dHlDaGVja05vdFJlcXVpcmVkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICBjb2RlUHRyID0gdm0u
Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZmFzdENvdW50cykgewotICAgICAgICAgICAgc3R1
YkppdC5hZGQzMigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VH
UFIsIGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgbmVlZHNEb25lSnVtcCA9IGZhbHNlOwotICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikg
ewotICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+
c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICBjYWxsc1tjYXNl
SW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2UgaWYg
KGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQucHJlcGFy
ZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0g
c3R1YkppdC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChpc0RhdGFJQykKLSAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHVi
Sml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAg
ICAgIG5lZWRzRG9uZUp1bXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7Ci0gICAgICAgIGlmIChuZWVk
c0RvbmVKdW1wKQotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAg
IH0KLSAgICAKLSAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICBiaW5hcnlTd2l0Y2gu
ZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKLQotICAgIGlmIChmcmFtZVNodWZmbGVyKSB7
Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKLSAgICAgICAg
ZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOwotICAgICAgICBm
cmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKLSNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKLSNlbHNlCi0gICAg
ICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUklu
Zm86OnJlZ1QwKSk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZvclNs
b3dQYXRoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwg
R1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5m
bzo6cmVnVDEpOwotI2VuZGlmCi0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKLSAgICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1RhaWxDYWxs
KCkpIHsKLSAgICAgICAgLy8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRoLCBnZXQg
cmlkIG9mIGFueSByZW1uYW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBleGlzdC4g
VGhpcyByZWFsbHkgb25seSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAgICAgICAg
Ly8gU1AgZm9yIGNhbGxzLgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChHUFJJbmZvOjpyZWdUNCk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKLSAgICAKLSAgICBzdHViSml0
LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKLSAgICBB
c3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hC
dWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwg
Y2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKLSAg
ICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7Ci0jaWYgQ1BVKEFS
TV9USFVNQjIpCi0gICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1cmVzIHBy
b3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFu
IGFkZHJlc3MKLSAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQg
YSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90dG9tIGJp
dC4KLSAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1Nl
dChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOwotICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1Rh
aWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29k
ZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyh0YXJnZXQpKSk7Ci0jZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQ
dHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRy
KSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKLSAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZt
LmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsK
LSAgICAKLSAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICBj
YWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAg
ICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRh
cmdldHMgJXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHki
IDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5n
KGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCi0gICAgICAgIHZtLCBvd25lciwgY2FsbEZy
YW1lLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKLSAgICAgICAgV1RG
TW92ZShmYXN0Q291bnRzKSkpOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHNsb3cgcGF0aCBpcyB1
bnJlYWNoYWJsZSBvbiA2NC1iaXRzLCBidXQgc3RpbGwKLSAgICAvLyByZWFjaGFibGUgb24gMzIt
Yml0cyBzaW5jZSBhIG5vbi1jZWxsIGNhbGxlZSB3aWxsIGFsd2F5cwotICAgIC8vIHRyaWdnZXIg
dGhlIHNsb3cgcGF0aAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotCi0gICAg
Ly8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQgb25lIHdp
bGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKLSAgICAvLyB0aGF0IGl0J3Mg
bm8gbG9uZ2VyIG9uIHN0YWNrLgotICAgIGNhbGxMaW5rSW5mby5zZXRTdHViKFdURk1vdmUoc3R1
YlJvdXRpbmUpKTsKLSAgICAKLSAgICAvLyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhh
cyBhIGNhbGwgY2FjaGUgYXBhcnQgZnJvbSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2Fs
bAotICAgIC8vIHN0dWIuCi0gICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQotICAgICAg
ICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkK
LXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwotICAgIHN3aXRjaCAoa2luZCkgewot
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRo
aXM6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
SWREaXJlY3Q6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgIGNhc2Ug
R2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJB
c0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2luZCkKLXsK
LSAgICBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOwotICAg
IHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7Ci0gICAgICAgIHVz
aW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
ZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0
ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNl
dFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAg
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAg
ICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeVZhbDogewotICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlw
ZSgmb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlw
ZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJl
YWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci0gICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAgICAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJp
dmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAg
ICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6ZWRGdW5jdGlvbik7
Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
byk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQg
cmVzZXREZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBEZWxCeUtpbmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBEZWxCeUtpbmQ6OkJ5SWQp
Ci0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7
Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0SW5CeShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5k
KQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICBpZiAoa2luZCA9PSBJbkJ5
S2luZDo6QnlJZCkKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICBlbHNlCi0gICAgICAgIElubGluZUFjY2Vzczo6
cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEluc3RhbmNl
T2YoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsK
LSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lk
IHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElubGlu
ZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NO
b3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQotewotI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKLSAgICBpZiAoIWNhbGxlZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPih2bSwgY2FsbGVlKSkKLSAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxs
RW50cnlwb2ludCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVOVVNFRF9Q
QVJBTShraW5kKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKLSNlbmRpZgotICAgIHJldHVy
biBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2UzNzdl
ZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KEpJVCkKLQotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJDYWxs
VmFyaWFudC5oIgotI2luY2x1ZGUgIlB1dEtpbmQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWVu
dW0gY2xhc3MgR2V0QnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotICAgIFRyeUJ5SWQs
Ci0gICAgQnlJZFdpdGhUaGlzLAotICAgIEJ5SWREaXJlY3QsCi0gICAgUHJpdmF0ZU5hbWUsCi0g
ICAgUHJpdmF0ZU5hbWVCeUlkLAotfTsKLQotZW51bSBjbGFzcyBQdXRCeUtpbmQgewotICAgIEJ5
SWQsCi0gICAgQnlWYWwsCi19OwotCi1lbnVtIGNsYXNzIERlbEJ5S2luZCB7Ci0gICAgQnlJZCwK
LSAgICBCeVZhbAotfTsKLQotZW51bSBjbGFzcyBJbkJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBC
eVZhbCwKLSAgICBQcml2YXRlTmFtZQotfTsKLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwg
U3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoQXJyYXlQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1
ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Ci12b2lkIHJl
cGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVy
ZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKLXZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwg
U3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxC
eUtpbmQsIEVDTUFNb2RlKTsKLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsIGNv
bnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCBy
ZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLXZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENv
ZGVCbG9jayosIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIGJvb2wgd2FzRm91bmQpOwotdm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKFZNJiwgQ2Fs
bEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua0RpcmVjdENhbGwo
Q2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExp
bmtJbmZvJik7Ci12b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYsIENhbGxWYXJpYW50KTsKLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwotdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKLXZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFu
ZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldEluc3RhbmNlT2Yo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRDaGVja1ByaXZhdGVC
cmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFNldFByaXZh
dGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRy
VGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoVk0m
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCogY2FsbGVlKTsKLQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1Zjdi
Nzg2NDExZDg1NWIyYTFkZTQ3Yy4uZGJkNWFiZDM3ODhkNzFiODAzMDViYjg1MWZiY2MyNzEzZTg3
YjAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cApAQCAtMzQ0LDQ4ICszNDQsMjUgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGwoVk0mIHZtKQogICAgIHJldHVy
biB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ2FsbCk7CiB9
CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxU
aHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1
bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9y
VGFpbENhbGwoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxN
b2RlOjpUYWlsLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QoVk0mIHZtKQot
ewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBDb2RlRm9y
Q29uc3RydWN0KTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbChWTSYgdm0pCi17Ci0gICAgcmV0dXJu
IHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNhbGwpOwot
fQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFs
VGh1bmtGb3JDb25zdHJ1Y3RDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFs
VGh1bmtGb3Iodm0sIENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVu
a0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxs
TW9kZSBjYWxsTW9kZSkKIHsKLSAgICBhdXRvIG1vZGUgPSBjYWxsTGlua0luZm8uY2FsbE1vZGUo
KTsKLSAgICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCk7CiAg
ICAgYXV0byBnZW5lcmF0b3IgPSBbJl0gKCkgLT4gVGh1bmtHZW5lcmF0b3IgewotICAgICAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChjYWxsTW9kZSkgewogICAgICAgICBjYXNl
IENhbGxNb2RlOjpSZWd1bGFyOgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsOwotICAg
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3Q7CisgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7CiAgICAgICAgIGNhc2UgQ2Fs
bE1vZGU6OlRhaWw6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENhbGw7Ci0gICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdDsKKyAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0
OgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENhbGw7CiAgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAppbmRleCAwZjlmNmUyZDM2ZjZkZDIzZTE4NzI2YWNlNjMxNGEzMGEy
MDFkYmNlLi5hYjdjZjY2YzQyMTUxZWUwMTk1OGMxYWIyMmYyOWZjZDhkZDcwMTRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTQ5LDcgKzQ5LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0m
KTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFs
VGh1bmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbE1vZGUpOwogCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0m
KTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0
R2VuZXJhdG9yKFZNJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
CmluZGV4IGU4ZGFmZjdkODhiMzBjNmJmODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQwYjM3Mzg5
MjFhNGYwMDE1MTJlN2RlZTNhODQ0M2M1MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCkBAIC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIgdm9pZCB3
YXNtX2VudHJ5KHZvaWQqLCB2b2lkKiwgdm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlU
b0phdmFTY3JpcHRUcmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNF
bnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5U2xv
d1BhdGhUcmFtcG9saW5lKHZvaWQpOworZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0aG91dFVu
dGFnSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0aW9uSGFu
ZGxlclRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxMSW50VHJh
bXBvbGluZSh2b2lkKTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5pdGlhbGl6
ZSgpCiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVU
YWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1
Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2ND
b25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxK
U0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CkBAIC0xNjEsMTEgKzE2MiwxOSBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQot
ICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlT
bG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFp
bENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFn
Q29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0
YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZp
Zy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50
cnlTbG93UGF0aFB0clRhZyldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICB9CisgICAgeworICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOworICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVj
dChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAg
ICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0
ZTo6dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMWE5NWQxZGQw
ZWE1ZWYzNDMxMDYxNWI2OTFlYmM5YTFlYWI4MmE2YS4uMDk3YTAwY2U5ZWMyMmFiZGQyMmZlYzk3
YTQxNWRiZDI4OGVlNTYzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMuaCIKICNp
bmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNs
dWRlICJWTUlubGluZXMuaCIKQEAgLTU4Miw2ICs1ODMsMTcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc3RhY2tfY2hlY2spCiAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbEZyYW1lKTsKIH0K
IAorZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgY2FsbExpbmtJbmZvKTsKK30KKwor
ZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdu
b3JlZDsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihqc0Nhc3Q8SlNHbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpLCBjYWxsZWVGcmFtZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworfQorCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfbmV3X29iamVjdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTgxOSw3ICsxODMxLDgg
QEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNh
bGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRD
YWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxS
ZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5n
bG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNh
bGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhdXRv
KiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0
ZXJzOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJT
UCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBzbG93UGF0aExvZygiQ2FsbCBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxl
ZSwgIlxuIik7CkBAIC0xODM4LDcgKzE4NTEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBl
IGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAog
ICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAg
ICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1
bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsK
ICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBMTElOVF9DQUxMX1JFVFVS
TihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1
ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7
CisgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVj
dCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAg
ICAgc2xvd1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwg
Y2FsbGVlLCAiXG4iKTsKQEAgLTE4NDcsNyArMTg2MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVy
blR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxs
ZWUsCiAgICAgTExJTlRfQ0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFDb25zdHJ1
Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiB9CiAKLWlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlLCBMTEludENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gbnVsbHB0cikKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBD
YWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwg
SlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2Fs
bGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTg2MiwxNCArMTg3Niw5IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVT
cGVjaWFsaXphdGlvbktpCiAgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNE
eW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAg
QVNTRVJUKCEhY29kZVB0cik7Ci0KLSAgICAgICAgICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VT
U19TTE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBj
b2RlUHRyKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRo
PEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAg
ICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2Fs
bGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsK
KyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGNhbGxl
ZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7CiAgICAgfQpAQCAtMTkwNCw3NCArMTkxMyw5
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAgfQogCiAgICAgQVNTRVJUKCEhY29kZVB0
cik7Ci0gICAgCi0gICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJ
bmZvKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNhbGxlckNvZGVCbG9j
aywgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0g
ICAgfQotCiAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBj
YWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdl
bmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgT3Am
JiBieXRlY29kZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBjaGVja3Bv
aW50SW5kZXggPSAwKQotewotICAgIC8vIFRoaXMgbmVlZHMgdG86Ci0gICAgLy8gLSBTZXQgdXAg
YSBjYWxsIGZyYW1lLgotICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBp
bGUgaXQgaWYgbmVjZXNzYXJ5LgotICAgIC8vIC0gSWYgcG9zc2libGUsIGxpbmsgdGhlIGNhbGwn
cyBpbmxpbmUgY2FjaGUuCi0gICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUg
YWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCi0gICAgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGNhbGxlZUZvcihieXRlY29k
ZSwgY2hlY2twb2ludEluZGV4KSk7Ci0gICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9
IGNhbGxGcmFtZSAtIHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVj
a3BvaW50SW5kZXgpOwotICAgIAotICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2tw
b2ludEluZGV4KSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFt
ZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICAKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHNldFVwQ2FsbChjYWxs
ZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSwgJmNhbGxMaW5rSW5mb0ZvcihtZXRhZGF0YSwg
Y2hlY2twb2ludEluZGV4KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
YWxsKQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmlj
Q2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwp
KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCkKLXsKLSAg
ICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJs
b2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcFRhaWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0KQotewotICAgIExMSU5U
X0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNh
bGxGcmFtZSwgcGMtPmFzPE9wQ29uc3RydWN0PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7Ci19Ci0K
LUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpCi17Ci0g
ICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNh
bGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JPcGVuPigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRv
ck9wZW46OnN5bWJvbENhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2l0ZXJhdG9yX25leHRfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck5leHQ+
KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQpKTsKKyAgICBhdXRv
KiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0
ZXJzOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKQpAQCAtMjA0Myw4ICsx
OTg3LDggQEAgZW51bSBjbGFzcyBTZXRBcmd1bWVudHNXaXRoIHsKICAgICBDdXJyZW50QXJndW1l
bnRzCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiog
cGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgU2V0QXJndW1lbnRzV2l0aCBzZXQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgU2V0QXJndW1lbnRzV2l0aCBzZXQ+CitpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5z
dHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKQogewogICAgIExMSU5UX0JFR0lO
X05PX1NFVF9QQygpOwogCkBAIC0yMDUzLDExICsxOTk3LDEyIEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbioKICAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRv
IGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3A+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX2NhbGxlZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gdm0ubmV3
Q2FsbEZyYW1lUmV0dXJuVmFsdWU7Ci0KLSAgICBpZiAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6
Ok9iamVjdCkgeworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdm0u
dmFyYXJnc0xlbmd0aCArIDE7CisgICAgaWYgY29uc3RleHByIChzZXQgPT0gU2V0QXJndW1lbnRz
V2l0aDo6T2JqZWN0KSB7CiAgICAgICAgIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX3RoaXNWYWx1ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2Fy
Z3VtZW50cyksIGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwogICAg
ICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogICAgIH0gZWxz
ZQpAQCAtMjA2NywyNyArMjAxMiwzMCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFy
Z3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2Fs
bGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwog
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFt
ZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOworICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLnVw
ZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKKworICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbGVyU1Ap
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQogewot
ICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29k
ZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NT
ZXR1cDxPcENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwg
cGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rh
aWxfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZh
cmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpPYmpl
Y3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNldEFyZ3Vt
ZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQog
ewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGNh
bGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1l
bnRzKTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
LCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2Rl
Rm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3Rf
dmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncz4o
Y2FsbEZyYW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0
KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncywgU2V0QXJndW1l
bnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAog
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gcmV0dXJuUG9pbnQpCkBAIC0yMTEwLDcgKzIwNTgsOCBAQCBpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJ
bnN0cnVjdGlvbgogICAgIAogICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gSlNW
YWx1ZTo6ZW5jb2RlKGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNvZGUubV9l
Y21hTW9kZSkpOwogICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICBMTElOVF9DQUxMX1JF
VFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5W
YWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRh
Zyk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6
OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNh
bGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4OGFhNmFh
OTY0ZmI2ZTA5YjY2Li5kNDM4ZmNiMzM5ZGFmZTM3YTNjMTQxZGJlMjRhNmFkMjExMjliYjhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMzgs
NiArMzgsOCBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBsbGludF90cmFjZV9vcGVyYW5kKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwg
aW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CiBleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBjb25z
dCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBS
RUZFUkVOQ0VEX0ZST01fQVNNOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
bGlua19jYWxsKENhbGxGcmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOwor
ZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFt
ZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOwogZXh0ZXJuICJDIiB2b2lkIGxs
aW50X3dyaXRlX2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUqLCBKU0NlbGwqKSBSRUZFUkVOQ0VEX0ZS
T01fQVNNIFdURl9JTlRFUk5BTDsKIAogI2RlZmluZSBMTElOVF9TTE9XX1BBVEhfREVDTChuYW1l
KSBcCkBAIC0xMTksOSArMTIxLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMpOwogTExJTlRfU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9zZXRfZnVuY3Rpb25fbmFtZSk7Ci1MTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF90YWlsX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9jb25zdHJ1Y3QpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9z
aXplX2ZyYW1lX2Zvcl92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMpOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMTMxLDggKzEzMCw2IEBA
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3Mp
OwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTE2KTsKIExM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUzMik7Ci1M
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCk7
Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2Fs
bCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX2FyZ3Vt
ZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCA0NjJjYmZiZTRl
MzQ1Njg0NWUwNWFhOGJjMGM0ODExNTNjYmI4ZDBhLi4xNjAzYzJjNzg1NGM5OTliZTllNmM1NzA1
MzM2Y2ZmNzQyNzI5MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRo
dW5rcy5jcHAKQEAgLTM0Niw5ICszNDYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiBwb2ludGVyLCBQdAogewog
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMywgdGFn
KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQ
UkluZm86OnJlZ1QzKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUNSwgdGFnKTsKKyAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJlZ1Q1KTsK
KyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUNSwgT3BlcmF0aW9uUHRyVGFnKTsKIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkxMSW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBu
YW1lKTsKQEAgLTM2NiwxMyArMzY2LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCogcG9pbnRlciwKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAi
TExJbnQgJXMgd2FzbSBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRh
ZyB0YWcpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVh
dGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZywgYm9vbCB1bnRhZykKIHsKICAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCi0gICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKLSAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJlZ2lzdGVy
czo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmZhckp1bXAoR1BSSW5mbzo6
cmVnVDAsIHRhZyk7CisgICAgaWYgKHVudGFnKSB7CisgICAgICAgIGppdC51bnRhZ1B0cihHUFJJ
bmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAgIGppdC52YWxp
ZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKKyAgICB9CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6YXJndW1lbnRHUFI3LCB0YWcpOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50IHRhaWwgY2FsbCBnYXRlIHRo
dW5rIik7CkBAIC01NzMsOCArNTc1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IHJldHVybkxvY2F0aW9uVGh1bmsoT3Bjb2RlSUQgb3Bjb2RlSUQsIE9wY28KICAgICBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3Jfb3BlbikKICAgICBMTElOVF9SRVRVUk5f
TE9DQVRJT04ob3BfaXRlcmF0b3JfbmV4dCkKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3Bf
Y29uc3RydWN0KQotICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xv
dykKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdykK
KyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKQorICAgIExMSU5UX1JF
VFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfZ2V0X2J5X2lkKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlf
dmFsKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCmluZGV4IGI4N2M0MjBjYmU0MDJhMWYwY2Yw
ODY4MTA3YjVhZmQ2ZGJjZjU0YWMuLjA1ZWM2MDFjMDE2NGNiOTU0YjczYTIxYzczNTFmZjAxMGZl
YTcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCkBAIC04
OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGppdENhZ2VQdHJUaHVuaygpOwogI2lmIENQVShBUk02NEUpCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiwgUHRyVGFn
LCBjb25zdCBjaGFyKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxs
R2F0ZShQdHJUYWcpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZywgYm9vbCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBsb29wT1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGVudHJ5T1NSRW50cnlHYXRl
VGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IHdh
c21PU1JFbnRyeUdhdGVUaHVuaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGJiODhiNmZkYjA5OWI0OTlhZTZmZjRl
ODEwMTAxNTA0ZGFhNmQ0ZTMuLjMwN2I0MWYxN2FmMzg4NmY2M2JkOGE4NjRiNTNiYWM1ZDU0ODRh
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KQEAgLTU1MSw2ICs1NTEsNyBAQCBjb25zdCBTeW1ib2xUeXBlID0gY29uc3Rl
eHByIFN5bWJvbFR5cGUKIGNvbnN0IE9iamVjdFR5cGUgPSBjb25zdGV4cHIgT2JqZWN0VHlwZQog
Y29uc3QgRmluYWxPYmplY3RUeXBlID0gY29uc3RleHByIEZpbmFsT2JqZWN0VHlwZQogY29uc3Qg
SlNGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIgSlNGdW5jdGlvblR5cGUKK2NvbnN0IEludGVybmFs
RnVuY3Rpb25UeXBlID0gY29uc3RleHByIEludGVybmFsRnVuY3Rpb25UeXBlCiBjb25zdCBBcnJh
eVR5cGUgPSBjb25zdGV4cHIgQXJyYXlUeXBlCiBjb25zdCBEZXJpdmVkQXJyYXlUeXBlID0gY29u
c3RleHByIERlcml2ZWRBcnJheVR5cGUKIGNvbnN0IFByb3h5T2JqZWN0VHlwZSA9IGNvbnN0ZXhw
ciBQcm94eU9iamVjdFR5cGUKQEAgLTExNTEsMjcgKzExNTIsMjcgQEAgbWFjcm8gY2FsbFRhcmdl
dEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFt
ZSwgZHN0VmkKICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxsZWUKICAgICBlbHNpZiBB
Uk02NEUKICAgICAgICAgbWFjcm8gY2FsbE5hcnJvdygpCi0gICAgICAgICAgICBsZWFwIEpTQ0Nv
bmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4
cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2Ey
XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBK
U0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29u
c3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1w
IFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9q
c190cmFtcG9saW5lXyVvcGNvZGVOYW1lJToKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJU
YWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAg
ICAgbWFjcm8gY2FsbFdpZGUxNigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0
ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9w
Y29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBq
bXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAg
X2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUxNjoKLSAgICAgICAgICAgIGNhbGwgdDMs
IGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5k
CiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUzMigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZp
ZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIg
R2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1w
IFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxl
YXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsg
KGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0clNpemUsIGE3CisgICAg
ICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAg
ICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUzMjoKLSAgICAgICAgICAg
IGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAg
ICAgICAgZW5kCiAKLSAgICAgICAgbW92ZSBjYWxsZWUsIHQzCisgICAgICAgIG1vdmUgY2FsbGVl
LCB0NQogICAgICAgICBzaXplKGNhbGxOYXJyb3csIGNhbGxXaWRlMTYsIGNhbGxXaWRlMzIsIG1h
Y3JvIChnZW4pIGdlbigpIGVuZCkKICAgICBlbHNlCiAgICAgICAgIGNhbGwgY2FsbGVlLCBjYWxs
UHRyVGFnCkBAIC0xMjA5LDEyICsxMjEwLDIzIEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAg
ICAgZW5kCiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwgdGVtcDEs
IHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCi0gICAgYWRkcCBDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSwgc3AKK21hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCh0ZW1wMSwgdGVtcDIsIHRl
bXAzLCB0ZW1wNCkKIGVuZAogCi0jIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lCi1tYWNybyBw
cmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2Fs
bFB0clRhZykKK21hY3JvIGludm9rZUZvclJlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rp
b24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIGNhbGxQdHJUYWcpCitlbmQKKworIyB0
NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwob3Bj
b2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFs
UmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorZW5kCisKK21hY3JvIHByZXBhcmVGb3JT
bG93UmVndWxhckNhbGwoKQorZW5kCisKKyMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUgKyBD
YWxsZXJGcmFtZUFuZFBDU2l6ZQorIyBXZSBsZWF2ZSBjZnIgdGVtcDQgdG8gdXNlIGl0IGZvciB1
bnRhZ2dpbmcuCittYWNybyBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywg
dGVtcDQpCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogCiAgICAgbG9hZGkg
UGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzW2Nmcl0sIHRlbXAyCkBA
IC0xMjMyLDE4ICsxMjQ0LDE3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRl
bXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIG1vdmUgY2ZyLCB0ZW1w
MQogICAgIGFkZHAgdGVtcDIsIHRlbXAxCiAKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbc3BdLCB0ZW1wMgorICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIENhbGxlckZyYW1lQW5kUENTaXplW3Nw
XSwgdGVtcDIKICAgICAjIFdlIGFzc3VtZSA8IDJeMjggYXJndW1lbnRzCiAgICAgbXVsaSBTbG90
U2l6ZSwgdGVtcDIKICAgICBhZGRpIFN0YWNrQWxpZ25tZW50IC0gMSArIENhbGxGcmFtZUhlYWRl
clNpemUsIHRlbXAyCiAgICAgYW5kaSB+U3RhY2tBbGlnbm1lbnRNYXNrLCB0ZW1wMgogCiAgICAg
aWYgQVJNdjcgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIENfTE9PUCBvciBDX0xPT1BfV0lOIG9yIE1J
UFMgb3IgUklTQ1Y2NAotICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAogICAg
ICAgICBzdWJpIENhbGxlckZyYW1lQW5kUENTaXplLCB0ZW1wMgogICAgICAgICBsb2FkcCBDYWxs
ZXJGcmFtZUFuZFBDOjpyZXR1cm5QQ1tjZnJdLCBscgogICAgIGVsc2UKLSAgICAgICAgYWRkcCBQ
dHJTaXplLCBzcAorICAgICAgICBzdWJwIFB0clNpemUsIHNwCiAgICAgICAgIHN1YmkgUHRyU2l6
ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgUHRyU2l6ZVtjZnJdLCB0ZW1wMwogICAgICAgICBzdG9y
ZXAgdGVtcDMsIFtzcF0KQEAgLTEyNzAsOSArMTI4MSwxMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFp
bENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAg
ICBlbmQKIAogICAgIG1vdmUgdGVtcDEsIHNwCitlbmQKKworbWFjcm8gaW52b2tlRm9yVGFpbENh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFn
KQogICAgIGlmIEFSTTY0RQotICAgICAgICBtb3ZlIHRlbXA0LCBhMgotICAgICAgICBtb3ZlIGNh
bGxlZSwgYTAKKyAgICAgICAgbW92ZSBtYXliZU9sZENGUiwgYTIKKyAgICAgICAgbW92ZSBjYWxs
ZWUsIGE3CiAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZK
U0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbCVjYWxsUHRyVGFnJSkg
KiBQdHJTaXplLCBhMQogICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
JWNhbGxQdHJUYWclCiAgICAgZWxzZQpAQCAtMTI4MCw2ICsxMjk0LDIyIEBAIG1hY3JvIHByZXBh
cmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRy
VGFnKQogICAgIGVuZAogZW5kCiAKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQ
b2x5bW9ycGhpY1RhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbFB0clRhZykKKyAg
ICBpZiBBUk02NEUKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTcK
KyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZp
Z0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnRhaWxDYWxsV2l0aG91dFVudGFnJWNhbGxQdHJU
YWclKSAqIFB0clNpemUsIGExCisgICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWcgIyAlY2FsbFB0clRhZyUKKyAgICBlbHNlCisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0
aW5hdGlvblt0NV0sIGExCisgICAgICAgIGptcCBhMSwgY2FsbFB0clRhZworICAgIGVuZAorZW5k
CisKK21hY3JvIHByZXBhcmVGb3JTbG93VGFpbENhbGwoKQorICAgIHJlc3RvcmVDYWxsZWVTYXZl
c1VzZWRCeUxMSW50KCkKK2VuZAorCiBtYWNybyBzbG93UGF0aEZvckNvbW1vbkNhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxs
KQogICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIG1f
cHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiBlbmQKQEAg
LTEyOTEsNyArMTMyMSw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1CiAgICAgICAgIG1hY3Jv
IChjYWxsZWUsIGNhbGxlZUZyYW1lUHRyKQogICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0
ciwgLmRvbnRVcGRhdGVTUAogICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKLSAg
ICAgICAgICAgIHByZXBhcmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlTbG93
UGF0aFB0clRhZykKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQogICAg
ICAgICAuZG9udFVwZGF0ZVNQOgogICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNv
ZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZp
cnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQog
ICAgICAgICBlbmQpCkBAIC0xODIwLDEyICsxODUwLDE2IEBAIGlmIEFSTTY0RQogICAgIGdsb2Jh
bCBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlUcmFtcG9s
aW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0Vu
dHJ5UHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAgICAgZ2xvYmFsIF90
YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5U2xv
d1BhdGhUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAg
am1wIGEwLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRy
VGFnCisKKyAgICBnbG9iYWwgX3RhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUK
KyAgICBfdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZToKKyAgICAgICAgam1w
IGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9s
aW5lCiAgICAgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lOgpAQCAtMjMyNSwxNyArMjM1OSwx
NyBAQCBlbmQpCiAKIAogIyB3ZSBjYW4ndCB1c2UgY2FsbE9wIGJlY2F1c2Ugd2UgY2FuJ3QgcGFz
cyBgY2FsbGAgYXMgdGhlIG9wY29kZSBuYW1lLCBzaW5jZSBpdCdzIGFuIGluc3RydWN0aW9uIG5h
bWUKLWNvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxpbnRfc2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwg
cHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCitjb21tb25DYWxs
T3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1
bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3Vs
YXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEp
CiAgICAgYXJyYXlQcm9maWxlRm9yQ2FsbChPcENhbGwsIGdldHUpCiBlbmQpCiAKIAotbWFjcm8g
Y2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGZuKQotICAgIGNv
bW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9wY29kZU5hbWUl
LCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKK21hY3JvIGNhbGxPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBo
aWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCisgICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1l
JSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNh
bGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBmbikK
IGVuZAogCiAKLWNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2Fs
bCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY2FsbE9wKHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwg
cHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3Jw
aGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0
YSkKICAgICBhcnJheVByb2ZpbGVGb3JDYWxsKE9wVGFpbENhbGwsIGdldHUpCiAgICAgY2hlY2tT
d2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIHJlbG9hZCBtZXRhZGF0YSBzaW5jZSBjaGVj
a1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKSBtaWdodCBoYXZlIHRyYXNoZWQgdDUKQEAgLTIzNDMs
NyArMjM3Nyw3IEBAIGNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWls
Q2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogZW5kKQogCiAKLWNhbGxPcChjb25zdHJ1Y3Qs
IE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0
YSkgZW5kKQorY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFy
Q2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJD
YWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVu
ZCkKIAogCiBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCkBAIC0yMzU0
LDQ3ICsyMzg4LDI5IEBAIG1hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkK
IC5ub0V4Y2VwdGlvbjogICAgCiBlbmQKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwg
cHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCi0gICAgYnJhbmNo
SWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCi0gICAg
IyBjYWxsZWVGcmFtZSBpbiByMQotICAgIGlmIEpTVkFMVUU2NAotICAgICAgICBtb3ZlIHIxLCBz
cAotICAgIGVsc2UKLSAgICAgICAgIyBUaGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWdu
ZWQsIG1vdmUgZG93biBieSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGlnbgotICAgICAgICBp
ZiBBUk12NwotICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCi0g
ICAgICAgICAgICBtb3ZlIHQyLCBzcAotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdWJwIHIx
LCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKLSAgICAgICAgZW5kCi0gICAgZW5kCi0gICAgc2xv
d1BhdGhGb3JDb21tb25DYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0
Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLWVuZAotCiAKLWxsaW50T3Aob3BfY2FsbF92YXJh
cmdzLCBPcENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0Nh
bGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgT3BDYWxsVmFyYXJncywgZGlzcGF0Y2gs
IF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0
aF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRh
dGEob3BfY2FsbF92YXJhcmdzLCBPcENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJn
cywgc2l6ZSwgZ2V0LCBPcENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50
X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9y
UmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9y
U2xvd1JlZ3VsYXJDYWxsKQogZW5kKQogCi1sbGludE9wKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBP
cFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0
aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hU
b0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxs
IGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRo
ZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxs
X3ZhcmFyZ3MsIHNpemUsIE9wVGFpbENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3df
cGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF92
YXJhcmdzLCBwcmVwYXJlRm9yVGFpbENhbGwpCisgICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2Nh
bGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcFRhaWxDYWxsVmFyYXJncywgbV9wcm9maWxlLCBtX2Rz
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3Zh
cmFyZ3MsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWls
Q2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBw
cmVwYXJlRm9yU2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cywgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGls
b2d1ZSgpCiAgICAgIyBXZSBsaWUgYW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9m
IHByZXBhcmluZyBpdCBzaW5jZSB3ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9y
IGEgY2FsbCBvcGNvZGUKLSAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cywgc2l6ZSwgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIGRpc3BhdGNoLCBfbGxp
bnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xv
d19wYXRoX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsKQor
ICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBn
ZXQsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1
bWVudHMsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVw
YXJlRm9yVGFpbENhbGwsIGludm9rZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNU
YWlsQ2FsbCwgcHJlcGFyZUZvclNsb3dUYWlsQ2FsbCkKIGVuZCkKIAogCi1sbGludE9wKG9wX2Nv
bnN0cnVjdF92YXJhcmdzLCBPcENvbnN0cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoKQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIE9w
Q29uc3RydWN0VmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9m
b3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9jb25zdHJ1Y3RfdmFyYXJncywg
T3BDb25zdHJ1Y3RWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKKyAgICBkb0NhbGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBn
ZXQsIE9wQ29uc3RydWN0VmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93
X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9y
UmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9y
U2xvd1JlZ3VsYXJDYWxsKQogZW5kKQogCiAKQEAgLTI1MTAsNiArMjUyNiw5MSBAQCBvcChsbGlu
dF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBp
bnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5jdGlv
bkZvckNvbnN0cnVjdCkKIGVuZCkKIAorIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVl
CisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QK
K21hY3JvIGxpbmtTbG93UGF0aEZvcihmdW5jdGlvbikKKyAgICBmdW5jdGlvblByb2xvZ3VlKCkK
KyAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV92bVt0M10sIHQxCisgICAgc3RvcmVwIGNmciwg
Vk06OnRvcENhbGxGcmFtZVt0MV0KKyAgICBtb3ZlIHQyLCBhMgorICAgIG1vdmUgdDMsIGExCisg
ICAgbW92ZSBjZnIsIGEwCisgICAgY0NhbGw0KGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uRXBpbG9n
dWUoKQorICAgIHVudGFnUmV0dXJuQWRkcmVzcyBzcAorICAgIGJ0cHogcjEsIC5kb05vdFRyYXNo
CisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKQorICAgIHByZXBhcmVGb3JU
YWlsQ2FsbCh0MSwgdDIsIHQzLCB0NCkKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MgdDQKKy5kb05v
dFRyYXNoOgorICAgIGptcCB0MCwgSlNFbnRyeVB0clRhZworZW5kCisKKyMgNjRiaXQ6dDAgMzJi
aXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxl
cidzIEpTR2xvYmFsT2JqZWN0CittYWNybyB2aXJ0dWFsVGh1bmtGb3Iob2Zmc2V0T2ZKSVRDb2Rl
V2l0aEFyaXR5Q2hlY2ssIGludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lLCBwcmVwYXJlQ2FsbCwg
c2xvd0Nhc2UpCisgICAgYWRkaSAxLCBDYWxsTGlua0luZm86Om1fc2xvd1BhdGhDb3VudFt0Ml0K
KyAgICBpZiBKU1ZBTFVFNjQKKyAgICAgICAgbW92ZSBOb3RDZWxsTWFzaywgdDEKKyAgICAgICAg
YnRxbnogdDAsIHQxLCBzbG93Q2FzZQorICAgIGVsc2UKKyAgICAgICAgYmluZXEgdDEsIENlbGxU
YWcsIHNsb3dDYXNlCisgICAgZW5kCisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBKU0Z1
bmN0aW9uVHlwZSwgLm5vdEpTRnVuY3Rpb24KKyAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1
dGFibGVPclJhcmVEYXRhW3QwXSwgdDEKKyAgICBidHB6IHQxLCAoY29uc3RleHByIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgLmlzRXhlY3V0YWJsZQorICAgIGxvYWRwIChGdW5jdGlvblJhcmVE
YXRhOjptX2V4ZWN1dGFibGUgLSAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSlb
dDFdLCB0MQorLmlzRXhlY3V0YWJsZToKKyAgICBsb2FkcCBvZmZzZXRPZkpJVENvZGVXaXRoQXJp
dHlDaGVja1t0MV0sIHQxCisgICAgYnRweiB0MSwgc2xvd0Nhc2UKKy5jYWxsQ29kZToKKyAgICBw
cmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkKKyAgICBqbXAgdDEsIEpTRW50cnlQdHJUYWcKKy5u
b3RKU0Z1bmN0aW9uOgorICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgSW50ZXJuYWxGdW5j
dGlvblR5cGUsIHNsb3dDYXNlCisgICAgcHJlcGFyZUNhbGwodDUsIHQyLCB0MywgdDQpCisgICAg
am1wIGludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lCitlbmQKKworIyA2NGJpdDp0MCAzMmJpdCh0
MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3Mg
SlNHbG9iYWxPYmplY3QKK29wKGxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQor
ICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfbGlua19jYWxsKQorZW5kKQorCisjIDY0Yml0OnQw
IDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBj
YWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUs
IG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1w
b2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkgZW5kLCAuc2xvd0Nhc2Up
Cisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitl
bmQpCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlu
a0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFs
X2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVj
dXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIF9sbGludF9p
bnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1w
MiwgdGVtcDMsIHRlbXA0KSBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xv
d1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkKK2VuZCkKKworIyA2NGJpdDp0MCAzMmJpdCh0
MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3Mg
SlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUsIG1h
Y3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JD
YWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xp
bmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKKyAgICAgICAgcHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHRlbXAxKQorICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwo
dGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCisgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0
ZW1wNAorICAgIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZv
cihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQogCiBpZiBKSVQKICAgICBtYWNybyBsb2FkQmFz
ZWxpbmVKSVRDb25zdGFudFBvb2woKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGMwNGZmZDZiMGJjM2YyNmUxOTJmMDZm
MmJiZjc0YjA2NGRjYjI3OWEuLjk4NzZlZjZlZjc0MmFjZWVkYWUyNjlhMmFiNDU0YzViNjJjZDUx
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5jcHAKQEAgLTEyOSw2ICsxMjksOCBAQCB1c2luZyBXZWJDb25maWc6OmdfY29uZmln
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FsbExpbmtJbmZvOworCiAvLz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KIC8vIENMb29wUmVnaXN0ZXIgaXMgdGhlIHN0b3JhZ2UgZm9yIGFuIGVtdWxh
dGVkIENQVSByZWdpc3Rlci4KIC8vIEl0IGRlZmluZXMgdGhlIHBvbGljeSBvZiBob3cgaW50cyBz
bWFsbGVyIHRoYW4gaW50cHRyX3QgYXJlIHBhY2tlZCBpbnRvIHRoZQpAQCAtMTY2LDYgKzE2OCw3
IEBAIGNsYXNzIENMb29wUmVnaXN0ZXIgewogICAgIG9wZXJhdG9yIFByb3RvQ2FsbEZyYW1lKigp
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxQcm90b0NhbGxGcmFtZSo+KG1fdmFsdWUpOyB9CiAgICAg
b3BlcmF0b3IgUmVnaXN0ZXIqKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lzdGVyKj4obV92
YWx1ZSk7IH0KICAgICBvcGVyYXRvciBWTSooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Vk0qPiht
X3ZhbHVlKTsgfQorICAgIG9wZXJhdG9yIENhbGxMaW5rSW5mbyooKSB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8Q2FsbExpbmtJbmZvKj4obV92YWx1ZSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnRw
dHJfdCk+PgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcj0oVCB2YWx1ZSkgeyBtX3Zh
bHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmlu
ZGV4IDkwM2U1YTQ1YjFiNjY4MmZkMjg3OGI5Nzk0ODUyYWVmZDY3NTFkNWUuLmQ4YjYzMDhhM2U2
ZmQ0NWYyYzM1ZDBiMjdhNDQ5NGI5OGRhNjAzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMTgs
NyArMTE4LDkgQEAgbWFjcm8gY0NhbGwyVm9pZChmdW5jdGlvbikKIGVuZAogCiBtYWNybyBjQ2Fs
bDQoZnVuY3Rpb24pCi0gICAgaWYgQVJNdjcgb3IgTUlQUworICAgIGlmIENfTE9PUCBvciBDX0xP
T1BfV0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwg
YTMKKyAgICBlbHNpZiBBUk12NyBvciBNSVBTCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBl
bHNpZiBYODYgb3IgWDg2X1dJTgogICAgICAgICBwdXNoIGEzCkBAIC0yMTUxLDM1ICsyMTUzLDYw
IEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGJp
bmVxIFRoaXNBcmd1bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywg
LmRvbmUKICAgICBsb2FkaSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2Nmciwg
dDMsIDhdLCB0MAogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAg
c3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJy
YXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDAsICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlE
W3Q1XQogLmRvbmU6CiBlbmQKIAotbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0
aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHBy
ZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1l
bnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEodDUs
IHQwKQotICAgIGdldENhbGxlZSh0MCkKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCittYWNybyBjYWxs
SGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5h
bWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQ
b2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdl
dENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
CisgICAgZ2V0Q2FsbGVlKHQzKQogCi0gICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0s
IHQyCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcs
IHQzLCAub3BDYWxsU2xvdykKLSAgICBiaW5lcSB0MywgdDIsIC5vcENhbGxTbG93CisgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MywgdDEsIHQwKQorCisgICAgIyBBbGlnbmVkIHRv
IEpJVDo6Y29tcGlsZVNldHVwRnJhbWUKICAgICBnZXRBcmd1bWVudFN0YXJ0KHQzKQogICAgIGxz
aGlmdGkgMywgdDMKICAgICBuZWdpIHQzCiAgICAgYWRkcCBjZnIsIHQzICAjIHQzIGNvbnRhaW5z
IHRoZSBuZXcgdmFsdWUgb2YgY2ZyCi0gICAgc3RvcmVpIHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zm
c2V0W3QzXQotICAgIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKSAgICAKLSAgICBz
dG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAg
ICBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh0MikKICAgICBzdG9yZWkgdDIsIEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KLSAgICBzdG9yZWkgQ2Vs
bFRhZywgQ2FsbGVlICsgVGFnT2Zmc2V0W3QzXQorCisgICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRz
IGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3VyZSBzcC4KKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZWkgdDAsIENhbGxl
ZSArIFBheWxvYWRPZmZzZXRbdDNdCisgICAgc3RvcmVpIHQxLCBDYWxsZWUgKyBUYWdPZmZzZXRb
dDNdCiAgICAgbW92ZSB0Mywgc3AKLSAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0
LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFj
aGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQorICAgIGFkZHAgQ2FsbGVyRnJhbWVB
bmRQQ1NpemUsIHNwCisKKyAgICBiaW5lcSB0MSwgQ2VsbFRhZywgLm9wQ2FsbFNsb3cKKyAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JD
b2RlQmxvY2tbdDVdLCB0MworICAgIGJ0cHogdDMsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpw
b2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAjIHByZXBhcmVDYWxs
IGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVu
dGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAjIEJ1dCB3ZSBzaG91
bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91
bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICBwcmVwYXJlUG9s
eW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAgIGptcCAu
Z29Qb2x5bW9ycGhpYworCisubm90UG9seW1vcnBoaWM6CisgICAgYnBuZXEgdDAsIHQzLCAub3BD
YWxsU2xvdworICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisuZ29Qb2x5bW9ycGhp
YzoKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUu
ZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGludm9rZUNh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCiAKIC5vcENh
bGxTbG93OgotICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCkKKyAgICAjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUK
KyAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFs
T2JqZWN0CisgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
LCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwg
dDUKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
Z2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJn
ZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVBy
b2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRh
ZykKIGVuZAogICAgICAgICAKLW1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0
aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCittYWNybyBjb21tb25DYWxs
T3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9r
ZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAg
ICBsbGludE9wV2l0aE1ldGFkYXRhKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1
LCB0MCkKIApAQCAtMjE4OCw3ICsyMjE1LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5h
bWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAg
ICAgZW5kLCBtZXRhZGF0YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAg
ICAgICBnZXQobV9jYWxsZWUsIHQwKQorICAgICAgICAgICBnZXQobV9jYWxsZWUsIGRzdCkKICAg
ICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3QpCkBAIC0yMTk5
LDEwICsyMjI2LDY4IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwg
b3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNp
emUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogICAgICAgICAKLSAg
ICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3By
b2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRD
YWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCisgICAgICAgICMgdDUg
aG9sZHMgbWV0YWRhdGEKKyAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwg
b3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwg
cHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAg
IGVuZCkKIGVuZAogCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZv
a2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCkKKyAgICBjYWxsU2xv
d1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3df
ZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAjIGNhbGxlZUZyYW1lIGluIHIxCisgICAg
aWYgSlNWQUxVRTY0CisgICAgICAgIG1vdmUgcjEsIHNwCisgICAgZWxzZQorICAgICAgICAjIFRo
ZSBjYWxsZWVGcmFtZSBpcyBub3Qgc3RhY2sgYWxpZ25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZy
YW1lQW5kUENTaXplIHRvIGFsaWduCisgICAgICAgIGlmIEFSTXY3CisgICAgICAgICAgICBzdWJw
IHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgdDIKKyAgICAgICAgICAgIG1vdmUgdDIsIHNwCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBz
cAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBjYWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBz
bG93UGF0aCwKKyAgICAgICAgIyBUaG9zZSBhcmUgcjAgYW5kIHIxCisgICAgICAgIG1hY3JvIChy
ZXN0b3JlZFBDT3JUaHJvdywgY2FsbGVlRnJhbWVQdHIpCisgICAgICAgICAgICBidHB6IGNhbGxl
ZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQCisgICAgICAgICAgICByZXN0b3JlU3RhdGVBZnRlckND
YWxsKCkKKyAgICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCisgICAgICAgICAgICBn
ZXQobV9jYWxsZWUsIHQyKQorICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MiwgdDEsIHQwKQorICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisgICAgICAgICAg
ICBiaW5lcSB0MSwgQ2VsbFRhZywgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0
NV0sIHQzCisgICAgICAgICAgICBidHB6IHQzLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9s
eW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAgICAgICAgICAjIHByZXBh
cmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVk
IHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAgICAgICAg
ICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNl
IHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgor
ICAgICAgICAgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgSlNF
bnRyeVB0clRhZykKKyAgICAgICAgICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisgICAgICAgIC5u
b3RQb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGJwbmVxIHQwLCB0MywgLm9wQ2FsbFNsb3cKKyAg
ICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisgICAgICAgIC5nb1BvbHlt
b3JwaGljOgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUK
KyAgICAgICAgICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpT
RW50cnlQdHJUYWcpCisKKyAgICAgICAgLm9wQ2FsbFNsb3c6CisgICAgICAgICAgICAjIDY0Yml0
OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMgQ2FsbExpbmtJ
bmZvKgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgICAg
ICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwg
dDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVd
LCB0NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAgICAgIHByZXBh
cmVTbG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUl
X3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5kb250VXBkYXRl
U1A6CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xp
bmUKKyAgICAgICAgZW5kKQorZW5kCisKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAg
ICBnZXQobV92YWx1ZSwgdDIpCkBAIC0yODY2LDcgKzI5NTEsOCBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRlcmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRzdAogICAgIGVuZAogCi0gICAgY2FsbEhlbHBlcihv
cF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJ
dGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVn
dWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxl
ZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhp
c0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9y
X29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3Bl
biwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
aW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBw
cmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1l
dGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1
bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9y
ZU5leHRBbmREaXNwYXRjaCh2YWx1ZVRhZywgdmFsdWVQYXlsb2FkKQpAQCAtMjkyNyw3ICszMDEz
LDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4
dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFs
dWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIu
Ci0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJh
dG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFs
dWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBt
ZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxI
ZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2Nh
bGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJl
Rm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBo
aWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERv
bmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6
CiAgICAgbWFjcm8gc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWVUYWcsIGRvbmVW
YWx1ZVBheWxvYWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGE5MTMxNGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJl
MmY1OWMwYTgzNzAuLjM5MjVjN2MzNmM0ZTM4MDAyODM3MmZiZjZiZGY1ZTcxNGM5NjViNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCkBAIC0xNDMsNyArMTQzLDkgQEAgZW5kCiAjIFRoaXMgYmFyZWx5IHdvcmtzLiBh
cmczIGFuZCBhcmc0IHNob3VsZCBwcm9iYWJseSBiZSBpbW1lZGlhdGVzLgogbWFjcm8gY0NhbGw0
KGZ1bmN0aW9uKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHQ0LCAweGJhZDBjMDA0
KQotICAgIGlmIFg4Nl82NCBvciBBUk02NCBvciBBUk02NEUgb3IgUklTQ1Y2NAorICAgIGlmIENf
TE9PUCBvciBDX0xPT1BfV0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwg
YTAsIGExLCBhMiwgYTMKKyAgICBlbHNpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJ
U0NWNjQKICAgICAgICAgY2FsbCBmdW5jdGlvbgogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAg
ICAgIyBPbiBXaW42NCwgcmN4LCByZHgsIHI4LCBhbmQgcjkgYXJlIHVzZWQgZm9yIHBhc3Npbmcg
dGhlIGZpcnN0IGZvdXIgcGFyYW1ldGVycy4KQEAgLTMwOSwxMiArMzExLDEyIEBAIG1hY3JvIG1h
a2VKYXZhU2NyaXB0Q2FsbChlbnRyeSwgcHJvdG9DYWxsRnJhbWUsIHRlbXAxLCB0ZW1wMikKICAg
ICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgogICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVu
dHJ5CiAgICAgZWxzaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgZW50cnksIHQzCi0gICAgICAgIGxl
YXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsg
KGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGEyCi0gICAg
ICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisgICAg
ICAgIG1vdmUgZW50cnksIHQ1CisgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9K
YXZhU2NyaXB0KSAqIFB0clNpemUsIGE3CisgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCiAgICAgICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNj
cmlwdFRyYW1wb2xpbmUKICAgICAgICAgX3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lOgot
ICAgICAgICBjYWxsIHQzLCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGNhbGwgdDUsIEpTRW50cnlQ
dHJUYWcKICAgICBlbHNlCiAgICAgICAgIGNhbGwgZW50cnksIEpTRW50cnlQdHJUYWcKICAgICBl
bmQKQEAgLTIzNjAsNDEgKzIzNjIsNTggQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNv
ZGVTdHJ1Y3QsIGdldHUpCiAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhd
LCB0MAogICAgIGJ0cW56IHQwLCBub3RDZWxsTWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6
Om1fc3RydWN0dXJlSURbdDBdLCB0MwotICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJl
SURbdDVdCisgICAgc3RvcmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQ
cm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3JvIGNh
bGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxl
TmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKQotICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisjIHQ1
IGhvbGRzIG1ldGFkYXRhLgorbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBh
cmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwg
c2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIGdldENhbGxlZSh0MSkKIAotICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckxh
c3RTZWVuQ2FsbGVlV2l0aExpbmtCaXRbdDVdLCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDAsIHQzKQotICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKIAorICAgICMgQWxpZ25lZCB0byBKSVQ6
OmNvbXBpbGVTZXR1cEZyYW1lCiAgICAgZ2V0QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRp
IDMsIHQzCiAgICAgbmVncCB0MwogICAgIGFkZHAgY2ZyLCB0MwotICAgIHN0b3JlcSB0MiwgQ2Fs
bGVlW3QzXQogICAgIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKQotICAgIHN0b3Jl
UEMoKQogICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2Fk
T2Zmc2V0W3QzXQorCisgICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5k
IGNvbmZpZ3VyZSBzcC4KKyAgICBzdG9yZVBDKCkKKyAgICBzdG9yZXEgdDAsIENhbGxlZVt0M10K
ICAgICBtb3ZlIHQzLCBzcAotICAgIGlmIEFSTTY0RQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0
MAotICAgICAgICBwcmVwYXJlQ2FsbCh0MCwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcp
Ci0gICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8u
bV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQwCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQwLCBKU0VudHJ5UHRyVGFnKQotICAgIGVsc2UKLSAgICAg
ICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5t
X21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0g
ICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0s
IEpTRW50cnlQdHJUYWcpCi0gICAgZW5kCi0ub3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAg
ICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorCisgICAgbG9hZHAgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDEK
KyAgICBidHB6IHQxLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVN
YXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5v
dCB1bnRhZyByZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0
cmFtcG9saW5lIHNlcGFyYXRlbHkuCisgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0
IGZvciBwb2x5bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhl
IHBvbHltb3JwaGljIHRodW5rIHNpZGUuCisgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5h
bWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lz
dGVyLCBkaXNwYXRjaCwgSlNFbnRyeVB0clRhZykKKyAgICBqbXAgLmdvUG9seW1vcnBoaWMKIAot
bWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHBy
ZXBhcmVDYWxsLCBwcm9sb2d1ZSkKKy5ub3RQb2x5bW9ycGhpYzoKKyAgICBicW5lcSB0MCwgdDEs
IC5vcENhbGxTbG93CisgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHlt
b3JwaGljOgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52
b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUs
IGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKwor
Lm9wQ2FsbFNsb3c6CisgICAgIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAg
IyB0MiBpcyBDYWxsTGlua0luZm8qCisgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVj
dAorICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUs
IHQyICMgQ2FsbExpbmtJbmZvKiBpbiB0MgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9jYWxsTGlua0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1Cisg
ICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2Jh
bE9iamVjdFt0M10sIHQzCisgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVu
Y3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxl
TmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCitl
bmQKKworbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1
Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVT
bG93Q2FsbCwgcHJvbG9ndWUpCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKQEAgLTI0MDMsNyArMjQyMiw3IEBAIG1hY3Jv
IGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJl
Q2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8g
Z2V0Q2FsbGVlKGRzdCkKLSAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAg
ICBnZXQobV9jYWxsZWUsIGRzdCkKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0QXJn
dW1lbnRTdGFydChkc3QpCkBAIC0yNDE0LDEwICsyNDMzLDY3IEBAIG1hY3JvIGNvbW1vbkNhbGxP
cChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9n
dWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAg
ICAgICAgIGVuZAogCi0gICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9w
Y29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50
KQorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRhCisgICAgICAgIGNhbGxIZWxwZXIob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNh
bGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXpl
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJn
dW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKIAorbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVO
YW1lLCBzaXplLCBnZXQsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBw
cmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0Nh
bGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRp
b24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgIyBjYWxsZWVG
cmFtZSBpbiByMQorICAgIGlmIEpTVkFMVUU2NAorICAgICAgICBtb3ZlIHIxLCBzcAorICAgIGVs
c2UKKyAgICAgICAgIyBUaGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUg
ZG93biBieSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGlnbgorICAgICAgICBpZiBBUk12Nwor
ICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCisgICAgICAgICAg
ICBtb3ZlIHQyLCBzcAorICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSwgc3AKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgY2FsbENhbGxTbG93
UGF0aCgKKyAgICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhvc2UgYXJlIHIwIGFuZCByMQor
ICAgICAgICBtYWNybyAocmVzdG9yZWRQQ09yVGhyb3csIGNhbGxlZUZyYW1lUHRyKQorICAgICAg
ICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAorICAgICAgICAgICAgcmVz
dG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBz
cAorICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MSkKKyAgICAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQorICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQor
CisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgICAgICAgICAgYnRweiB0MSwgKGNv
bnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9y
cGhpYworICAgICAgICAgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyBy
ZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5l
IHNlcGFyYXRlbHkuCisgICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQg
Zm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUg
cG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBhcmVQb2x5bW9ycGhpYyhv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAgICBqbXAgLmdv
UG9seW1vcnBoaWMKKworICAgICAgICAubm90UG9seW1vcnBoaWM6CisgICAgICAgICAgICBicW5l
cSB0MCwgdDEsIC5vcENhbGxTbG93CisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0
LCB0MSkKKworICAgICAgICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBpbnZva2VDYWxsKG9wY29kZU5h
bWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lz
dGVyLCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisgICAgICAgIC5vcENhbGxT
bG93OgorICAgICAgICAgICAgIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAg
ICAgICAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAgICAgICAgICMgdDMgaXMgY2FsbGVy
J3MgSlNHbG9iYWxPYmplY3QKKyAgICAgICAgICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBpbiB0MgorICAgICAg
ICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Ns
b3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9j
a1tjZnJdLCB0MworICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0
M10sIHQzCisgICAgICAgICAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgICAgICAgICAgY2FsbFRh
cmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVl
UHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRy
VGFnKQorICAgICAgICAuZG9udFVwZGF0ZVNQOgorICAgICAgICAgICAgam1wIF9sbGludF90aHJv
d19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCisgICAgICAgIGVuZCkKK2VuZAorCiBsbGludE9w
KG9wX3JldCwgT3BSZXQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQogICAgIGNoZWNrU3dp
dGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgZ2V0KG1fdmFsdWUsIHQyKQpAQCAtMzA0Niw4ICsz
MTIyLDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJhdG9y
T3BlbiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QKICAg
ICBlbmQKIAotCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19w
YXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxl
LCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hl
Y2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3Rh
cnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkK
KyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0
b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0
b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVG
b3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXpl
LCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50
SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdl
dEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9yZU5leHRBbmREaXNwYXRjaCh2YWx1ZSkKQEAgLTMx
MDQsNyArMzE4MCw4IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3BJ
dGVyYXRvck5leHQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgZW5kCiAKICAgICAj
IFVzZSBtX3ZhbHVlIHNsb3QgYXMgYSB0bXAgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHRv
IGl0IGxhdGVyLgotICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3df
cGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9m
aWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hl
Y2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3Rh
cnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkK
KyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0
b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1
ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZv
clBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUs
IGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJ
bmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0
RG9uZVN0YXJ0OgogICAgIG1hY3JvIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUoZG9uZVZhbHVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgppbmRleCBjYWQyMTVh
ZTM0M2NjODZiM2ExMGE1ZmFmNjYyODQyNGE5YzAyZjI4Li5jNzAxNjY0YWIyYmZmZjIwN2QxMmU1
ZTIyMmY5NjRjZmE5MTJhMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS9jbG9vcC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9j
bG9vcC5yYgpAQCAtNTcyLDYgKzU3MiwxNCBAQCBkZWYgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9p
ZChvcGVyYW5kcykKICAgICAkYXNtLnB1dGMgIiN7b3BlcmFuZHNbMF0uY0xhYmVsfSgje29wZXJh
bmRzWzFdLmNsRHVtcH0sICN7b3BlcmFuZHNbMl0uY2xEdW1wfSk7IgogZW5kCiAKK2RlZiBjbG9v
cEVtaXRDYWxsU2xvd1BhdGg0KG9wZXJhbmRzKQorICAgICRhc20ucHV0YyAieyIKKyAgICAkYXNt
LnB1dGMgIiAgICBjbG9vcFN0YWNrLnNldEN1cnJlbnRTdGFja1BvaW50ZXIoc3AudnAoKSk7Igor
ICAgICRhc20ucHV0YyAiICAgIFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSAje29wZXJhbmRz
WzBdLmNMYWJlbH0oI3tvcGVyYW5kc1sxXS5jbER1bXB9LCAje29wZXJhbmRzWzJdLmNsRHVtcH0s
ICN7b3BlcmFuZHNbM10uY2xEdW1wfSwgI3tvcGVyYW5kc1s0XS5jbER1bXB9KTsiCisgICAgJGFz
bS5wdXRjICIgICAgZGVjb2RlUmVzdWx0KHJlc3VsdCwgdDAsIHQxKTsiCisgICAgJGFzbS5wdXRj
ICJ9IgorZW5kCisKIGNsYXNzIEluc3RydWN0aW9uCiAgICAgZGVmIGxvd2VyQ19MT09QCiAgICAg
ICAgIGNhc2Ugb3Bjb2RlCkBAIC0xMTc1LDYgKzExODMsOSBAQCBkZWYgbG93ZXJDX0xPT1AKICAg
ICAgICAgd2hlbiAiY2xvb3BDYWxsU2xvd1BhdGhWb2lkIgogICAgICAgICAgICAgY2xvb3BFbWl0
Q2FsbFNsb3dQYXRoVm9pZChvcGVyYW5kcykKIAorICAgICAgICB3aGVuICJjbG9vcENhbGxTbG93
UGF0aDQiCisgICAgICAgICAgICBjbG9vcEVtaXRDYWxsU2xvd1BhdGg0KG9wZXJhbmRzKQorCiAg
ICAgICAgICMgRm9yIGRlYnVnZ2luZyBvbmx5LiBUaGlzIGlzIHVzZWQgdG8gaW5zZXJ0IGluc3Ry
dW1lbnRhdGlvbiBpbnRvIHRoZQogICAgICAgICAjIGdlbmVyYXRlZCBMTEludEFzc2VtYmx5Lmgg
ZHVyaW5nIGxsaW50IGRldmVsb3BtZW50IG9ubHkuIERvIG5vdCB1c2UKICAgICAgICAgIyBmb3Ig
cHJvZHVjdGlvbiBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxp
bmVhc20vaW5zdHJ1Y3Rpb25zLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20v
aW5zdHJ1Y3Rpb25zLnJiCmluZGV4IDljYmE1ZDY4ZjNjYWQzMWNmYTJkOTZlYTRjOWJiYThkZmU5
ZGE5YjIuLmMwMGI1MTZiMzNlYzVhZDEyOWQ1NmMzZmZkMjNlOWY1ZWMyMDVmN2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKQEAgLTQ1
OSw2ICs0NTksNyBAQAogICAgICAiY2xvb3BDYWxsTmF0aXZlIiwgICAgICAgICAjIG9wZXJhbmRz
OiBjYWxsZWUKICAgICAgImNsb29wQ2FsbFNsb3dQYXRoIiwgICAgICAgIyBvcGVyYW5kczogY2Fs
bFRhcmdldCwgY3VycmVudEZyYW1lLCBjdXJyZW50UEMKICAgICAgImNsb29wQ2FsbFNsb3dQYXRo
Vm9pZCIsICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgY3VycmVudEZyYW1lLCBjdXJyZW50UEMK
KyAgICAgImNsb29wQ2FsbFNsb3dQYXRoNCIsICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwg
YTAsIGExLCBhMiwgYTMKIAogICAgICAjIEZvciBkZWJ1Z2dpbmcgb25seToKICAgICAgIyBUYWtl
cyBubyBvcGVyYW5kcyBidXQgc2ltcGx5IGVtaXRzIHdoYXRldmVyIGZvbGxvd3MgaW4gLy8gY29t
bWVudHMgYXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGVCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFz
ZS5oCmluZGV4IDk1ODEwNWQzMjY2ZGRmZjg1YmU1ZDc2ZDg3Y2RlNWNiMzMxMzE0YzMuLjQ4ZmQ5
MmY4YjZhOGVkMjk0NGE3MjQ4YjE1N2QyYWY3Mjc3M2M1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaApAQCAtNTcsNiArNTcsNyBAQCBpbmxp
bmUgYm9vbCBpc0NhbGwoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogCiBjbGFzcyBFeGVj
dXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihW
TSopOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IDVhYTU0MmExMmYyNzFkYmRmZjAyMGI5MTBlZGJj
YzlhMTFjODM2NTYuLjJlOWI1MDY2MDVjZmM2ZjFjNWVkZDIyZGFkOTczZTczZWFhOGY2MTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlIDx3
dGYvQm94Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKaW5kZXggZjZhMDViMDY1
ZTMyZDhhZWNkNTY3YmY2YWI3NGFhZTYzODk5Nzc3OC4uZTQ3NzkyYjg3NjRlOTFkNTA2MTBlNGNk
ZGFlMzIzMWMxNDU5ZTIwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2F0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaApAQCAt
MzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KGppdENhZ2VQdHIsIE5vUHRyVGFn
KSBcCiAgICAgdih0YWlsQ2FsbEpTRW50cnlQdHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdih0YWls
Q2FsbEpTRW50cnlTbG93UGF0aFB0clRhZywgTm9QdHJUYWcpIFwKKyAgICB2KHRhaWxDYWxsV2l0
aG91dFVudGFnSlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KGxvb3BPU1JFbnRyeSwg
Tm9QdHJUYWcpIFwKICAgICB2KGVudHJ5T1NSRW50cnksIE5vUHRyVGFnKSBcCiAgICAgdih3YXNt
T1NSRW50cnksIE5vUHRyVGFnKSBcCkBAIC00NiwyMCArNDcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICNkZWZpbmUgSlNDX0pTX0dBVEVfT1BDT0RFUyh2KSBcCiAgICAgdihvcF9jYWxsLCBKU0Vu
dHJ5UHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2
KG9wX2NvbnN0cnVjdCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfaXRlcmF0b3JfbmV4dCwg
SlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfaXRlcmF0b3Jfb3BlbiwgSlNFbnRyeVB0clRhZykg
XAotICAgIHYob3BfY2FsbF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9w
X3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NvbnN0
cnVjdF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NhbGxfdmFyYXJn
c19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF92YXJh
cmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3Bf
Y29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihv
cF9jYWxsX3ZhcmFyZ3MsIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJh
cmdzLCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcp
IFwKKyAgICB2KG9wX3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9j
b25zdHJ1Y3Rfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfaXRlcmF0b3JfbmV4dF9z
bG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50
cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBc
CisgICAgdihvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAg
dihvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdywgSlNFbnRyeVB0clRhZykgXAor
ICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAogICAgIHYo
b3BfY2FsbF9ldmFsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRl
cmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJh
dG9yX29wZW5fc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5Y2Y1ZmVh
MDE5ODQ5ZGI2ZTY2MDkxMGJiOTQ1MWNkMjdjMjVmYmM1Li5lYzQ4MjJmNWE5MDNkNGZiODVjYjQ4
NDFhNGNkNjhmMGMxMGJmYmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBA
IC0xMzgsNiArMTM4LDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVk
ZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTElu
dEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgogI2lu
Y2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5oIgpAQCAtOTEwLDYgKzkxMSw0MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENv
ZAogICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7CiB9CiAKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJTGlua0NhbGwoKQoreworI2lmIEVOQUJM
RShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRy
VGFnPigpOworI2VuZGlmCisgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJU
YWc+KGxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGgoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAg
ICAgICByZXR1cm4gZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gTExJbnQ6OmNhbGxUb1Rocm93KCp0aGlzKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5
UHRyVGFnPigpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IFZNOjpnZXRDVElWaXJ0dWFsQ2FsbChDYWxsTW9kZSBjYWxsTW9kZSkKK3sKKyNpZiBFTkFC
TEUoSklUKQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIHZpcnR1
YWxUaHVua0ZvcigqdGhpcywgY2FsbE1vZGUpOworI2VuZGlmCisgICAgc3dpdGNoIChjYWxsTW9k
ZSkgeworICAgIGNhc2UgQ2FsbE1vZGU6OlJlZ3VsYXI6CisgICAgICAgIHJldHVybiBMTEludDo6
Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1w
b2xpbmUpOworICAgIGNhc2UgQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgIHJldHVybiBMTEludDo6
Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF90YWlsX2NhbGxf
dHJhbXBvbGluZSk7CisgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgorICAgICAgICByZXR1
cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxf
Y29uc3RydWN0X3RyYW1wb2xpbmUpOworICAgIH0KKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsK
K30KKwogVk06OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCmluZGV4IDllZjM4MmM2MGVlODM0ZmNiYjFkOTA4MWM3ODE4ZmQ3ODY3ZmE0
MDguLjNhYmY3MTFhNjU1MmJlNGIzMWFmZTQ3ZTA1OWYzMzFlMDg5OTE5MWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTA2LDYgKzEwNiw4IEBAIGNsYXNzIEJhc2ljQmxvY2tM
b2NhdGlvbjsKIGNsYXNzIEJ1aWx0aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmlu
c2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxsRnJhbWU7CitjbGFzcyBDYWxsTGlua0luZm87CitlbnVt
IGNsYXNzIENhbGxNb2RlOwogc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xh
c3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwpAQCAtOTAyLDYgKzkwNCw5IEBAIGNsYXNz
IFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtl
ZExpc3ROb2RlPFZNPiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihi
b29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOwogCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZp
cnR1YWxDYWxsKENhbGxNb2RlKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgZXhjZXB0aW9uT2Zm
c2V0KCkKICAgICB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGI0M2ZkNzU5ZWIzNzU5MDU0N2EzOGRlOGVjMjIxNmM4MDJiMDJhYjYuLjRj
MzM4NjlkY2VhMzc0MzI2MTExOGI5YWE2NDUwZWIyYTA5MjY1ZmQgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMt
dG8tYmUtYXdhcmUtb2YtcHJveHkuanM6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2Zp
bGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBs
aW5nUHJvZmlsZXIudm0uaXNXYXNtU3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxp
bmctcHJvZmlsZXItd2FzbS5qczoKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1By
b2ZpbGVyLnZtLmlzV2FzbVN1cHBvcnRlZCk6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXBy
b2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanM6CisgICAgICAgIChkb2VzVHJlZUhhdmVTdGFja1Ry
YWNlKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMv
bmFtZVNlY3Rpb24uanM6CisKIDIwMjEtMTEtMTEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBh
cHBsZS5jb20+CiAKICAgICAgICAgSW5saW5lIFJlZ0V4cC50ZXN0IEpJVCBjb2RlIGluIERGRyBh
bmQgRlRMCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVl
ZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1p
bi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMKaW5kZXggNTBjYWVlZDExNDg0Mjlm
ZDFiNWNlMGIwZmVhZTZiZGRkZTY3MTBiOC4uOTRkYWI0NmQyZDcxODRmMzVkNDNlMmRiNGEyZGQ1
NjQxOThiZWZmNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRs
LW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNh
bGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcwpAQCAtMSw0ICsxLDQg
QEAKLS8vQCBydW5EZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIC0tdXNlQ29uY3VycmVu
dEpJVD1mYWxzZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJ
VFNvb249MTAiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9s
ZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRo
cmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZU
TE9wdGltaXplU29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10
cnVlIikKKy8vQCBydW5EZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIiwgIi0tdXNlQ29u
Y3VycmVudEpJVD1mYWxzZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9s
ZEZvckpJVFNvb249MTAiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIs
ICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9s
ZEZvckZUTE9wdGltaXplU29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZU
TEpJVD10cnVlIikKIAogZnVuY3Rpb24gbWFpbigpIHsKICAgICBsZXQgdjE2MjsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpz
IGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMK
aW5kZXggNjg5YTAwNWFiNTU1YTFmYzYwMWE1NGU0ZWJmOTRlOTlhNjY4Zjc3ZS4uNWMyMjBmZDc2
Y2RjNWM0MGU1OWNjNjZlNTczNDJjNzJkOGM3ZjNhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJl
c3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy9z
dHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKQEAgLTY5LDUgKzY5
LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBp
bnN0YW5jZS5leHBvcnRzLl9wYXJyb3QoMSk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRy
eSwgWyJfc2lsbHkiLCAiKHVua25vd24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8
Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8
Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XSIsICJ3YXNtLXN0dWIiLCAiMjQiLCAid2FzbUVudHJ5
Il0pOworICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAiPD8+
Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+
Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwgIih1
bmtub3duKSIsICJ3YXNtRW50cnkiXSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9z
YW1wbGluZy1wcm9maWxlci13YXNtLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmls
ZXItd2FzbS5qcwppbmRleCBjZDIxZjI4OGMxNDhhNGI3NDA1YmY4NjhkZWY5YjU0NTczNDA1MDQ1
Li4wNmRmMDEyNDk1OTY5ZTI4NDIxODc3ODY5MDEzNWJmMDkwMTBlYzZkIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMKQEAgLTgsNSArOCw1IEBACiAgICAgdmFyIHdh
c21FbnRyeSA9IGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5s
b29wKDEwMDAwMDAwKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNt
LWZ1bmN0aW9uWzBdIiwgIndhc20tc3R1YiIsICIwIiwgIndhc21FbnRyeSJdKTsKKyAgICBydW5U
ZXN0KHdhc21FbnRyeSwgWyI8Pz4ud2FzbS1mdW5jdGlvblswXSIsICIodW5rbm93bikiLCAid2Fz
bUVudHJ5Il0pOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmls
ZXIvc2FtcGxpbmdQcm9maWxlci5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
L3NhbXBsaW5nUHJvZmlsZXIuanMKaW5kZXggOTY0MmRkYzdjMWU2ZjA2ZTNiMTMyNzljMGU0YTAy
NWI1NGRjYWJmMS4uMWI5MmU5NDg1NGFmNjNmNjdkMDhmNTQ4ODdjNTIxNzkxNGVlMmJmNSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxl
ci5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2Zp
bGVyLmpzCkBAIC03MCwxMSArNzAsMTMgQEAgZnVuY3Rpb24gY2hlY2sobm9kZSkgewogICAgIAog
ICAgIGxldCBub2RlID0gdHJlZTsKICAgICBmb3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5ndGg7
IGktLTsgKSB7CisgICAgICAgIGxldCBwcmV2ID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUu
Y2hpbGRyZW5bc3RhY2tUcmFjZVtpXV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAg
ICAgaWYgKFZFUkJPU0UpIHsKICAgICAgICAgICAgICAgICBwcmludCgiZmFpbGluZyBvbiAiICsg
aSArICIgOiAiICsgc3RhY2tUcmFjZVtpXSk7CiAgICAgICAgICAgICAgICAgcHJpbnQoSlNPTi5z
dHJpbmdpZnkodHJlZSkpOworICAgICAgICAgICAgICAgIHByaW50KE9iamVjdC5rZXlzKHByZXYu
Y2hpbGRyZW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQpAQCAtMTA4LDcgKzExMCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3RhY2tU
cmFjZU9yU3RyaW5nKSB7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3Rh
cnRUaW1lIDwgdGltZVRvRmFpbCk7CiAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkocm9vdCwgdW5k
ZWZpbmVkLCAyKSk7Ci0gICAgZG9lc1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNl
LCB0cnVlLCB0cnVlKTsKKyAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJh
Y2VPclN0cmluZywgdHJ1ZSwgdHJ1ZSk7CiAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhY2sg
dHJhY2UiKTsKIH0KIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25h
bWVTZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpz
CmluZGV4IDY4MDVlNjg5ZjVjODc5ZTJjYTUwOWM4OGQzZTdiMzc2ZGUwOWZhYWEuLjMzYzg2YmYx
Y2RlOWE4ZGFiMTE4ZTBlNGNiMGJhY2Q1OWI3NDkxZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2Fz
bS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvbmFtZVNlY3Rpb24uanMKQEAgLTY5LDQgKzY5LDQgQEAKIGFzc2VydC5lcShzdGFj
a3RyYWNlWzNdLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXUBbd2FzbSBjb2RlXSIpOwogYXNz
ZXJ0LmVxKHN0YWNrdHJhY2VbNF0sICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV1AW3dhc20gY29k
ZV0iKTsKIGFzc2VydC5lcShzdGFja3RyYWNlWzVdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJv
dF1AW3dhc20gY29kZV0iKTsKLWFzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3
YXNtIGNvZGVdIik7IC8vIHdhc20gZW50cnkKK2Fzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2Fz
bS1zdHViQFtuYXRpdmUgY29kZV0iKTsgLy8gd2FzbSBlbnRyeQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444036</attachid>
            <date>2021-11-11 19:20:25 -0800</date>
            <delta_ts>2021-11-12 13:06:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211111192024.patch</filename>
            <type>text/plain</type>
            <size>409161</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDVkZDgyYWRiMWUzNWI4NmIyZTdmMzk1ZTI4ZTMzNmE5YTk0MWE5Li5jZjBmZjU2NTgwNmNmMDYw
M2ZhMjU3MzJmYTcyYmExMjQwZTk0MTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzcgQEAKKzIwMjEtMTEtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludGVncmF0
ZXMgbm9ybWFsIENhbGxMaW5rSW5mbyBpbnRvIExMSW50IGFuZCByZW1vdmUgYWRob2MgTExJbnRD
YWxsTGlua0luZm8uCisgICAgICAgIFNvIHRoYXQgd2UgY2FuIHNpbXBsaWZ5IG91ciBJQyBzb2Z0
d2FyZSBzdGFjaywgYW5kIHVuaWZ5aW5nIGNhbGwgSUMgbWVjaGFuaXNtIGludG8gb25lIENhbGxM
aW5rSW5mby4KKworICAgICAgICAxLiBMTEludCBjYW4gZnVsbHkgdXNlIG91ciBwb2x5bW9ycGhp
YyBjYWxsIElDLCBhbmQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gcmVzZXQgY2FsbCBJQyB3aGVuCisg
ICAgICAgICAgIHRpZXJpbmcgdXAgZnJvbSBMTEludCB0byBCYXNlbGluZSBKSVQgc2luY2UgYm90
aCBub3cgdXNlcyB0aGUgc2FtZSBDYWxsTGlua0luZm8gZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAg
ICAgIERGRyBhbmQgRlRMIGNhbiBhbHNvIHJldHJpZXZlIGNhbGwgaW5mb3JtYXRpb24gZnJvbSB0
aGlzIENhbGxMaW5rSW5mby4KKyAgICAgICAgMi4gTExJbnQgdmFyYXJncyBjYWxscyBnZXQgdGhl
IHNhbWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIEJhc2VsaW5lLiBQcmV2aW91c2x5IGl0IGRv
ZXMgbm90IGhhdmUKKyAgICAgICAgICAgY2FsbCBJQy4KKyAgICAgICAgMy4gV2hlbiBKSVQgaXMg
ZGlzYWJsZWQsIHdlIGRpc2FibGUgcG9seW1vcnBoaWMgY2FsbCBJQyBzaW5jZSBpdCByZXF1aXJl
cyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSBv
bmx5IHVzZSBtb25vbW9ycGhpYyBvbmUsIHdoaWNoIGlzIHRoZSBzYW1lIHRvIHRoZSBvbGQgTExJ
bnRDYWxsTGlua0luZm8uCisgICAgICAgIDQuIENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uIGlz
IHNldCB1cCBvbmx5IGFmdGVyIEJhc2VsaW5lIEpJVC4gV2UgYWRqdXN0IGNhbGwgSUMgY29kZSBz
byB0aGF0CisgICAgICAgICAgIHdlIG5vIGxvbmdlciByZWx5IG9uIGRvbmVMb2NhdGlvbiB3aGVu
IHVzaW5nIERhdGFJQy4gVGhpcyBhbGxvd3MgdXMgdG8gc21vb3RobHkgdGllcmluZyB1cAorICAg
ICAgICAgICBmcm9tIExMSW50IHRvIEJhc2VsaW5lIEpJVCB3aGlsZSB1c2luZyB0aGUgc2FtZSBD
YWxsTGlua0luZm8uCisgICAgICAgICAgIFdlIHNldCB1cCBkb25lTG9jYXRpb24gaW4gQmFzZWxp
bmUgSklUIGp1c3QgYmVjYXVzZSBERkcgT1NSIGV4aXQgcmVxdWlyZXMgd2hlbiBleGl0aW5nIHRv
CisgICAgICAgICAgIEJhc2VsaW5lIEpJVCBjb2RlLgorICAgICAgICA1LiBXZSByZW1vdmUgQ2Fs
bExpbmtJbmZvIGZyb20gSklUIGNvbnN0YW50IHBvb2wsIGFuZCB3ZSBzdG9yZSBDYWxsTGlua0lu
Zm8gaW4gbWV0YWRhdGEgc28gdGhhdAorICAgICAgICAgICBMTEludCBhbmQgQmFzZWxpbmUgSklU
IHF1aWNrbHkgYWNjZXNzIHRvIHRoYXQgYW5kIGtlZXBpbmcgdW5saW5rZWQgQmFzZWxpbmUgSklU
IHdvcmtpbmcuCisgICAgICAgIDYuIFdlIGltcGxlbWVudCBMTEludCB2ZXJzaW9uIG9mIGNhbGwg
SUMgdGh1bmtzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiBKSVQgaXMgZGlzYWJs
ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlu
a0J1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OnNob3VsZER1bXBEaXNhc3NlbWJseUZvcik6IERl
bGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1l
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6
Y2FsbExpbmtJbmZvRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNsZWFyU3R1Yik6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp2aXNpdFdl
YWspOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjppbml0aWFsaXplRGF0YUlDKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
cmV2ZXJ0Q2FsbFRvU3R1Yik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aXNMaW5rZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnN0dWIgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpmb3JFYWNoRGVwZW5kZW50Q2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0U2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyU2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpnZXRJQ1N0YXR1c01hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2Fs
bExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlu
a0luY29taW5nQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdD
YWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dXBkYXRlQWxsQXJyYXlQcm9maWxlUHJlZGljdGlvbnMpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8pOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6IFJlbW92ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvZGUvUmVwYXRjaC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwLgor
ICAgICAgICAoSlNDOjpsaW5rU2xvd1BhdGhUbyk6CisgICAgICAgIChKU0M6OmxpbmtTbG93Rm9y
KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlPd25lcik6CisgICAgICAgIChKU0M6OmxpbmtN
b25vbW9ycGhpY0NhbGwpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpT
Qzo6dW5saW5rQ2FsbCk6CisgICAgICAgIChKU0M6OmpzVG9XYXNtSUNDb2RlUHRyKToKKyAgICAg
ICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWND
YWxsKToKKyAgICAgICAgKiBieXRlY29kZS9SZXBhdGNoLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaC4KKyAgICAgICAgKiBieXRlY29kZS9SZXBhdGNo
SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENhbGwpOgorICAgICAg
ICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbEZvcldpdGhGdW5jdGlvbik6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNh
bGxlclJldHVyblBDKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJp
Y3RFcSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklU
Q29kZS5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpjcmVhdGVGb3JCYXNlbGluZU9yTExJbnRUYWls
Q2FsbCk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICog
aml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6YWRkVW5saW5rZWRDYWxsTGlua0luZm8p
OgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAg
ICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6dmlydHVhbEZvcldpdGhGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zv
cik6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbCk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGxsaW50L0xMSW50
RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBs
bGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF9saW5r
X2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfdmlydHVhbF9jYWxsKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNl
dFVwQ2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojp2YXJhcmdzU2V0dXApOgorICAgICAgICAo
SlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6
Y29tbW9uQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOiBEZWxl
dGVkLgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQv
TExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlSlNHYXRlVGh1bmsp
OgorICAgICAgICAoSlNDOjpMTEludDo6Y3JlYXRlVGFpbENhbGxHYXRlKToKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OnJldHVybkxvY2F0aW9uVGh1bmspOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1
bmtzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wUmVn
aXN0ZXI6Om9wZXJhdG9yIENhbGxMaW5rSW5mbyopOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbToKKyAgICAgICAgKiBvZmZsaW5lYXNtL2Nsb29wLnJiOgorICAgICAgICAqIG9mZmxp
bmVhc20vaW5zdHJ1Y3Rpb25zLnJiOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZUJhc2Uu
aDoKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvR2F0ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpW
TTo6Z2V0Q1RJTGlua0NhbGwpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSVZpcnR1YWxDYWxs
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMjEtMTEtMTEgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBWTTo6d3JpdGVCYXJyaWVyKCkgYW5kIFZN
OjptdXRhdG9yRmVuY2UoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAx
MmM0YTVjODI3N2NhNzcwMWQ4NDllZmY2NDY3YmQ4ODc5NTkwMDA4Li5jYzQxZmMwM2QwYTA4NmNj
NzdjZTRlN2QwMDJkZTE3Yzg2NDMyMDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC02NTksNyArNjU5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2Zp
bGUuaAogICAgIGJ5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCiAgICAgYnl0ZWNvZGUv
SnVtcFRhYmxlLmgKLSAgICBieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCiAgICAgYnl0ZWNv
ZGUvTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKICAgICBi
eXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvTGlua1RpbWVD
b25zdGFudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg5YzljMTc0YmIyMjNi
MzZjMzk2YmFmYzQ2ZmUxMTY2YTY4MjBmNDMuLjMxNWI0ZjBmOTZlNDE3MzdmMzdiMDExOWY3MGM2
YjY5OTcxNDg4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDcsNyArMTQ3
LDYgQEAKIAkJMEYwQ0FFRkMxRUM0REE2QjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclByaXZh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENB
RUZBMUVDNERBNjIwMDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQcml2YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0FFRkYxRUM0REE4
ODAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEyIC8qIEhl
YXBGaW5hbGl6ZXJDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRl
eE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjBGQzQ1QTE0QkQxNUY1
MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENh
bGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMTBGMUEzMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJDdXN0b20uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTBGMUEyMUM0MjBCRjAwMDFD
MDdEMiAvKiBBaXJDdXN0b20uaCAqLzsgfTsKIAkJMEYxMkRFMTAxOTc5RDVGRDAwMDZGRjRFIC8q
IEV4Y2VwdGlvbkZ1enouaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMzZENEQxNzRB
RDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE4Niw3ICsx
ODUsNiBAQAogCQkwRjI0RTU0NDE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1M0YxN0VBOUY1OTAw
QUJCMjE3IC8qIEdQUkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDYx
N0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU0RjE3RUUyNzQ5MDBBQkIyMTcgLyog
VGVtcFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjI0RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJlZ2lzdGVyU2V0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyNEU1NTEx
N0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmgg
Ki87IH07CiAJCTBGMjRFNTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU1NjE3
RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyog
SW5saW5lQ2FsbEZyYW1lU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5
QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKQEAgLTE4OTIsNiArMTg5MCw3IEBA
CiAJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTMzRjUwODYxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3Iu
bHV0LmggKi87IH07CiAJCUUzNDAwRUMxMjJBMUNDN0IwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1
dGFibGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzQwMEVDMDIyQTFDQzc4MDA5REVENTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5l
cy5oICovOyB9OwogCQlFMzQ5QTc4MTI0OTFGMTYxMDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBv
b2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNDlB
NzgwMjQ5MUYxNUEwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzNEQxQUU1MjczREM5MUYwMDA1
QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJbmxpbmVz
LmggKi87IH07CiAJCUUzNEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQYXJzZUhhc2guaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEU2NTczMjA2NjhF
OEQwMEZCODFBQyAvKiBQYXJzZUhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMzRFREJGNzFEQjVGRkM5MDBEQzg3QTUgLyogRnJhbWVUcmFj
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRF
REJGNjFEQjVGRkMxMDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM0RjkzMEUyMzIyRDg4MjAwMkI4REI0
IC8qIEpTR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzRGOTMwQzIzMjJEODgxMDAyQjhEQjQgLyogSlNHZW5lcmF0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTkwNiw2ICsxOTA1
LDcgQEAKIAkJRTM1QTBCOUQyMjBBRDg3QTAwQUM0NDc0IC8qIEV4ZWN1dGFibGVCYXNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1QTBC
OUMyMjBBRDg3QTAwQUM0NDc0IC8qIEV4ZWN1dGFibGVCYXNlSW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNUNBMTU0MURCQzNBNUMw
MEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUyMURCQzNBNTYwMEY4MzUxNiAvKiBET01KSVRIZWFw
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFMzVDQTE1NjFEQkMzQTVGMDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVDQTE1MDFEQkMzQTU2
MDBGODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM1RTM2M0UyNzNEQzhDNjAwREIyNENDIC8qIFJl
cGF0Y2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
NUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmggKi87IH07CiAJCUUzNUU4OUZEMjVD
NTBGODcwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFODlGQjI1QzUwRjg2MDA3MUVFMUUgLyogQmlnSW50
NjRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzNUU4OUZFMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTg5RkMyNUM1MEY4NzAw
NzFFRTFFIC8qIEJpZ1VpbnQ2NEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM2MzdFRTkyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1l
Q29uc3RhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzNjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzOTEsNyArMjM5MSw2
IEBACiAJCTBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZpbmFsaXplckNhbGxiYWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFD
MCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyog
TExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJ
bnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMEYxQTIx
QzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJDdXN0b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlv
bkZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9u
RnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBFMTk3OUQ1RkQw
MDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2VwdGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NTQs
OCArMjQ1Myw2IEBACiAJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25z
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE9wZXJhdGlvbnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
SVRPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ4MTdF
RTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGVtcFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTUzMTdGMEI3
MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lQ2FsbEZyYW1lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFt
ZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMDcsNiArNTIwNCw3IEBACiAJ
CUUzNDAwRUMwMjJBMUNDNzgwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTM0OUE3N0YyNDkxRjE1OTAwMUJBMzM2IC8qIERGR0NvZGVPcmln
aW5Qb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvZGVPcmlnaW5Qb29sLmNwcDsgcGF0
aCA9IGRmZy9ERkdDb2RlT3JpZ2luUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNDlBNzgwMjQ5MUYxNUEwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdDb2RlT3JpZ2luUG9vbC5oOyBwYXRoID0gZGZnL0RGR0NvZGVPcmlnaW5Q
b29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNEQxQUU0MjczREM5MUYwMDA1
QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZXBhdGNoSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRFNjU3
MzIwNjY4RThEMDBGQjgxQUMgLyogUGFyc2VIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhcnNlSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRF
NjU3NDIwNjY4RThFMDBGQjgxQUMgLyogUGFyc2VIYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlSGFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzNEVEQkY2MURCNUZGQzEwMERDODdBNSAvKiBGcmFtZVRyYWNlcnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVUcmFjZXJzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01MjI5LDYgKzUyMjcsOCBAQAogCQlFMzVDQTE1MDFEQkMzQTU2MDBG
ODM1MTYgLyogRE9NSklUQWJzdHJhY3RIZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERPTUpJVEFic3RyYWN0SGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzVDQTE1MTFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUpJVEhlYXBSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUNBMTUyMURCQzNBNTYwMEY4MzUxNiAvKiBET01K
SVRIZWFwUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSklUSGVh
cFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzNUUzNjNDMjczREM4QzYw
MERCMjRDQyAvKiBSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
cGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1RTM2M0QyNzNEQzhDNjAw
REIyNENDIC8qIFJlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUU4OUZCMjVD
NTBGODYwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJpZ0ludDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM1RTg5RkMyNUM1MEY4NzAwNzFFRTFFIC8qIEJpZ1VpbnQ2NEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpZ1VpbnQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUzNjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtUaW1lQ29uc3RhbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0NTgsOCArNjQ1OCw2IEBACiAJCQkJNjIz
QTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8sCiAJCQkJMEZDMzE0MTQx
ODE0NkQ3MDAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmNwcCAqLywKIAkJCQkwRkMzMTQxMDE4MTQ1
NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCAqLywKLQkJCQkwRjI0RTU0OTE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5jcHAgKi8sCi0JCQkJMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8q
IFJlcGF0Y2guaCAqLywKIAkJCQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcgLyog
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZFRTk4NDIxQTg5MjI3NTAwNzU0
RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywKQEAgLTg4MTUsNyArODgxMyw2IEBACiAJ
CQkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgg
Ki8sCiAJCQkJRTM2MzdFRTgyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuY3Bw
ICovLAogCQkJCUUzNjM3RUU3MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50Lmgg
Ki8sCi0JCQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki8sCiAJCQkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8sCiAJCQkJNTNGQTJBRTAxQ0YzN0YzRjAw
MjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5o
ICovLAogCQkJCTE0Rjc5RjZFMjE2RUFENTAwMDA0NkQzOSAvKiBNZXRhZGF0YVRhYmxlLmNwcCAq
LywKQEAgLTg4NjIsNiArODg1OSw5IEBACiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8q
IFJlY29yZGVkU3RhdHVzZXMuaCAqLywKIAkJCQkwRkY2MEFCRjE2NzQwRjgxMDAwMjk3NzkgLyog
UmVkdWNlV2hpdGVzcGFjZS5jcHAgKi8sCiAJCQkJMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8q
IFJlZHVjZVdoaXRlc3BhY2UuaCAqLywKKwkJCQlFMzVFMzYzRDI3M0RDOEM2MDBEQjI0Q0MgLyog
UmVwYXRjaC5jcHAgKi8sCisJCQkJRTM1RTM2M0MyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2gu
aCAqLywKKwkJCQlFMzREMUFFNDI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCAq
LywKIAkJCQk4NjVEQTBDOTI1Qjg5NjJBMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
LmNwcCAqLywKIAkJCQk4NjVEQTBDNzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5k
U3RhdHVzLmggKi8sCiAJCQkJODY1REEwQzYyNUI4OTU5RTAwODc1NzcyIC8qIFNldFByaXZhdGVC
cmFuZFZhcmlhbnQuY3BwICovLApAQCAtOTc0Nyw2ICs5NzQ3LDcgQEAKIAkJCQlGRUEwODYyMTE4
MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJENERERTE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZFOUZBN0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZlckdDSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyREYxN0NEODc3QzAwOENDOTNDIC8qIERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUyNDYzOTAw
MDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0NjM4
NzUxRTcwRERFQzAwRjEyQUMxIC8qIERlZmVycmVkV29ya1RpbWVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwMzIzLDggKzEwMzI0LDYgQEAKIAkJCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQgLyog
SlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJK
SVQuaCBpbiBIZWFkZXJzICovLAotCQkJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJy
SklUUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBG
QTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUREN0Y1MjNDMUJC
QjUwMDkwNUYxMyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVCNzBD
RkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMTA1MjYsNyArMTA1MjUsNiBAQAogCQkJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBM
aW5rVGltZUNvbnN0YW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2
MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBERTlBMDkxQkU3
RDY5RTAwNUQ4OUQ5IC8qIExMSW50QXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMEZD
NDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMDcyNiw3ICsxMDcyNCw4IEBACiAJCQkJQTVCQTE1RTgxODIzNDBC
MzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1
RUExODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTkyRjU2QjcxRTRFODRCMjAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvclhQ
Q0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIx
NyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzVFMzYzRTI3M0RDOEM2MDBEQjI0
Q0MgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM0RDFBRTUyNzNEQzkxRjAwMDVC
QjkxIC8qIFJlcGF0Y2hJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTlGM0ZCOTI2MTND
Nzg5MDA2OUU4OUYgLyogUmVzb3VyY2VFeGhhdXN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkUzQjY0MkYyNUQ2RkI0RDAwMUFEREI0IC8qIFJvb3RNYXJrUmVhc29uLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwNzg0LDcgKzEwNzgzLDYgQEAKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0
NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5
NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBI
ZWFkZXJzICovLAotCQkJCUZFOUZBN0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZlckdDSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhF
NDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMTA1Miw2ICsxMTA1MCw4IEBACiAJCQkJRTMyODJCQkIxRkU5MzBBRjAwRURB
RjcxIC8qIFlhcnJFcnJvckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzRkY5QkM3MjIzNDc0
OTEwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJE
QkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2
NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKKwkJCQk2
NTNCQzQzRjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTNGMEZDOTUyNkExMUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0NvbnRleHRI
b2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZ
YXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0Ig
LyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDc5M2Y0NmY3YmM1OGU1MDhjZGE2Y2I5MDE1YWEwOTJlOGM5ODYwZDkuLmI2OTU1NTdh
ZmU2MGYxNDc1MTAwOWIxYjUwNWY1NTEzMzQwNWI5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKQEAgLTI3Myw2ICsyNzMsNyBAQCBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKIGJ5dGVj
b2RlL1B1dEJ5VmFyaWFudC5jcHAKIGJ5dGVjb2RlL1JlY29yZGVkU3RhdHVzZXMuY3BwCiBieXRl
Y29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcAorYnl0ZWNvZGUvUmVwYXRjaC5jcHAKIGJ5dGVjb2Rl
L1NldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAKIGJ5dGVjb2RlL1NldFByaXZhdGVCcmFuZFZhcmlh
bnQuY3BwCiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTY3Niw3ICs2NzcsNiBAQCBq
aXQvUmVnLmNwcAogaml0L1JlZ2lzdGVyQXRPZmZzZXQuY3BwCiBqaXQvUmVnaXN0ZXJBdE9mZnNl
dExpc3QuY3BwCiBqaXQvUmVnaXN0ZXJTZXQuY3BwCi1qaXQvUmVwYXRjaC5jcHAKIGppdC9TY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCiBqaXQvU2V0dXBWYXJhcmdzRnJhbWUuY3BwCiBqaXQv
U2xvd1BhdGhDYWxsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Db2RlTG9jYXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29k
ZUxvY2F0aW9uLmgKaW5kZXggYTZjYTVjODFjNTEwOTVmODE5OGQ5YjgyZGIxNGE1ODFhMjVjZTYw
OS4uMDc1MDRiYTA0ZTU5YjZkMWRjYTIzNTg4YmVmYjU0ZGYxOTE4NWEyYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCkBAIC0yNyw4ICsyNyw2
IEBACiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKIAotI2lmIEVOQUJMRShB
U1NFTUJMRVIpCi0KIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIGNsYXNzIE5lYXJDYWxsTW9kZSA6
IHVpbnQ4X3QgeyBSZWd1bGFyLCBUYWlsIH07CkBAIC0yNjksNSArMjY3LDMgQEAgaW5saW5lIENv
ZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZDxyZXN1bHRUYWc+IENvZGVMb2NhdGlvbkNvbW1vbjx0
YWc+Ojpjb252ZXJ0aWIKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAKaW5kZXggMDYyNDBlODc0MzYzODczYjlkZjJjYzlmMzdmMzgyOTE4ZmU3ZTI5ZS4u
ZmY5MzA1ODlkYjI3MTE4MGQwOTllMjM1NmM5OTdkYzU5YjM1NmU3NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1
ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAKICNpZiBP
UyhMSU5VWCkKICNpbmNsdWRlICJQZXJmTG9nLmgiCkBAIC00MywyOSArNDIsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIHNpemVfdCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZFNp
emVzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmlsZXNdOwogc2l6ZV90IExpbmtCdWZmZXI6OnNf
cHJvZmlsZUN1bW11bGF0aXZlTGlua2VkQ291bnRzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmls
ZXNdOwogCi1ib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aykKLXsKLSAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2Rl
QmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKTsK
LX0KLQotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6Q29tcGlsYXRpb25Nb2Rl
IG1vZGUpCi17Ci0gICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgV2FzbTo6
Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlOgotICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEJC
UURpc2Fzc2VtYmx5KCk7Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGU6
Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZToKLSAg
ICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBPTUdEaXNhc3NlbWJseSgpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIExpbmtCdWZm
ZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0
aG91dERpc2Fzc2VtYmx5SW1wbCgpCiB7CiAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCA1YTNmMDBm
MDVjNjg1ODI5NTc3MjY2N2ZjMjIzNTY3ZjY4ZTkyYjg3Li4yODVkZjBkMWExODA5ZGIyMGI0Nzk0
Y2QzMTIwNTllZmM2ZWUwMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaApAQCAtNDMsMTIgKzQzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5h
bWVzcGFjZSBXYXNtIHsKLWVudW0gY2xhc3MgQ29tcGlsYXRpb25Nb2RlIDogdWludDhfdDsKLX0K
LQotY2xhc3MgQ29kZUJsb2NrOwotCiAvLyBMaW5rQnVmZmVyOgogLy8KIC8vIFRoaXMgY2xhc3Mg
YXNzaXN0cyBpbiBsaW5raW5nIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBtYWNybyBhc3NlbWJsZXIs
IG9uY2UgY29kZSBnZW5lcmF0aW9uCkBAIC00NDYsOCArNDQwLDYgQEAgY2xhc3MgTGlua0J1ZmZl
ciB7CiAgICAgICAgIDogKGxpbmtCdWZmZXJSZWZlcmVuY2UpLmZpbmFsaXplQ29kZVdpdGhvdXRE
aXNhc3NlbWJseTxyZXN1bHRQdHJUYWc+KCkpCiAjZW5kaWYKIAotYm9vbCBzaG91bGREdW1wRGlz
YXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7Ci0KICNkZWZpbmUgRklOQUxJWkVfQ09ERV9GT1IoY29k
ZUJsb2NrLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIC4uLikgIFwKICAgICBG
SU5BTElaRV9DT0RFX0lGKChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY29kZUJsb2NrKSB8fCBP
cHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkpLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQ
dHJUYWcsIF9fVkFfQVJHU19fKQogCkBAIC00NzYsOCArNDY4LDYgQEAgYm9vbCBzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7CiAjZGVmaW5lIEZJTkFMSVpFX1JFR0VYUF9DT0RF
KGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JI
ZWFkaW5nKSAgXAogICAgIEZJTkFMSVpFX0NPREVfSUYoSlNDOjpPcHRpb25zOjphc3luY0Rpc2Fz
c2VtYmx5KCkgfHwgSlNDOjpPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpk
dW1wUmVnRXhwRGlzYXNzZW1ibHkoKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFn
LCBkYXRhTG9nRkFyZ3VtZW50c0ZvckhlYWRpbmcpCiAKLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9kZSk7Ci0KICNkZWZpbmUgRklOQUxJWkVfV0FTTV9D
T0RFKGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgLi4uKSAgXAogICAgIEZJTkFM
SVpFX0NPREVfSUYoKEpTQzo6T3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgp
KSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuY3BwCmluZGV4IDVkNTY3NDFlZmU2NjQyNmVmY2EyMDUyYWMyNTA5ODMyMjAyMzc3
ZDAuLjcwZGIwZDAzOWVhN2VkNjExYzhhNmU1ZDgwODkxM2YwYWQ1YmQ1NTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5jcHAKQEAgLTI2LDggKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
SlNDUHRyVGFnLmgiCisjaW5jbHVkZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYzLDUgKzY2
LDI4IEBAIENTdHJpbmcgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmQmFzZTo6ZGlzYXNzZW1ibHkoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5CiAgICAgcmV0dXJuIG91dC50b0NTdHJpbmco
KTsKIH0KIAorYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCit7CisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7
Cit9CisKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9k
ZSBtb2RlKQoreworICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFdhc206
OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKKyAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBC
QlFEaXNhc3NlbWJseSgpOworICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2Rl
OgorICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU6Cisg
ICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHkoKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggOTI1NTkxOGIxYmExNzVhMWY0OWRjMzAy
NWVjNmZjYTg4OTM5ZDM2NC4uMWVhMzI0NTQxNWFiMDhhNDVjN2QzZTU5NTk2MGM0NDViMTlmZjc1
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oCkBAIC01NCw2ICs1NCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorbmFtZXNwYWNlIFdhc20geworZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgOiB1aW50OF90
OworfSAvLyBuYW1lc3BhY2UgV2FzbQorCitjbGFzcyBDb2RlQmxvY2s7CiB0ZW1wbGF0ZTxQdHJU
YWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIAogZW51bSBPcGNvZGVJRCA6IHVuc2ln
bmVkOwpAQCAtMzc3LDcgKzM4MiwxMCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgOiBw
cml2YXRlIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2UgewogCiAgICAgdm9pZCBkdW1wV2l0aE5h
bWUoY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRhYmxlQWRk
cmVzcygpLCBkYXRhTG9jYXRpb24oKSwgbmFtZSwgb3V0KTsKKyAgICAgICAgaWYgKG1fdmFsdWUp
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShu
dWxscHRyLCBudWxscHRyLCBuYW1lLCBvdXQpOwogICAgIH0KIAogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdCB7IGR1bXBXaXRoTmFtZSgiQ29kZVB0ciIsIG91dCk7IH0KQEAg
LTUzNyw2ICs1NDUsOSBAQCBpbmxpbmUgRnVuY3Rpb25QdHI8dGFnPjo6RnVuY3Rpb25QdHIoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gcHRyKQogewogfQogCitib29sIHNob3VsZER1bXBEaXNh
c3NlbWJseUZvcihDb2RlQmxvY2sqKTsKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdh
c206OkNvbXBpbGF0aW9uTW9kZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2Ug
V1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
CmluZGV4IGJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3OTM2ZmQyMjU4YTIuLjAxMzg2MGI2
NmMyYjE5YThjYmI1OTUzYTVkMGU0NGRkMjc3ZmJkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMjYsNiArMjYsNyBAQAogCiAgICAg
OkJhc2ljQmxvY2tMb2NhdGlvbiwKICAgICA6Qm91bmRMYWJlbCwKKyAgICA6Q2FsbExpbmtJbmZv
LAogICAgIDpEZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0
aEV4dGVuc2lvbiwKQEAgLTQ0LDcgKzQ1LDYgQEAKICAgICA6SlNTY29wZSwKICAgICA6SlNUeXBl
LAogICAgIDpKU1ZhbHVlLAotICAgIDpMTEludENhbGxMaW5rSW5mbywKICAgICA6UmVzdWx0VHlw
ZSwKICAgICA6T3BlcmFuZFR5cGVzLAogICAgIDpQcml2YXRlRmllbGRQdXRLaW5kLApAQCAtODQw
LDcgKzg0MCw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAg
Y2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQ
cm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NTIs
NyArODUzLDggQEAKICAgICAgICAgYXJndjogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0
YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBj
YWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVBy
b2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg2NSw3
ICs4NjcsOCBAQAogICAgICAgICBlY21hTW9kZTogRUNNQU1vZGUsCiAgICAgfSwKICAgICBtZXRh
ZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAg
ICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJh
eVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg3
OSw2ICs4ODIsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CiAgICAgfSwKQEAgLTkwMCw2ICs5MDQsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0lu
Zm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTkyMSw2ICs5MjYsNyBAQAogICAgICAgICBmaXJz
dFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJ
bmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAog
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQpAQCAtOTMzLDcgKzkzOSw4IEBA
CiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZv
OiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC05NDcsNiArOTU0LDcgQEAK
ICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAg
ICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC0x
MjQ5LDcgKzEyNTcsOCBAQAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGl0ZXJhdGlvbk1ldGFk
YXRhOiBJdGVyYXRpb25Nb2RlTWV0YWRhdGEsCiAgICAgICAgIGl0ZXJhYmxlUHJvZmlsZTogVmFs
dWVQcm9maWxlLAotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAg
ICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIGl0ZXJhdG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAg
ICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIG5leHRQcm9m
aWxlOiBWYWx1ZVByb2ZpbGUsCkBAIC0xMjcyLDcgKzEyODEsOCBAQAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIGl0ZXJhdGlvbk1ldGFkYXRhOiBJdGVyYXRpb25Nb2RlTWV0YWRhdGEsCiAgICAg
ICAgIGl0ZXJhYmxlUHJvZmlsZTogQXJyYXlQcm9maWxlLAotICAgICAgICBjYWxsTGlua0luZm86
IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywK
KyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIG5leHRSZXN1bHRQ
cm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgICAgIGRvbmVNb2RlTWV0YWRhdGE6IEdldEJ5SWRN
b2RlTWV0YWRhdGEsCiAgICAgICAgIGRvbmVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCkBAIC0xMzkz
LDYgKzE0MDMsOSBAQAogb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180NAogb3Ag
OmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180NQogb3AgOmxsaW50X2Nsb29wX2RpZF9y
ZXR1cm5fZnJvbV9qc180Ngorb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180Nwor
b3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180OAorb3AgOmxsaW50X2Nsb29wX2Rp
ZF9yZXR1cm5fZnJvbV9qc180OQogCiBlbmRfc2VjdGlvbiA6Q0xvb3BIZWxwZXJzCiAKQEAgLTE0
MTUsNiArMTQyOCwxMCBAQAogb3AgOmxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQog
b3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZQogb3AgOmxsaW50X2lu
dGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6bGxpbnRfbGlua19jYWxs
X3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZQorb3AgOmxsaW50
X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX3RhaWxfY2Fs
bF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90
cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9saW5lCiBvcCA6bm9ybWFs
X29zcl9leGl0X3RyYW1wb2xpbmUKQEAgLTE0MjMsNiArMTQ0MCw4IEBACiBvcCA6bGxpbnRfaGFu
ZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbgogb3AgOm9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6
b3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbgorb3AgOm9wX2NhbGxfdmFyYXJnc19yZXR1cm5f
bG9jYXRpb24KK29wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KIG9wIDpv
cF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3RfdmFy
YXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRp
b24KQEAgLTE0MzgsMTUgKzE0NTcsMTUgQEAKIG9wIDpvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5f
bG9jYXRpb24KIG9wIDpvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6
b3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbgotb3AgOm9wX3RhaWxfY2FsbF9y
ZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9w
IDpvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9w
IDpvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NhbGxf
ZXZhbF9zbG93X3JldHVybl9sb2NhdGlvbgogCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jYWxsCi1v
cCA6anNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGwKIG9wIDpqc190cmFtcG9saW5lX29wX2NvbnN0
cnVjdAorb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzCitvcCA6anNfdHJhbXBvbGlu
ZV9vcF9jb25zdHJ1Y3RfdmFyYXJncwogb3AgOmpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4
dAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3Blbgogb3AgOmpzX3RyYW1wb2xpbmVf
b3BfY2FsbF9zbG93CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCmluZGV4IDRmNDdjOGJjY2Y4
ZTU3NDhhYTliMGYzNmU2ZjM2MzA1YWRjMzAwMTEuLjI3MGNkNmYxZDAyZjQ0ZDUzZGIzZTZhYTYz
YWZmYTE1ZTBjMDkyNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCkBAIC0xODAsNyAr
MTgwLDcgQEAgcHRyZGlmZl90IHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgdW5zaWduZWQgY2hlY2sKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGVNZXRhZGF0YT4KLUxMSW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm9Gb3IoQnl0
ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK0NhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNp
Z25lZCBjaGVja3BvaW50SW5kZXgpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRl
eCk7CiAgICAgcmV0dXJuIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAppbmRleCAzYjgwM2IzOGE3ODY5
YjQ5Mzg5YzA3OTBhYmM4YmViOGQ0MGE1NThhLi5hMWFmY2Y5MzhhNTFmMmJjMTcyZjBmZDIwMjcx
MzJlNjcyZWVkOTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9y
cy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCi0jaWYgRU5BQkxFKEpJVCkKIG5hbWVz
cGFjZSBKU0MgewogCiBDYWxsTGlua0luZm86OkNhbGxUeXBlIENhbGxMaW5rSW5mbzo6Y2FsbFR5
cGVGb3IoT3Bjb2RlSUQgb3Bjb2RlSUQpCkBAIC04MiwxMSArODEsMTMgQEAgQ2FsbExpbmtJbmZv
Ojp+Q2FsbExpbmtJbmZvKCkKIAogdm9pZCBDYWxsTGlua0luZm86OmNsZWFyU3R1YigpCiB7Cisj
aWYgRU5BQkxFKEpJVCkKICAgICBpZiAoIXN0dWIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9zdHViLT5jbGVhckNhbGxOb2Rlc0Zvcih0aGlzKTsKICAgICBtX3N0dWIgPSBudWxscHRyOwor
I2VuZGlmCiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQpAQCAtMTEzLDE5
ICsxMTQsMTkgQEAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJ
bmZvOjpkb25lTG9jYXRpb24oKQogICAgIHJldHVybiBtX2RvbmVMb2NhdGlvbjsKIH0KIAotc3Rh
dGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxsZWVNYXNrID0gMTsKLQogdm9p
ZCBDYWxsTGlua0luZm86OnNldE1vbm9tb3JwaGljQ2FsbGVlKFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGlyZWN0KCkpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKSAmIHBvbHltb3JwaGlj
Q2FsbGVlTWFzaykpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suc2V0KHZtLCBvd25lciwgY2Fs
bGVlKTsKIAotICAgIGlmIChpc0RhdGFJQygpKSAKKyAgICBpZiAoaXNEYXRhSUMoKSkKICAgICAg
ICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IGNvZGVQdHI7CiAgICAg
ZWxzZSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4oY29kZVB0cikpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgY2FsbGVlKTsKKyNlbmRpZgogICAgIH0KIH0K
IApAQCAtMTM1LDggKzEzNiwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJDYWxsZWUoKQog
ICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKICAgICBpZiAoaXNEYXRhSUMoKSkKICAg
ICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7Ci0g
ICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkpCisgICAgZWxzZSBpZiAoIWNsZWFyZWRC
eUpldHRpc29uKCkpIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgbnVsbHB0cik7CisjZW5k
aWYKKyAgICB9CiB9CiAKIEpTT2JqZWN0KiBDYWxsTGlua0luZm86OmNhbGxlZSgpCkBAIC0yMjQs
NiArMjI4LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgCiAg
ICAgaWYgKGlzTGlua2VkKCkpIHsKICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShK
SVQpCiAgICAgICAgICAgICBpZiAoIXN0dWIoKS0+dmlzaXRXZWFrKHZtKSkgewogICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coCkBAIC0yMzQsNiArMjM5LDcgQEAgdm9pZCBDYWxsTGlua0luZm86
OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgICAgICAgICAgICAgdW5saW5rKHZtKTsKICAgICAgICAg
ICAgICAgICBtX2NsZWFyZWRCeUdDID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyNlbmRpZgogICAg
ICAgICB9IGVsc2UgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1fY2FsbGVlT3JDb2RlQmxvY2suZ2V0
KCkpKSB7CiAgICAgICAgICAgICBpZiAoaXNEaXJlY3QoKSkgewogICAgICAgICAgICAgICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKSB7CkBAIC0yODAsMTMgKzI4NiwxNCBA
QCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKICAgICB9CiB9CiAKKyNpZiBF
TkFCTEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoY29uc3Qg
Q2FsbEZyYW1lU2h1ZmZsZURhdGEmIHNodWZmbGVEYXRhKQogewogICAgIG1fZnJhbWVTaHVmZmxl
RGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KHNodWZmbGVEYXRhKTsKICAg
ICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBTY29w
ZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCkBAIC0zNDUsNyArMzUyLDcgQEAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIGNhbGwKICAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxl
ZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxs
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CiAgICAgc2V0VXNlc0RhdGFJ
Q3MoVXNlRGF0YUlDOjpObyk7CkBAIC0zNTgsNyArMzY1LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFIKICAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQ
UiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkK
K01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJ
Q0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7
CiAgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRh
aWxDYWxsKSk7CkBAIC0zNjYsNyArMzczLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJgogCiB2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQp
CiB7Ci0gICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7
CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwoKS5jb2Rl
KCkpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRh
Zyk7CiB9CkBAIC0zNzYsMjEgKzM4MywzMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJ
Q1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZgogICAg
IGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5jYWxs
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENh
bGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CisjZW5kaWYKIAotdm9pZCBDYWxs
TGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYg
dW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIpCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIENhbGxU
eXBlIGNhbGxUeXBlLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIENhbGxGcmFtZVNodWZm
bGVEYXRhKiBmcmFtZVNodWZmbGVEYXRhKQogewotICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmln
aW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7Ci0gICAgc2V0VXBDYWxsKHVu
bGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOwotICAgIG1fZG9uZUxvY2F0
aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOwotICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKSB7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1l
U2h1ZmZsZURhdGEpOworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRl
eCk7CisgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOworI2lmIEVOQUJMRShKSVQpCisgICAgR1BS
UmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworICAgIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKKyAgICBp
ZiAoZnJhbWVTaHVmZmxlRGF0YSkgewogICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlm
IHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUuCi0gICAgICAgIG1fZnJhbWVT
aHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENh
bGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRh
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKmZyYW1lU2h1ZmZsZURhdGEpOwog
ICAgIH0KLSAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CiAgICAgdS5kYXRhSUMu
bV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgc2V0U2xvd1BhdGhDYWxs
RGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0
ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7CisjZW5kaWYKKyAgICBzZXRVc2VzRGF0
YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0u
Z2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOworICAgIC8vIElmIEpJVCBpcyBkaXNhYmxlZCwgd2Ug
c2hvdWxkIG5vdCBzdXBwb3J0IGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjYWxsIElDLgorICAgIGlm
ICghT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIGRpc2FsbG93U3R1YnMoKTsKIH0KIAorI2lm
IEVOQUJMRShKSVQpCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwpAQCAt
NDA2LDcgKzQyMyw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQpCiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBw
cmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsK
IApAQCAtNDYyLDYgKzQ3OSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXREaXJlY3RDYWxsVGFy
Z2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IHRhcmdldCkKIAogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIHRhcmdl
dCk7CiB9CisjZW5kaWYKIAogdm9pZCBDYWxsTGlua0luZm86OnNldFNsb3dQYXRoQ2FsbERlc3Rp
bmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewpA
QCAtNDgzLDExICs1MDEsMTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIo
KQogICAgICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLmNsZWFyKCk7CiAgICAgICAgIHUuZGF0YUlD
Lm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRyOwogICAgIH0gZWxzZSB7Cisj
aWYgRU5BQkxFKEpJVCkKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpyZXZlcnRKdW1wUmVwbGFjZW1l
bnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhcnRP
ZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiks
IGNhbGxlZUdQUigpLCBudWxscHRyKTsKKyNlbmRpZgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShK
SVQpCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmU+JiYgbmV3U3R1YikKIHsKICAgICBjbGVhclN0dWIoKTsKQEAgLTUwNCw3ICs1MjUsNiBA
QCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmU+JiYgbmV3U3R1YikKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5jb2RlKCkpKTsKICAgICB9CiB9CisjZW5kaWYKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCmluZGV4IGU1Zjc3Y2YzN2JmMjY2
ZjRiOWM5M2M1MGNmOTk2ZDIxYzY2OGNlNDUuLmIyZDNhZmE2Y2Y2MGQxNWJlN2E1ZDQ5ZDg2MmNj
NDVjZjhiNThhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgKQEAgLTI4LDI1ICsyOCwyOSBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVE
YXRhLmgiCiAjaW5jbHVkZSAiQ2FsbE1vZGUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIK
KyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAi
V3JpdGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUKQotCiBjbGFzcyBDQ2FsbEhlbHBlcnM7
CitjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3Mg
SlNGdW5jdGlvbjsKK2NsYXNzIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOwogZW51bSBPcGNv
ZGVJRCA6IHVuc2lnbmVkOwogCitzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiBzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm87CiAKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6CisgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKwogICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90
IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKQEAgLTU5LDYgKzYzLDggQEAgY2xhc3Mg
Q2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+
IHsKICAgICAgICAgRGlyZWN0Q29uc3RydWN0LAogICAgICAgICBEaXJlY3RUYWlsQ2FsbAogICAg
IH07CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1h
c2sgPSAxOwogICAgIAogICAgIHN0YXRpYyBDYWxsVHlwZSBjYWxsVHlwZUZvcihPcGNvZGVJRCBv
cGNvZGVJRCk7CiAKQEAgLTE3NCwzNSArMTgwLDQzIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1
YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVy
biBpc1ZhcmFyZ3NDYWxsVHlwZShzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSkpOwog
ICAgIH0KIAotICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiBtX3N0dWIgfHwgbV9j
YWxsZWVPckNvZGVCbG9jazsgfQorICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiBz
dHViKCkgfHwgbV9jYWxsZWVPckNvZGVCbG9jazsgfQogICAgIHZvaWQgdW5saW5rKFZNJik7CiAK
KyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0VXBDYWxsKENhbGxUeXBlIGNhbGxUeXBlLCBH
UFJSZWcgY2FsbGVlR1BSKQogICAgIHsKICAgICAgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOwog
ICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIGluaXRp
YWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwotCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CisjZW5kaWYKKworICAgIHZvaWQgaW5pdGlhbGl6ZURh
dGFJQyhWTSYsIENhbGxUeXBlLCBCeXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSop
OwogICAgIAogICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CiAgICAgICAgIFll
cywKICAgICAgICAgTm8KICAgICB9OwogCisjaWYgRU5BQkxFKEpJVCkKIHByaXZhdGU6Ci0gICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5r
SW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURh
dGFJQywgYm9vbCBpc1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgogICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsK
LSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWls
Q2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxD
YWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FS
Tl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENh
bGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8
dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZv
aWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwotICAgIHZvaWQgZW1pdERpcmVj
dFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCk7CisgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCk7
CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKICAgICBzdGF0aWMg
dm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB2b2lk
IHNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwor
I2VuZGlmCisKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRh
SUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9
PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjE3LDcgKzIzMSw2IEBAIGNsYXNzIENhbGxMaW5rSW5m
byA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAg
IG1fZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlh
bGl6ZURpcmVjdENhbGwoKTsKIAogICAgIGJvb2wgYWxsb3dTdHVicygpIGNvbnN0IHsgcmV0dXJu
IG1fYWxsb3dTdHViczsgfQogCkBAIC0yMzcsNyArMjUwLDYgQEAgY2xhc3MgQ2FsbExpbmtJbmZv
IDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lk
IHNldENvZGVCbG9jayhWTSYsIEpTQ2VsbCosIEZ1bmN0aW9uQ29kZUJsb2NrKik7CiAgICAgdm9p
ZCBjbGVhckNvZGVCbG9jaygpOwogICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2soKTsK
LSAgICB2b2lkIHNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0
clRhZz4pOwogCiAgICAgdm9pZCBzZXRMYXN0U2VlbkNhbGxlZShWTSYsIGNvbnN0IEpTQ2VsbCog
b3duZXIsIEpTT2JqZWN0KiBjYWxsZWUpOwogICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgp
OwpAQCAtMjQ3LDIyICsyNTksMTggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tl
ZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIHNldEV4ZWN1dGFibGVE
dXJpbmdDb21waWxhdGlvbihFeGVjdXRhYmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlKCk7CiAgICAgCisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHNldFN0dWIoUmVm
PFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmKTsKKyNlbmRpZgogICAgIHZvaWQgY2xlYXJT
dHViKCk7CiAKICAgICBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YigpIGNvbnN0CiAg
ICAgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHJldHVybiBtX3N0dWIuZ2V0KCk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRTbG93U3R1YihSZWY8SklUU3R1YlJvdXRpbmU+JiYgbmV3U2xvd1N0
dWIpCi0gICAgewotICAgICAgICBtX3Nsb3dTdHViID0gV1RGTW92ZShuZXdTbG93U3R1Yik7Ci0g
ICAgfQotCi0gICAgdm9pZCBjbGVhclNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIG1fc2xvd1N0
dWIgPSBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKICAg
ICB9CiAKICAgICBib29sIHNlZW5PbmNlKCkKQEAgLTMzMCwxOSArMzM4LDE3IEBAIGNsYXNzIENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7
CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCi0g
ICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0g
ICAgfQotI2VuZGlmCi0KICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyh1bnNpZ25lZCk7CisgICAgdm9pZCB1cGRhdGVNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyh1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICB7CisgICAgICAgIGlm
IChtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpCisgICAgICAgICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNsb3dQYXRoQ291bnQoKQogICAgIHsKQEAgLTM2NCwxMCArMzcwLDEyIEBAIGNsYXNz
IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZv
PiB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX3Nsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIEdQUlJl
ZyBjYWxsZWVHUFIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY2FsbGVlR1BSOwogICAgIH0K
KyNlbmRpZgogCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudCgpCiAgICAgewpAQCAtMzgzLDkg
KzM5MSwxMSBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0xpbmtlZCgpKSB7
Ci0gICAgICAgICAgICBpZiAoc3R1YigpKQorICAgICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lm
IEVOQUJMRShKSVQpCiAgICAgICAgICAgICAgICAgc3R1YigpLT5mb3JFYWNoRGVwZW5kZW50Q2Vs
bChmdW5jdG9yKTsKLSAgICAgICAgICAgIGVsc2UgeworI2VuZGlmCisgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzRGlyZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0b3IobV9sYXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZS5nZXQoKSk7CkBAIC0zOTcsMjYgKzQw
NywzNSBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogCiAgICAgdm9pZCB2aXNpdFdlYWsoVk0mKTsKIAorI2lmIEVOQUJM
RShKSVQpCiAgICAgdm9pZCBzZXRGcmFtZVNodWZmbGVEYXRhKGNvbnN0IENhbGxGcmFtZVNodWZm
bGVEYXRhJik7CiAKICAgICBjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSogZnJhbWVTaHVmZmxl
RGF0YSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9mcmFtZVNodWZmbGVEYXRhLmdldCgpOwog
ICAgIH0KKyNlbmRpZgogCiBwcml2YXRlOgogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogCisgICAgdWludDMyX3QgbV9tYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBt
YXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3Rh
Y2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24g
VW5pb25UeXBlIHsKICAgICAgICAgVW5pb25UeXBlKCkgCisjaWYgRU5BQkxFKEpJVCkKICAgICAg
ICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciwgSW52YWxpZEdQUlJlZyB9CisjZWxzZQorICAgICAg
ICAgICAgOiBkYXRhSUMgeyBudWxscHRyIH0KKyNlbmRpZgogICAgICAgICB7IH0KICAgICAgICAg
c3RydWN0IERhdGFJQyB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gbV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbjsKKyNpZiBFTkFCTEUoSklUKQog
ICAgICAgICAgICAgR1BSUmVnIG1fY2FsbExpbmtJbmZvR1BSOworI2VuZGlmCiAgICAgICAgIH0g
ZGF0YUlDOwogCiAgICAgICAgIHN0cnVjdCB7CkBAIC00MjksOSArNDQ4LDEwIEBAIGNsYXNzIENh
bGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7
CiAKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdy
aXRlQmFycmllcjxKU0NlbGw+IG1fbGFzdFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CisjaWYgRU5B
QkxFKEpJVCkKICAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+IG1fc3R1YjsK
LSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc2xvd1N0dWI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBtX2ZyYW1lU2h1ZmZsZURhdGE7CisjZW5kaWYKICAg
ICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFzU2VlblNob3VsZFJlcGF0
Y2ggOiAxOwogICAgIGJvb2wgbV9oYXNTZWVuQ2xvc3VyZSA6IDE7CkBAIC00NDEsOSArNDYxLDEw
IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiB7CiAgICAgYm9vbCBtX2NsZWFyZWRCeUpldHRpc29uIDogMTsKICAgICB1bnNp
Z25lZCBtX2NhbGxUeXBlIDogNDsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBtX3VzZURhdGFJ
QyA6IDE7IC8vIFVzZURhdGFJQworI2lmIEVOQUJMRShKSVQpCiAgICAgR1BSUmVnIG1fY2FsbGVl
R1BSIHsgSW52YWxpZEdQUlJlZyB9OworI2VuZGlmCiAgICAgdWludDMyX3QgbV9zbG93UGF0aENv
dW50IHsgMCB9OwotICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
eyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJn
dW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBm
b3IgYXJndW1lbnRzLgogfTsKIAogaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKQEAgLTQ1MywxMSArNDc0LDcgQEAg
aW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKIAogc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2Vs
aW5lLCBzbyB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCi0gICAgQ2Fs
bExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFt
ZVNodWZmbGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOwogfTsKIAotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKaW5kZXggZjdhZmIyYjBmMjhmZDllNWZmYzVjMzRi
NmEzYTg1NmFlMzczMDJmNS4uZjJkZGEwZWVkYWFiOTY0NGEwM2JlYjZlNTNmZWExNzIyM2EwY2Fm
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3Rh
dHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxM
SW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1
ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBAIC02MywzNCArNjIsNyBAQCBDYWxsTGlua1N0YXR1cyBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBDb2RlQgogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIH0KICNlbmRpZgot
Ci0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgIE9wY29kZUlEIG9wID0gaW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCk7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwotICAg
IHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9
ICZpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2Fs
bExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2NvbnN0cnVjdDoKLSAgICAg
ICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKS5tZXRhZGF0
YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBvcF90YWlsX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8
T3BUYWlsQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOgotICAgICAgICBjYWxsTGlu
a0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpLm1ldGFkYXRhKHByb2Zp
bGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHQ6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck5leHQ+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGxMaW5rU3Rh
dHVzKCk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhjYWxs
TGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlKCkpOworICAgIHJldHVybiBDYWxsTGlua1N0YXR1cygp
OwogfQogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNzdjYWE4ZTU3
ZTk0YWQ3MzJhODcwM2I3MTBmZDQ4MGY3MTgxM2FlNi4uYjg2OWFiNzk4OGM4OTQwNWMyYjFjY2M3
MTA0NzFjYzE0ZjExYTQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKQEAgLTQ0OSwxNCArNDQ5LDE3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSh0aGlzKTsgXAogICAgIG5l
dyAoJm1ldGFkYXRhKSBfX29wOjpNZXRhZGF0YSB7IGJ5dGVjb2RlIH07IFwKIAotI2RlZmluZSBD
QVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKLQotI2RlZmluZSBMSU5LKC4uLikgXAotICAg
IENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKTogeyBcCisjZGVmaW5lIExJTktfSU1Q
TCguLi4pIFwKICAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShXVEZfTEFaWV9GSVJTVChfX1ZB
X0FSR1NfXykpIFwKICAgICAgICAgV1RGX0xBWllfSEFTX1JFU1QoX19WQV9BUkdTX18pKHsgXAog
ICAgICAgICAgICAgV1RGX0xBWllfRk9SX0VBQ0hfVEVSTShMSU5LX0ZJRUxELCAgV1RGX0xBWllf
UkVTVF8oX19WQV9BUkdTX18pKSBcCiAgICAgICAgIH0pIFwKKworI2RlZmluZSBDQVNFKF9fb3Ap
IGNhc2UgX19vcDo6b3Bjb2RlSUQKKworI2RlZmluZSBMSU5LKC4uLikgXAorICAgIENBU0UoV1RG
X0xBWllfRklSU1QoX19WQV9BUkdTX18pKTogeyBcCisgICAgICAgIExJTktfSU1QTChfX1ZBX0FS
R1NfXykgXAogICAgICAgICBicmVhazsgXAogICAgIH0KIApAQCAtNDY1LDEwICs0NjgsNiBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpOwogICAgICAgICBtX2J5dGVjb2RlQ29zdCArPSBvcGNvZGVMZW5n
dGhzW29wY29kZUlEXTsKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBMSU5L
KE9wQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2FsbFZhcmFyZ3Ms
IHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIHByb2Zp
bGUpCi0gICAgICAgIExJTksoT3BDb25zdHJ1Y3RWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBM
SU5LKE9wR2V0QnlWYWwsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRQcml2YXRlTmFtZSwg
cHJvZmlsZSkKIApAQCAtNDk4LDExICs0OTcsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
ICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KQogICAgICAgICBMSU5LKE9w
RW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BDYWxsLCBwcm9m
aWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BD
YWxsRXZhbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENvbnN0cnVjdCwgcHJvZmlsZSkKLQog
ICAgICAgICBMSU5LKE9wSW5CeVZhbCkKICAgICAgICAgTElOSyhPcFB1dEJ5VmFsKQogICAgICAg
ICBMSU5LKE9wUHV0QnlWYWxEaXJlY3QpCkBAIC01MjcsMTMgKzUyMSw2OCBAQCBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wQ2F0Y2gpCiAgICAgICAgIExJTksoT3BQcm9m
aWxlQ29udHJvbEZsb3cpCiAKKyAgICAgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgICAgICBM
SU5LX0lNUEwoT3BDYWxsLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlu
a0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNv
ZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDogeworICAgICAgICAgICAg
TElOS19JTVBMKE9wVGFpbENhbGwsIHByb2ZpbGUpCisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhID0gQ2FsbEZyYW1lU2h1ZmZsZURh
dGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKGJ5dGVjb2RlLCBudW1QYXJhbWV0
ZXJzKCkpOworICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURh
dGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9u
LmluZGV4KCksICZzaHVmZmxlRGF0YSk7CisjZWxzZQorICAgICAgICAgICAgbWV0YWRhdGEubV9j
YWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZv
cihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworI2VuZGlmCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7
CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsRXZhbCwgcHJvZmlsZSkKKyAgICAgICAgICAg
IG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1
Y3Q6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENvbnN0cnVjdCwgcHJvZmlsZSkKKyAgICAg
ICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxM
aW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBvcF9p
dGVyYXRvcl9vcGVuOiB7Ci0gICAgICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0
b3JPcGVuKQorICAgICAgICAgICAgTElOS19JTVBMKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAg
ICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2l0ZXJh
dG9yX25leHQ6IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BJdGVyYXRvck5l
eHQpCisgICAgICAgICAgICBMSU5LX0lNUEwoT3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBt
ZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86
OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkKKyAg
ICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENh
bGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxW
YXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5p
dGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGlu
c3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50czogeworICAg
ICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQor
ICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwg
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCks
IG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDb25zdHJ1
Y3RWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8u
aW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCks
IGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIApAQCAtNzgzLDIxICs4MzIsMTggQEAgdm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKICAg
ICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRD
b2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkpOwogICAgICAgICBqaXREYXRhLm1fc3R1YkluZm9z
ID0gRml4ZWRWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+KGppdENvZGUtPm1fdW5saW5rZWRTdHVi
SW5mb3Muc2l6ZSgpKTsKLSAgICAgICAgaml0RGF0YS5tX2NhbGxMaW5rSW5mb3MgPSBGaXhlZFZl
Y3RvcjxDYWxsTGlua0luZm8+KGppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpOworICAg
ICAgICBmb3IgKGF1dG8mIHVubGlua2VkQ2FsbExpbmtJbmZvIDogaml0Q29kZS0+bV91bmxpbmtl
ZENhbGxzKSB7CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCB1bmxpbmtlZENhbGxMaW5rSW5mby5i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8pOworICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKHsgfSwgdW5saW5rZWRDYWxsTGlu
a0luZm8uZG9uZUxvY2F0aW9uKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKICAgICAgICAg
ICAgIHN3aXRjaCAoZW50cnkudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgogICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRD
b25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0lu
Zm86IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGVudHJ5LnBvaW50ZXIoKSk7Ci0gICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gaml0Q29kZS0+bV91bmxpbmtlZENhbGxzW2lu
ZGV4XTsKLSAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGppdERh
dGEubV9jYWxsTGlua0luZm9zW2luZGV4XTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8u
aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVn
VDAsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sW2ldID0gJmNhbGxMaW5rSW5mbzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbzogewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW50cnkucG9pbnRlcigpKTsKICAgICAgICAgICAgICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0gaml0Q29kZS0+bV91bmxpbmtl
ZFN0dWJJbmZvc1tpbmRleF07CkBAIC0xNTY3LDE1ICsxNjEzLDYgQEAgdm9pZCBDb2RlQmxvY2s6
OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9KTsKLQotICAgIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhbJl0oTExJbnRDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykgewotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzTGlua2VkKCkg
JiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZvLmNhbGxlZSgpKSkgewotICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiQ2xlYXJpbmcgTExJbnQgY2Fs
bCBmcm9tICIsICp0aGlzKTsKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby51bmxpbmsoKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlKCkgJiYgIXZt
LmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlKCkpKQotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLmNsZWFyTGFzdFNlZW5DYWxsZWUoKTsKLSAgICB9KTsKIH0KIAogI2lm
IEVOQUJMRShKSVQpCkBAIC0xNTkzLDggKzE2MzAsNiBAQCBDb2RlQmxvY2s6OkpJVERhdGEmIENv
ZGVCbG9jazo6ZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKIHZv
aWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpCiB7CiAgICAgaWYgKGF1dG8q
IGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlu
a0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAgICAgICAgICBjYWxsTGlua0lu
Zm8udmlzaXRXZWFrKHZtKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHN0dWJJbmZvIDogaml0RGF0
YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlckJhc2UgbG9j
a2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAgICAgICAgICAgICBzdHViSW5mby52aXNpdFdlYWtS
ZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CkBAIC0xNjEyLDE5ICsxNjQ3LDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkKICAgICAgICAgfQogICAgIH0KICNlbmRp
ZgotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKSB7Ci0gICAgICAgIC8vIFZlcmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXpl
IHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KLSAgICAgICAgZm9yIChDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0
Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
Y2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9y
RWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2VsbCopIHsKLSAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICB9Ci0jZW5k
aWYKIH0KICNlbmRpZgogCkBAIC0xNjM3LDYgKzE2NTksMTAgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUlu
dGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMo
KTsKIAorICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgIGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0p
OworICAgIH0pOworCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCiAgICAg
ICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CkBAIC0xNzAwLDEyICsxNzI2LDEzIEBAIHZv
aWQgQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHZvaWQgQ29kZUJsb2NrOjpnZXRJ
Q1N0YXR1c01hcChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBJQ1N0YXR1c01hcCYgcmVzdWx0
KQogewogI2lmIEVOQUJMRShKSVQpCisgICAgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5r
SW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgcmVzdWx0LmFk
ZChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUu
Y2FsbExpbmtJbmZvID0gJmNhbGxMaW5rSW5mbzsKKyAgICB9KTsKICAgICBpZiAoSklUQ29kZTo6
aXNKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0
YS5nZXQoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEtPm1f
c3R1YkluZm9zKQogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8uY29kZU9yaWdp
biwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5m
b3MpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29kZU9yaWdpbigp
LCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNhbGxMaW5rSW5m
bzsKICAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKQEAgLTE3NjAsMTUgKzE3ODcsMjIgQEAgU3Ry
dWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9y
aWdpbikKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6
OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkKK0Nh
bGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXggaW5kZXgpCiB7Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGlmIChhdXRvKiBqaXREYXRhID0g
bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0
RGF0YS0+bV9jYWxsTGlua0luZm9zKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmNv
ZGVPcmlnaW4oKSA9PSBDb2RlT3JpZ2luKGluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
JmNhbGxMaW5rSW5mbzsKLSAgICAgICAgfQorICAgIGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoaW5kZXgpOworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkp
IHsKKyNkZWZpbmUgQ0FTRShPcCkgXAorICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCisgICAgICAg
IHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJ
bmZvOyBcCisgICAgICAgIGJyZWFrOworCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRf
Q0FMTF9MSU5LX0lORk8oQ0FTRSkKKworI3VuZGVmIENBU0UKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKICAgICB9CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjEzNSwxMyArMjE2OSw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBT
aHJpbmtNb2RlIHNocmlua01vZGUpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxv
Y2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZv
KiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxv
Y2tlcikubV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCiB2b2lkIENvZGVCbG9j
azo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBv
bHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQogewogICAgIG5vdGljZUluY29taW5nQ2FsbChj
YWxsZXJGcmFtZSk7CkBAIC0yMTUyLDEwICsyMTc5LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5r
SW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBo
aWNDCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNv
bWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykK
K3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOworICAgIG1faW5jb21pbmdD
YWxscy5wdXNoKGluY29taW5nKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5n
Q2FsbHMoKQogewotICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1f
aW5jb21pbmdMTEludENhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nTExJbnRDYWxscy5i
ZWdpbigpLT51bmxpbmsoKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0g
bV9pbmNvbWluZ0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+
dW5saW5rKHZtKCkpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgSklURGF0YSogaml0RGF0YSA9IG51
bGxwdHI7CiAgICAgewpAQCAtMjE2MywyMCArMjE5NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6dW5s
aW5rSW5jb21pbmdDYWxscygpCiAgICAgICAgIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCk7CiAg
ICAgfQogICAgIGlmIChqaXREYXRhKSB7Ci0gICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29t
aW5nQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAg
ICAgICAgICBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwog
ICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4o
KSAhPSBqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKICAgICAgICAg
ICAgIGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluayh2
bSgpKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6
OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0lu
Zm8qIGluY29taW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0g
ICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIENvZGVCbG9jayog
Q29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJs
ZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBA
IC0yMzI5LDEzICsyMzU0LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6
SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZt
LmhlYXAuY3VycmVudFRocmVhZElzRG9pbmdHQ1dvcmsoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChv
d25lckV4ZWN1dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKSVQpCiAg
ICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IGlmIChKSVREYXRhKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAg
fQorICAgICAgICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNldENsZWFy
ZWRCeUpldHRpc29uKCk7CisgICAgICAgIH0pOworCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewogICAgICAgICAg
ICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpA
QCAtMjM0NCw3ICsyMzY4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpK
ZXR0aXNvblJlYXNvbiByZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSBtb2QKICAgICAgICAgfQog
I2VuZGlmCiAgICAgfQotI2VuZGlmCiAKICAgICAvLyBUaGlzIGFjY29tcGxpc2hlcyAoMikuCiAg
ICAgb3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKHZtLCBhbHRlcm5hdGl2ZSgpLCBjb2Rl
VHlwZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yODQ3LDE5ICsyODcwLDEzIEBAIEFy
cmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQnl0ZWNvZGVJbmRlCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0
aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkpIHsKLSNkZWZpbmUgQ0FTRTEoT3ApIFwKKyNkZWZpbmUgQ0FTRShPcCkgXAogICAgIGNh
c2UgT3A6Om9wY29kZUlEOiBcCiAgICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJyYXlQcm9maWxlOwogCi0jZGVmaW5lIENBU0UyKE9wKSBcCi0g
ICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKLSAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8
T3A+KCkubWV0YWRhdGEodGhpcykubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGU7Ci0KLSAg
ICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENBU0UxKQotICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENBU0UyKQorICAgIEZPUl9FQUNIX09Q
Q09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRSkKIAotI3VuZGVmIENBU0UxCi0jdW5kZWYgQ0FT
RTIKKyN1bmRlZiBDQVNFCiAKICAgICBjYXNlIE9wR2V0QnlJZDo6b3Bjb2RlSUQ6IHsKICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CkBAIC0zMDI5
LDE3ICszMDQ2LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVk
aWN0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlCiAgICAgICAgIH0KICAgICB9
KTsKIAotI2RlZmluZSBWSVNJVDEoX19vcCkgXAorI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAg
bV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IHByb2Nlc3Mo
bWV0YWRhdGEubV9hcnJheVByb2ZpbGUpOyB9KTsKIAotI2RlZmluZSBWSVNJVDIoX19vcCkgXAot
ICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBwcm9j
ZXNzKG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlKTsgfSk7Ci0KLSAgICBG
T1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUMSkKLSAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJVDIpCisgICAgRk9SX0VBQ0hfT1BD
T0RFX1dJVEhfQVJSQVlfUFJPRklMRShWSVNJVCkKIAotI3VuZGVmIFZJU0lUMQotI3VuZGVmIFZJ
U0lUMgorI3VuZGVmIFZJU0lUCiAKICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JO
ZXh0PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7CiAgICAgICAgIHByb2Nlc3MobWV0YWRhdGEubV9p
dGVyYWJsZVByb2ZpbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCmluZGV4IDY0ZjlmNWFiY2ZlMmFlNzA1ZDFkYTY1YWE5ZjgzMTk3Yjk2YzZkMzEuLmI3YWVh
MjY3N2Y1ZTk0OTA4YWIzNTVmOTZiMGQyM2MzNzgyNDIwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlICJK
U0Nhc3QuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkp1bXBUYWJs
ZS5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJNZXRhZGF0YVRhYmxlLmgiCiAjaW5jbHVkZSAi
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCIKQEAgLTI2MSw4ICsyNjAsNiBAQCBjbGFzcyBDb2Rl
QmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIAogICAgICAgICBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9z
dHViSW5mb3M7Ci0gICAgICAgIEZpeGVkVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0lu
Zm9zOwotICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdT
ZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50
aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2Rl
PFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKICAgICAg
ICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9OwogICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CkBAIC0yOTEsNyArMjg4LDcg
QEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gVGhpcyBpcyBhIHNs
b3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5nIE9TUiBleGl0cyBp
biB0aGUgY2FzZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5pbmcuIENoYW5jZXMg
YXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAgICAgLy8gbG9va2lu
ZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0
aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVj
b2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAgICAg
CiAgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCkBAIC0zMDksMTQgKzMwNiwx
MSBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQogCiAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0KLSNpZiBFTkFCTEUoSklU
KQogICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBDYWxs
TGlua0luZm8qKTsKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgbGlua0luY29taW5nUG9seW1v
cnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0gICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxG
cmFtZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7Ci0KICAgICBjb25zdCBJbnN0
cnVjdGlvbiogb3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpOwogICAg
IGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0
KQogICAgIHsKQEAgLTQ1Myw3ICs0NDcsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlND
ZWxsIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hWYWx1ZVBy
b2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKGNvbnN0IEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lk
IGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZv
KGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYmluYXJ5QXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogdW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwpA
QCAtOTU5LDcgKzk1Myw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAg
IFZNKiBtX3ZtOwogCiAgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyIHsg
bnVsbHB0ciB9OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywgUGFj
a2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2Fs
bHM7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICBTdHJ1Y3R1cmVXYXRj
aHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29k
ZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAppbmRleCAxZDU5NGFiODM1Mjg5N2VjOGE3
NDVlYTI0OTNmOGQyZGEwMThiOTYyLi45MmRhOTlhMGJhMmFjYzFmY2RiNmE5NzM1ZmNkZGUyM2Vm
YzkzM2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2tJbmxpbmVzLmgKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJiBmdW5jKQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5m
byhjb25zdCBGdW5jdG9yJiBmdW5jKQordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFz
ZWxpbmVDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYgZnVuYykKIHsKICAgICBpZiAobV9tZXRh
ZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmYTMyZTliNjZiYjdjNjFmZWIzMzlmODA1MjhjMmQzNDcxZDgwNjhiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsOTcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNDUHRyVGFnLmgiCi0jaW5jbHVkZSAiSlNG
dW5jdGlvbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2luY2x1ZGUg
PHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBJ
bnN0cnVjdGlvbjsKLQotY2xhc3MgTExJbnRDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3
U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPiB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0
cl90IHVubGlua2VkQml0ID0gMHgxOwotCi0gICAgTExJbnRDYWxsTGlua0luZm8oKSA9IGRlZmF1
bHQ7Ci0gICAgCi0gICAgfkxMSW50Q2FsbExpbmtJbmZvKCkKLSAgICB7Ci0gICAgICAgIGlmIChp
c09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
aXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiAhKG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhM
aW5rQml0ICYgdW5saW5rZWRCaXQpOyB9Ci0gICAgCi0KLSAgICB2b2lkIGxpbmsoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gY29kZVB0cikKLSAgICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAg
ICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhM
aW5rQml0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKTsKLSAgICAgICAgdm0ud3Jp
dGVCYXJyaWVyKG93bmVyLCBjYWxsZWUpOwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0g
Y29kZVB0cjsKLSAgICB9Ci0KLSAgICB2b2lkIHVubGluaygpCi0gICAgewotICAgICAgICAvLyBN
YWtlIGxpbmsgaW52YWxpZGF0ZWQuIEl0IHdvcmtzIGJlY2F1c2UgTExJbnQgdGVzdHMgdGhlIGdp
dmVuIGNhbGxlZSB3aXRoIHRoaXMgcG9pbnRlci4gQnV0IGl0IGlzIHN0aWxsIHZhbGlkIGFzIGxh
c3RTZWVuQ2FsbGVlIQotICAgICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0Jp
dCB8PSB1bmxpbmtlZEJpdDsKLSAgICAgICAgbV9tYWNoaW5lQ29kZVRhcmdldCA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgICAgIHJlbW92ZSgpOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBjYWxsZWUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKCFpc0xpbmtlZCgpKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNPYmplY3QqPihtX2NhbGxl
ZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGxh
c3RTZWVuQ2FsbGVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
SlNPYmplY3QqPihtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCAmIH51bmxpbmtl
ZEJpdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCkKLSAgICB7Ci0g
ICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ID0gdW5saW5rZWRCaXQ7
Ci0gICAgfQotCi0gICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOwotICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
TExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQotCi1wcml2YXRlOgotICAgIHVp
bnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0
IH07Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fbWFjaGluZUNv
ZGVUYXJnZXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAppbmRleCBjYThiZWYzMjhiNGJmYjJiMGRmZGM4YjI4NTI0OTIxYWM4
MzliZDM2Li4xY2JjNjZmODQ5OTU0OTk3ZWY3YzUwZDQ5Mzg0MzAyZjM1YzYyOWVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCkBAIC0xMjYsMTEgKzEyNiwxOSBAQCBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RG
OjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wUnNoaWZ0KSBcCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FM
TF9MSU5LX0lORk8obWFjcm8pIFwKKyAgICBtYWNybyhPcENhbGwpIFwKKyAgICBtYWNybyhPcFRh
aWxDYWxsKSBcCisgICAgbWFjcm8oT3BDYWxsRXZhbCkgXAorICAgIG1hY3JvKE9wQ29uc3RydWN0
KSBcCisgICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yTmV4
dCkgXAogICAgIG1hY3JvKE9wQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsVmFy
YXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKSBcCiAgICAgbWFj
cm8oT3BDb25zdHJ1Y3RWYXJhcmdzKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
QVJSQVlfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKICAgICBtYWNy
byhPcEluQnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsKSBcCkBAIC0xMzksNiArMTQ3LDcg
QEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxlbmd0aCA9
IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcEVudW1lcmF0b3JHZXRCeVZh
bCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRvckluQnlWYWwpIFwKICAgICBtYWNybyhPcEVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eSkgXAorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NB
TExfTElOS19JTkZPKG1hY3JvKSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJS
QVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdBcnJheSkgXApA
QCAtMTQ4LDE0ICsxNTcsNiBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9y
TWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogI2RlZmluZSBGT1Jf
RUFDSF9PUENPREVfV0lUSF9PQkpFQ1RfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAg
bWFjcm8oT3BOZXdPYmplY3QpIFwKIAotI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElO
VF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAotICAgIG1hY3JvKE9wQ2FsbCkgXAotICAgIG1hY3Jv
KE9wVGFpbENhbGwpIFwKLSAgICBtYWNybyhPcENhbGxFdmFsKSBcCi0gICAgbWFjcm8oT3BDb25z
dHJ1Y3QpIFwKLSAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAotICAgIG1hY3JvKE9wSXRlcmF0
b3JOZXh0KSBcCi0KICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BS
T0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcEFkZCkgXAogICAgIG1hY3JvKE9wTXVsKSBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ5
YzJlZDdkNDhlNWJhMjU2YTMzNDRkZjE2NmRjYWZiNzVjNjFiOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcApAQCAtMCwwICsxLDIw
MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgorCisjaW5jbHVkZSAi
QmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5o
IgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJ
VC5oIgorI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkRpcmVjdEFy
Z3VtZW50cy5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkZ1bGxDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiRnVu
Y3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKKyNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmgiCisjaW5jbHVkZSAiSUNTdGF0cy5oIgorI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2lu
Y2x1ZGUgIkluc3RhbmNlT2ZBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJNb2R1bGVOYW1l
c3BhY2VBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKKyNpbmNs
dWRlICJTY29wZWRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVJh
cmVEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgIlN1cGVyU2Ft
cGxlci5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgorI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IGNvZGVSZWYpCit7CisgICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3Rp
bmF0aW9uKGNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkp
OworfQorCisjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikK
K3sKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGdl
bmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOworfQorI2VuZGlmCisK
K3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2
aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTGlua0luZm8uY2FsbE1vZGUo
KSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsK
K30KKworc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25lcihKU0NlbGwqIGNhbGxlZSkKK3sK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgLy8gRWFjaCBXZWJBc3NlbWJseS5JbnN0YW5j
ZSBzaGFyZXMgdGhlIHN0dWJzIGZyb20gdGhlaXIgV2ViQXNzZW1ibHkuTW9kdWxlLCB3aGljaCBh
cmUgdGhlcmVmb3JlIHRoZSBhcHByb3ByaWF0ZSBvd25lci4KKyAgICByZXR1cm4ganNDYXN0PEpT
V2ViQXNzZW1ibHlNb2R1bGUqPihjYWxsZWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bGVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxs
cHRyOworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKK30KKwordm9pZCBsaW5rTW9ub21v
cnBoaWNDYWxsKAorICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBKU09iamVj
dCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
K3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOworCisgICAgQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICAvLyBPdXIgY2FsbGVy
IG11c3QgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcKKyAgICAvLyB0aGlz
IGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorICAgIEFTU0VSVChj
YWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOworCisgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CisKKyAgICAvLyBXZWJBc3NlbWJs
eSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgorICAgIEpTQ2VsbCog
b3duZXIgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwo
KSkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBj
YWxsZXJDb2RlQmxvY2s7CisgICAgQVNTRVJUKG93bmVyKTsKKworICAgIEFTU0VSVCghY2FsbExp
bmtJbmZvLmlzTGlua2VkKCkpOworICAgIGNhbGxMaW5rSW5mby5zZXRNb25vbW9ycGhpY0NhbGxl
ZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7CisgICAgY2FsbExpbmtJbmZvLnNldExhc3RT
ZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKworICAgIGlmIChzaG91bGREdW1wRGlzYXNz
ZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKKyAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxs
IGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVP
cmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlw
b2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKKworICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCisg
ICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwgJmNh
bGxMaW5rSW5mbyk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChjYWxsTGlua0luZm8uc3Bl
Y2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFsbG93U3R1
YnMoKSkgeworICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9s
eW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisgICAgCisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Cit9CisKK3N0YXRp
YyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQoreworICAg
IGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgeworI2lmIEVOQUJMRShKSVQpCisgICAgICAg
IGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOworICAgICAgICBpZiAoIWNhbGxMaW5rSW5m
by5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxp
emVEaXJlY3RDYWxsKCk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWNhbGxM
aW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7CisgICAgICAgICAgICBsaW5rU2xvd1BhdGhU
byh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKworICAgICAgICAgICAgaWYgKGNhbGxMaW5r
SW5mby5zdHViKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnJldmVydENhbGxUb1N0
dWIoKTsKKyAgICAgICAgfQorICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDYWxsZWUoKTsgLy8g
VGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJvdGggZm9yIGRhdGEgYW5kIGNvZGUt
YmFzZWQgY2FjaGVzLgorICAgIH0KKyAgICBjYWxsTGlua0luZm8uY2xlYXJTZWVuKCk7CisgICAg
Y2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOworICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3Qo
KSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2b2lkIHVubGlua0NhbGwo
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJh
d1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOworICAgIAorICAgIHJldmVydENhbGwodm0sIGNhbGxM
aW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRh
Zz4oKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2Fz
bUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNPYmplY3Qq
IGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKCFjYWxsZWUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChraW5kICE9IENvZGVGb3JDYWxsKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5h
bWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNhbGxlZSkpCisgICAgICAgIHJldHVy
biB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxl
ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2lmIEVOQUJMRShKSVQpCisK
K3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnT3BlcmF0aW9uV2l0aFZh
bGlkYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVyYXRpb24pCit7CisgICAg
SlNDX1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJREFUSU9OKG9wZXJhdGlvbik7
Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdl
dFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkK
K3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihj
YWxsKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElD
Q2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICByZXR1cm4g
cmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24pOwor
ICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCA9IHN0dWJJbmZvLm1f
c2xvd1BhdGhDYWxsTG9jYXRpb247CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgICAgICBGdW5jdGlvblB0
cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0
PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRh
Zz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNvZGVCbG9j
ay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxsVGFy
Z2V0KCkpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmV0dXJuIHJldGFnQ2FsbFRhcmdldFdpdGhWYWxp
ZGF0aW9uKGNhbGwpOworfQorCit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsLCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQoreworI2lmIEVO
QUJMRShGVExfSklUKQorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpG
VExKSVQpIHsKKyAgICAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOworICAgICAgICBGVEw6
OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKKyAgICAgICAgRnVuY3Rpb25QdHI8SklU
VGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRU
aHVua1B0clRhZz4oY2FsbCk7CisgICAgICAgIGF1dG8gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEZUTDo6U2xvd1BhdGhDYWxs
S2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsK
KyAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9uUHRyPEpJVFRo
dW5rUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIGtleSkuY29kZSgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICBV
TlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdn
ZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKK30KKworc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRo
Q2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQoreworICAgIGlm
IChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIHN0dWJJbmZvLm1fc2xvd09wZXJh
dGlvbiA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJs
b2NrLCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxsZWVGdW5jdGlvbik7
Cit9CisKK2VudW0gSW5saW5lQ2FjaGVBY3Rpb24geworICAgIEdpdmVVcE9uQ2FjaGUsCisgICAg
UmV0cnlDYWNoZUxhdGVyLAorICAgIEF0dGVtcHRUb0NhY2hlCit9OworCitzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisKKyAgICBUeXBlSW5m
byB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKKyAgICBpZiAodHlwZUluZm8ucHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
CisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgeworICAgICAg
ICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgLy8gRmxhdHRlbmluZyBjb3VsZCBoYXZlIGNo
YW5nZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZvciBhbm90aGVyIHRyeS4KKyAgICAg
ICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKKyAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICB9CisgICAgCisgICAgaWYgKCFzdHJ1Y3R1cmUt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Cit9CisKK3N0YXRpYyBib29sIGZv
cmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6Zm9y
Y2VJQ0ZhaWx1cmUoKTsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0Y2hw
b2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQmIHJlc3Vs
dCkKK3sKKyAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50cygp
KSB7CisgICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHModm0pOworCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2ssIHZtKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KGxvY2tlciwgY29kZUJsb2NrKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJ
ZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1p
emU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Cisg
ICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgY2FzZSBH
ZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRl
TmFtZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWRPcHRp
bWl6ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5s
aW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9u
KEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2V0QnlL
aW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKKyAgICBjYXNlIEdl
dEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzOworICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uVHJ5R2V0QnlJZDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKKyAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljOworICAgIGNhc2Ug
R2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRC
eUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0o
KSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBD
YWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCisgICAgICAgIGlmICghYmFzZVZh
bHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
IEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGNvbnN0IGJv
b2wgaXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lIHx8IGtpbmQgPT0g
R2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7CisKKyAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+
IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQK
KyAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCisgICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKworICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkq
PihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGlu
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJy
YXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJp
bmcoYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgp
ID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNz
Ojppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZt
LCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFt
aWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFuZGxlIHRoaXMgYXMg
YSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKKyAgICAgICAgICAgICAgICAvLyB0aGlz
IHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNhc2UgZm9yIHRoYXQg
bG9hZCBpZiBuZWVkZWQuCisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2Rl
VGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3RoLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChTY29wZWRBcmd1bWVudHMqIGFyZ3Vt
ZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgewor
ICAgICAgICAgICAgICAgIC8vIERpdHRvLgorICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRz
LT5vdmVycm9kZVRoaW5ncygpKQorICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xl
bmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNlbGwtPmluaGVyaXRzPEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNldCgpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5tb2R1bGVOYW1lc3BhY2VTbG90
KCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6
OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpzQ2FzdDxKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNlU2xvdC0+ZW52aXJvbm1lbnQs
IFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3BlT2Zmc2V0KSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2FzZSkgeworICAgICAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJh
c2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgICAgICBib29sIGxvYWRUYXJnZXRGcm9t
UHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVG
b3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAg
YmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOworICAgICAg
ICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgICAgIGxv
YWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJ
bmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7Cisg
ICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAgICAgICAg
IHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgor
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQK
KyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAg
ICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICAgICAmJiAh
c2xvdC53YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdl
dEZyb21Qcm94eSkgeworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFj
Y2Vzc0NoYWluOworCisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90Lmlz
VW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOworCisgICAgICAg
ICAgICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1c3RvbXMsIHdlIG11c3QgZGlz
YWxsb3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKKyAgICAgICAgICAgICAgICAvLyBuZWVkIHRv
IGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hlIHRoZQor
ICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBvaW50ZXIuCisKKyAgICAgICAg
ICAgICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBzbG90LnNs
b3RCYXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2xvdC5pc1Vu
c2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpzQ2FzdDxKU09iamVjdCo+KGJh
c2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7IC8v
IFdlIG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgJiYgc3RydWN0dXJlLT50eXBl
SW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAg
ICAgLy8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERpcmVjdCBvciBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3RpZ2F0ZSBwcm90b3R5cGUgY2hhaW5z
IGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgLy8gQ2FjaGVhYmlsaXR5IGp1c3QgZGVwZW5kcyBv
biB0aGUgaGVhZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gR2V0QnlL
aW5kOjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNl
Q2VsbCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMgbWF5IGhhdmUgY2hhbmdlZCBkdWUg
dG8gZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0No
YWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFj
Y2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9w
ZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3VsZCBiZSBpbnNpZGUgZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvcGVydHlCbGFoLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Rv
dHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
IHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IG9mZnNldCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0cmlidXRl
cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0Z1bmN0aW9uKiBnZXR0
ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkK
KyAgICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwg
c2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOworCisgICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZTsKKyAgICAgICAgICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21BdHRyaWJ1dGUoKSkKKyAgICAg
ICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJpYnV0ZSgpOworCisgICAgICAg
ICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsKKyAgICAgICAgICAgICAgICBB
Y2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXND
YWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6
TG9hZDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6R2V0R2V0dGVyOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAg
ICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
dHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2Fk
VGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbikpOworICAgICAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZyb21Qcm94
eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNp
Y0dldHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgIG5l
d0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
cHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNl
dCwgZ2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKSB7CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpMb2FkLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldCwgc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nl
c3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmlzVW5zZXQo
KSA/IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBs
b2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5
cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNs
b3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0
dGVyOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMgJiYgdHlwZSA9PSBBY2Nlc3ND
YXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICBu
ZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/
IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRlcigpKSA6
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgJiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51
bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1vdmUocHJv
dG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNzQ2FzZSwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHBy
b3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKworICAg
ICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5l
d0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAg
ICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAg
c3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgICAgICBjYXNlIEdl
dEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0
OgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAg
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5VmFsOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgor
ICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNo
cG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3Vs
dCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNo
ZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVl
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAKKyAgICBp
ZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2V0
QnlGdW5jdGlvbihraW5kKSk7Cit9CisKKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAg
ICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywg
Z2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUu
YXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwor
ICAgICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFyZ3VtZW50c1R5cGUpCisgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERpcmVjdEFyZ3VtZW50c0xvYWQ7
CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTY29wZWRBcmd1bWVudHNUeXBlKQor
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTY29wZWRBcmd1bWVu
dHNMb2FkOworICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU3RyaW5nVHlwZSkKKyAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDsKKyAg
ICAgICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0p
LT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
SW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVV
aW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlVaW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZM
b2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5SW50MzJMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
eXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2
NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgICAgIGNhc2UgVHlw
ZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBi
YXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAgICAgICAgICAgc3dp
dGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMkxvYWQ7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlTG9hZDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBl
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGln
dW91c0xvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5
U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQXJyYXlTdG9yYWdlTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3Qo
KSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUs
IG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsK
KyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hw
b2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6
IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
LCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYg
KHRyeUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5k
ZXgsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7Cit9CisK
K3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlL
aW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0Owor
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmll
bGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0
QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmlj
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5l
cmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAg
ICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWM7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhh
cHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVP
cHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5
S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBzd2l0Y2ggKHB1dEJ5S2lu
ZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQp
IHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xv
dC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAg
ICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0
cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
RGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAg
SWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIGlmIChmb3Jj
ZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgaWYgKCFzbG90Lmlz
Q2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5pc0Nh
Y2hlYWJsZVNldHRlcigpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8gc29tZXRoaW5nIHNtYXJ0ZXIgaGVy
ZS4uLgorICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nTW9k
ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAvLyBXZSBj
YW4ndCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUgcHJvdG90eXBlIHNpbmNlIGl0IHNo
b3VsZG4ndCBvd24gcHJvcGVydGllcy4KKyAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHNs
b3QuYmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOworCisgICAgICAgIGlmICghb2xkU3RydWN0dXJl
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKworICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2Vs
bCgpOworCisgICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNlOworICAgICAgICBpZiAoYmFzZUNl
bGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgeworICAgICAgICAgICAgYmFz
ZUNlbGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAgICAgICAg
ICBiYXNlVmFsdWUgPSBiYXNlQ2VsbDsKKyAgICAgICAgICAgIGlzUHJveHkgPSB0cnVlOworCisg
ICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFuZCBKUy9DdXN0
b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAorICAgICAgICAgICAgLy8gY2FjaGUgdHJh
bnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJlIHRoZSBzYW1l
IHN0cnVjdHVyZQorICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24u
CisgICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0NhY2hlYWJsZVB1
dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkK
KyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKKyAgICAgICAgICAg
ICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7CisgICAgICAgICAgICBpZiAoIWlzQ2Fj
aGVhYmxlUHJveHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGREZWZpbmUpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAg
UmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHNsb3QuYmFzZSgpID09
IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKKyAgICAgICAgICAgIGlmIChz
bG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRjaCBidWdzIGlmIHdlIGFjY2lkZW50
YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCisgICAgICAgICAgICAgICAgLy8gd2hlbiB3
ZSB0cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkuIFRoaXMgaXMg
Y29tbW9uIGFtb25nCisgICAgICAgICAgICAgICAgLy8gcGF0aHMgdGhhdCByZWlmeSBsYXp5IHBy
b3BlcnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBhbmQgZm9yZ2V0CisgICAgICAg
ICAgICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkgY29tZSBkb3duIHRoaXMgcGF0
aC4gVGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAvLyBrbm93IGhvdyB0
byBtb2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKG9yIGFueSBzdHJ1
Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGZvciB0aGF0IG1hdHRlcikuCisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUodm0pID09IG9sZFN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUt
PmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0g
Q2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNh
bkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNh
Y2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJv
eHkpIHsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRT
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlL
aW5kLCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0
QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgp
LCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFpc1Byb3h5KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJv
cGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVj
dHVyZS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIHN0cnVjdHVyZSBpcyBkaWN0aW9u
YXJ5LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBiZXR3ZWVuIGFuIG9iamVjdCBh
bmQgYSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBOZXdQcm9wZXJ0
eSBvcGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9lcyBub3Qgb2ZmZXIgYW55IGJl
bmVmaXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFwcGVucyBhZ2Fpbi4KKyAgICAg
ICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNv
bmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2Fj
aGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisg
ICAgICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBpcyBvdmVycmlkZGVuIGJ5IFVzZXJP
YmplY3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVmZmVjdCBvbiBKU09iamVjdDo6
cHV0LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0UHJvcGVydHlTbG90IGFzIG5vbi1j
YWNoYWVibGUsCisgICAgICAgICAgICAgICAgLy8gdGhlbiBhcmJpdHJhcnkgc3RydWN0dXJlIHRy
YW5zaXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQgb3BlcmF0aW9uLCBhbmQgdGhpcyBn
ZW5lcmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBoZXJlIGFzIGlmIG9sZFN0cnVj
dHVyZSAtPiBuZXdTdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gSW4gcmVhbGl0eSwgdGhl
IHRyYW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0aGluZyB1bmtub3duIHN0cnVjdHVy
ZXMgLT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIC8vIFRvIGd1YXJk
IGFnYWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5jb3JyZWN0IFVzZXJPYmplY3Q6
OnB1dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbiBh
bmQgaWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhlIHB1dC4KKyAgICAgICAgICAg
ICAgICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG5ld1N0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KHZtKSAhPSBuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJ
RCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJl
LT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWZQdHI8
UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICAgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAg
ICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2Jq
ZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVT
dGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNj
ZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3ND
aGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50LmlzUHJpdmF0ZU5hbWUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRl
bnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBvZmZzZXQsIG9sZFN0
cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pLCBzdHViSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgewor
ICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAg
ICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAg
ICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwor
CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgd2UncmUgYSBz
ZWxmIGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMKKyAgICAgICAg
ICAgICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBn
b2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50CisgICAgICAgICAgICAgICAgLy8g
ZnVuY3Rpb24gcG9pbnRlci4KKyAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJl
cGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7
CisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkg
IT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNl
c1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hh
aW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNl
bGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0
eUhpdEN1c3RvbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29y
U2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25T
ZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1c3RvbVNl
dHRlcigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFnPigpLCBzbG90LmJhc2UoKSAhPSBi
YXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsKKyAgICAg
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3ND
aGFpbjsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hl
ZE9mZnNldCgpOworCisgICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVz
LT5mbGF0dGVuZWREaWN0aW9uYXJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVz
ZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0No
YWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VD
ZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlw
ZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90
QmFzZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSkpLT5nZXQodm0sIGlkZW50
LmltcGwoKSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRPZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNj
ZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhp
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLmF0dHJpYnV0ZXMo
KSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hh
aW4pLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExPR19J
QygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
LCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgIAorICAgICAgICBy
ZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9k
ZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7CisKKyAgICAgICAg
aWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworCisgICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQo
dm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNo
b3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwor
dm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQ
dXRLaW5kIHB1dEtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisKK3N0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVl
IGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCit7CisgICAgaWYg
KCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisg
ICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7
CisgICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5
U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSkt
PnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJ
bnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVV
aW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlVaW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50
MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUlu
dDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheUludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3Jl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXpl
IEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAg
Y2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdT
aGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAg
ICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFw
ZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMy
U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZVNo
YXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91
YmxlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnRp
Z3VvdXNTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkp
OworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKKworICAgICAg
ICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwo
dm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFj
Y2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1
YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBh
dGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAg
aWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwg
aW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0S2luZDo6
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpIDog
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKK30KKworc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBi
YXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQsIEVDTUFN
b2RlIGVjbWFNb2RlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52
bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1
cmUpOworICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpIHx8ICFvbGRTdHJ1Y3R1cmUt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzUHJveHko
KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIGlmICghc2xv
dC5pc0NhY2hlYWJsZURlbGV0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlv
bmFyeSgpKSB7CisgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworICAgICAgICAgICAganNDYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKS0+Zmxh
dHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICBSZWZQ
dHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAoc2xvdC5pc0RlbGV0ZUhpdCgp
KSB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBpbnZhbGlkT2Zmc2V0
OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJlbW92
ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRT
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0KTsKKyAgICAgICAgICAgIGlm
ICghbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBBU1NFUlQobmV3T2Zmc2V0ID09IHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0
dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9u
KTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAgICAg
ICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7CisgICAgICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFt
ZSwgbmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBB
Y2Nlc3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHByb3BlcnR5TmFtZSwgaW52YWxpZE9m
ZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNz
Q2FzZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1
cmUsIHsgfSwgbnVsbHB0cik7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNz
Q2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgcHJvcGVydHlO
YW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNv
bWVDb2RlKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwor
ICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1l
LnVpZCgpKSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9
CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0
dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdp
dmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCBy
ZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCwgRUNNQU1vZGUgZWNt
YU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh0cnlDYWNoZURl
bGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFsdWUsIG9sZFN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwgZWNtYU1vZGUpID09IEdpdmVVcE9u
Q2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoR2VuZXJp
YywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgIGlmIChraW5k
ID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7CisgICAgfQorfQorCitpbmxpbmUgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24o
SW5CeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluQnlLaW5k
OjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgY2Fz
ZSBJbkJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emU7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBh
cHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKK3sKKyAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uSW5CeUlkR2VuZXJpYzsKKyAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOworICAgIGNhc2UgSW5CeUtpbmQ6OlByaXZh
dGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVHZW5lcmljOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUsCisgICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAgICAgIGlmIChm
b3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3Bl
cnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFiYXNlLT5zdHJ1Y3R1
cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5jZSgpKSkKKyAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgaWYgKHdhc0Zv
dW5kKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAKKyAg
ICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsK
KyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAg
ICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9
IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRl
bXB0VG9DYWNoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAgICAgICAg
ICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNo
ZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgJiYgc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAg
ICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOworICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmco
Z2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3Rh
dHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAgICAgICAgICBpZiAo
Y2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9i
amVjdCwgYmFzZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNj
ZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0
dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByb3RvdHlw
ZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0
ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xv
dC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNl
dCgpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBw
cmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworCisgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsK
KyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0No
YWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJv
dG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAgICAgIGNvbmRpdGlvblNl
dCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAgICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7
CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKKworICAgICAg
ICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3ND
YXNlOjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQgPyBzbG90LmNhY2hlZE9mZnNldCgp
IDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90
eXBlQWNjZXNzQ2hhaW4pKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwg
cHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0Lmdl
bmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBs
YWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNl
KCkgPT0gYmFzZSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgp
KTsKKyAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQorICAgICAgICAgICAg
ICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJT
dHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNh
Y2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCit7
CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh0cnlDYWNoZUluQnkoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQsIHNs
b3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7CisgICAgICAgIExPR19JQygo
SUNFdmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VPYmplY3QtPmNsYXNzSW5mbyhnbG9i
YWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlk
KCkpKSk7CisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
YXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICB9Cit9CisKK3N0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENh
Y2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAg
ICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2Ut
PnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0
aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2Fj
aGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAgICAgIGJvb2wgaXNCYXNlUHJv
cGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAg
ICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywg
YnJhbmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7IH0sIHsgfSk7CisKKyAgICAgICAg
cmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwor
CisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQo
dm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNo
b3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwor
dm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRl
bnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwor
CisgICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2Fj
aGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAgICAgIGlmIChmb3JjZUlD
RmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwor
CisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJh
c2UpOworICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAgICAg
cmV0dXJuIGFjdGlvbjsKKworICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKKyAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZEFkZEFjY2Vzc0Nhc2UsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOworCisgICAgICAg
IFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlQ2hlY2tQcml2YXRl
QnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0dXJlKTsKKworICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7CisKKyAg
ICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVy
biByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxh
dGVyOworfQorCit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKwor
ICAgIGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVj
a1ByaXZhdGVCcmFuZEdlbmVyaWMpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVTZXRQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50
aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgeworICAgICAgICBHQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAg
ICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlKTsK
KworICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0
aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0
ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworICAgICAgICAKKyAgICAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnNldEJyYW5kVHJhbnNpdGlv
bkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGJyYW5kSUQu
dWlkKCkpOworICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIEFTU0VSVChuZXdT
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQo
bmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpTZXRCcmFu
ZCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAgICAgICAK
KyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIExPR19JQygoSUNF
dmVudDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9j
aywgYnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOworCisgICAgICAgIHJlc3Vs
dCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAg
ICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNo
ZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVj
dCogYmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZp
ZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKworICAgIGlmICh0cnlDYWNoZVNl
dFByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3Ry
dWN0dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUlu
c3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFsdWUuaXNDZWxsKCkpOyAvLyBz
aG91bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2VsbHMuCisgICAgCisgICAgaWYgKGZv
cmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworICAgIAorICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAKKyAgICAgICAgSlNDZWxsKiB2YWx1ZSA9
IHZhbHVlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFs
dWUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwor
ICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZt
LCBwcm90b3R5cGVWYWx1ZSk7CisgICAgICAgIGlmIChwcm90b3R5cGUpIHsKKyAgICAgICAgICAg
IGlmICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsIHN0cnVj
dHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKKyAgICAgICAgICAgICAgICAgICAg
cHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVR
dWVyaWVzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGVhY2gg
dGhpcyB0byBkbyBwb2x5IHByb3RvLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKKyAgICAgICAgICAgICAgICBwcmVwYXJl
Q2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUsIHdhc0ZvdW5kID8gcHJvdG90eXBl
IDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKKyAgICAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3Rv
dHlwZSwgd2FzRm91bmQpOworCisgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZBY2Nlc3ND
YXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mSGl0
IDogQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCisgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2FzZSkK
KyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hlYWJsZUlkZW50aWZpZXIoKSk7Cisg
ICAgICAgIAorICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZBZGRBY2Nlc3NDYXNl
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgCisgICAg
ICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBXVEZNb3ZlKG5ld0Nhc2Up
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewor
ICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVwbGFjZVdpdGhKdW1wLCBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZmlyZVdhdGNo
cG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3Vs
dCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9u
Q2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIGlmICh0cnlDYWNoZUluc3RhbmNlT2Yo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUsIHByb3RvdHlwZVZhbHVlLCBzdHVi
SW5mbywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwor
fQorCit2b2lkIGxpbmtEaXJlY3RDYWxsKAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCit7CisgICAgQVNT
RVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisKKyAgICBWTSYgdm0gPSBjYWxsZXJD
b2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQo
KSk7CisgICAgY2FsbExpbmtJbmZvLnNldENvZGVCbG9jayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBq
c0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjYWxsZWVDb2RlQmxvY2spKTsKKyAgICBpZiAoc2hv
dWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCisgICAgICAgIGRhdGFMb2co
IkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxM
aW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9j
ayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CisKKyAgICBjYWxsTGlua0lu
Zm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihj
b2RlUHRyKSk7CisKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICBjYWxsZWVDb2Rl
QmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAmY2FsbExpbmtJbmZvKTsKK30KKwor
dm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKK30KKwor
c3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIGRhdGFMb2dMbklmKHNob3Vs
ZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spLAorICAgICAgICAiTGlua2luZyB2
aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJG
cmFtZS0+Y29kZU9yaWdpbigpKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxM
aW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZp
cnR1YWxUaHVuayk7CisgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeVZpcnR1YWwoKTsKK30K
KworbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRyIHsKKyAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29k
ZVB0cjsKK307Cit9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENhbGxWYXJpYW50IG5ld1ZhcmlhbnQpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSk7CisKKyAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIC8vIER1cmluZyBleGVjdXRpb24gb2Yg
bGlua1BvbHltb3JwaGljQ2FsbCwgd2Ugc3Ryb25nbHkgYXNzdW1lIHRoYXQgd2UgbmV2ZXIgZG8g
R0MuCisgICAgLy8gR0MgamV0dGlzb25zIENvZGVCbG9ja3MsIGNoYW5nZXMgQ2FsbExpbmtJbmZv
IGV0Yy4gYW5kIGJyZWFrcyBhc3N1bXB0aW9uIGRvbmUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGNh
bGwuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDRm9yQVdoaWxlKHZtKTsKKyAgICAKKyAg
ICBpZiAoIW5ld1ZhcmlhbnQpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFt
ZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE91ciBj
YWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAg
IC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAg
QVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKKyAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICBib29sIGlz
V2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5h
c0NlbGwoKSk7CisKKyAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEg
dmFsaWQgQ29kZUJsb2NrLgorICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5ID8gd2Vi
QXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29k
ZUJsb2NrOworICAgIEFTU0VSVChvd25lcik7CisKKyAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsK
KyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8u
c3R1YigpKQorICAgICAgICBsaXN0ID0gc3R1Yi0+dmFyaWFudHMoKTsKKyAgICBlbHNlIGlmIChK
U09iamVjdCogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZSgpKQorICAgICAgICBsaXN0
ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZhcmlhbnQob2xkQ2FsbGVlKSB9OworICAgIAorICAg
IGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3QsIG5ld1ZhcmlhbnQpOworCisgICAg
Ly8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNhbGxzIHRoZW4gaXQgbWFrZXMgc2Vuc2UgdG8g
dHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBjYWxscy4KKyAgICAvLyBUaGlzIG1ha2VzIHN3
aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQgYWxzbyBwcm9kdWNlcyBwcm9maWxpbmcgdGhh
dCdzIGVhc2llciBvbiB0aGUgREZHOworICAgIC8vIHRoZSBERkcgZG9lc24ndCByZWFsbHkgd2Fu
dCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBvZiBjbG9zdXJlIGFuZCBub24tY2xvc3VyZSBj
YWxsZWVzLgorICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZhbHNlOworICAgIGZvciAoQ2FsbFZh
cmlhbnQgdmFyaWFudCA6IGxpc3QpICB7CisgICAgICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNh
bGwoKSkgeworICAgICAgICAgICAgbGlzdCA9IGRlc3BlY2lmaWVkVmFyaWFudExpc3QobGlzdCk7
CisgICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChpc0Nsb3N1cmVDYWxsKQorICAgICAgICBj
YWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1cmUoKTsKKyAgICAKKyAgICBWZWN0b3I8UG9seW1v
cnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOworICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlVmFsdWVz
OworICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIgY2FzZXMgYXJlLgorICAgIGZvciAo
Q2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBudWxscHRyOworICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkgJiYgIXZhcmlh
bnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpOworICAgICAgICAgICAg
Y29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jb2Rl
QmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICAvLyBJZiB3ZSBjYW5ub3QgaGFuZGxlIGEgY2Fs
bGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgQ29kZUJsb2NrIG9yIGJlY2F1c2Ug
YXJpdHkgbWlzbWF0Y2gsCisgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGJldHRlciBm
b3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhIHZpcnR1YWwgY2FsbC4KKyAgICAgICAgICAgIGlm
ICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8
IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxM
aW5rSW5mby5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZt
LCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBuZXdDYXNlVmFsdWUgPSAw
OworICAgICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAgICAgICAgICAgbmV3Q2FzZVZhbHVl
ID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmV4ZWN1dGFibGUoKSk7CisgICAgICAg
ICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0
aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTMxMQorICAgICAgICAgICAgaWYgKCFuZXdDYXNlVmFs
dWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoYXV0byogZnVuY3Rpb24gPSB2YXJpYW50LmZ1bmN0aW9uKCkpCisgICAgICAgICAg
ICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90PihmdW5jdGlvbik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9j
YXN0PGludHB0cl90Pih2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgICAgIGlmIChjYXNlVmFsdWVz
LmNvbnRhaW5zKG5ld0Nhc2VWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJFUlJP
UjogQXR0ZW1wdCB0byBhZGQgZHVwbGljYXRlIGNhc2UgdmFsdWUuXG4iKTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJFeGlzdGluZyBjYXNlIHZhbHVlczogIik7CisgICAgICAgICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiBj
YXNlVmFsdWVzKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJB
dHRlbXB0aW5nIHRvIGFkZDogIiwgbmV3Q2FzZVZhbHVlLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJWYXJpYW50IGxpc3Q6ICIsIGxpc3REdW1wKGNhbGxDYXNlcyksICJcbiIpOwor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBjYWxsQ2FzZXMuYXBwZW5kKFBvbHltb3JwaGljQ2Fs
bENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7CisgICAgICAgIGNhc2VWYWx1ZXMuYXBwZW5kKG5l
d0Nhc2VWYWx1ZSk7CisgICAgfQorICAgIEFTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhc2VW
YWx1ZXMuc2l6ZSgpKTsKKworICAgIC8vIElmIHdlIGFyZSBvdmVyIHRoZSBsaW1pdCwganVzdCB1
c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgorICAgIHVuc2lnbmVkIG1heFBvbHltb3JwaGljQ2Fs
bFZhcmlhbnRMaXN0U2l6ZTsKKyAgICBpZiAoaXNXZWJBc3NlbWJseSkKKyAgICAgICAgbWF4UG9s
eW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxs
VmFyaWFudExpc3RTaXplRm9yV2ViQXNzZW1ibHlUb0pTKCk7CisgICAgZWxzZSBpZiAoY2FsbGVy
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAgICBt
YXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhp
Y0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVyKCk7CisgICAgZWxzZQorICAgICAgICBtYXhQ
b2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0Nh
bGxWYXJpYW50TGlzdFNpemUoKTsKKworICAgIC8vIFdlIHVzZSBsaXN0LnNpemUoKSBpbnN0ZWFk
IG9mIGNhbGxDYXNlcy5zaXplKCkgYmVjYXVzZSB3ZSByZXNwZWN0IENhbGxWYXJpYW50IHNpemUg
Zm9yIG5vdy4KKyAgICBpZiAobGlzdC5zaXplKCkgPiBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50
TGlzdFNpemUpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExp
bmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxDYWxsVG9Db2Rl
UHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4g
ZmFzdENvdW50czsKKworICAgIGlmICghaXNXZWJBc3NlbWJseSAmJiBjYWxsZXJDb2RlQmxvY2st
PmppdFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpIHsKKyAgICAgICAgZmFzdENvdW50
cyA9IG1ha2VVbmlxdWVBcnJheTx1aW50MzJfdD4oY2FsbENhc2VzLnNpemUoKSk7CisgICAgICAg
IG1lbXNldChmYXN0Q291bnRzLmdldCgpLCAwLCBjYWxsQ2FzZXMuc2l6ZSgpICogc2l6ZW9mKHVp
bnQzMl90KSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsTGlua0lu
Zm8uY2FsbGVlR1BSKCk7CisKKyAgICBib29sIGlzRGF0YUlDID0gY2FsbExpbmtJbmZvLmlzRGF0
YUlDKCk7CisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoY2FsbGVyQ29kZUJsb2NrKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4gZnJhbWVTaHVmZmxlcjsKKyAgICBp
ZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkgeworICAgICAgICBBU1NFUlQoY2Fs
bExpbmtJbmZvLmlzVGFpbENhbGwoKSk7CisgICAgICAgIGZyYW1lU2h1ZmZsZXIgPSBtYWtlVW5p
cXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZs
ZURhdGEoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgLy8gV2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbCwgYW5kIHdlIGNhbgor
ICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXIgdGhpcyBidXlzIHVzLgorICAg
ICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0NlbGwoKTsKKyNlbmRpZgorICAgICAg
ICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7CisgICAgfQorCisgICAgR1BSUmVn
IGNvbXBhcmlzb25WYWx1ZUdQUjsKKyAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAgICAgICBp
ZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IGZyYW1l
U2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFy
aXNvblZhbHVlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQ
Uik7CisgICAgfSBlbHNlCisgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IGNhbGxlZUdQUjsK
KworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVmZmxlcikK
KyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7
CisgICAgZWxzZSB7CisgICAgICAgIGZhc3RDb3VudHNCYXNlR1BSID0KKyAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1
ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIH0KKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3VudHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7
CisKKyAgICBpZiAoIWZyYW1lU2h1ZmZsZXIgJiYgY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkg
eworICAgICAgICAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhhdCBjYWxsZWVHUFIgaXMgbm90IGEg
Y2FsbGVlIHNhdmUgcmVnaXN0ZXIgaW4gdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgQVNTRVJUKCFj
YWxsZXJDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+ZmluZChjYWxsZWVHUFIpKTsK
KyAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgfQorCisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBpZiAoaXNDbG9zdXJlQ2FsbCkg
eworICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVuY3Rpb24gYW5kIHN0YXNoIHRo
ZSBleGVjdXRhYmxlIGluIHNjcmF0Y2hHUFIuCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
aWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpCisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQu
YnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUikpOworI2Vsc2UKKyAgICAgICAgLy8gV2Ugd291bGQg
aGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyNlbmRpZgor
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBwYXRoIGZvciBJbnRlcm5hbEZ1
bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1Ykpp
dC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOworCisgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBjb21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBh
dXRvIGhhc0V4ZWN1dGFibGUgPSBzdHViSml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpa
ZXJvLCBjb21wYXJpc29uVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoY29tcGFyaXNvblZhbHVlR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
ZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgY29tcGFyaXNvblZhbHVl
R1BSKTsKKyAgICAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZzdHViSml0KTsKKyAgICB9CisKKyAg
ICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1ZUdQUiwgY2FzZVZhbHVl
cywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9u
ZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoc3R1YkppdCkpIHsKKyAgICAgICAg
c2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKTsKKyAgICAgICAgCisg
ICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNbY2FzZUluZGV4XS52YXJpYW50
KCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0cjsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpKSB7CisgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0s
IGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSwgdmFyaWFudC5mdW5jdGlvbigpKTsK
KyAgICAgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAgICAgICBjb2RlUHRyID0gdmFy
aWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JD
YWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkpOworICAgICAgICAgICAgY29kZVB0
ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVGb3JDYWxsKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZhc3RDb3VudHMpIHsKKyAgICAgICAg
ICAgIHN0dWJKaXQuYWRkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGZhc3RDb3Vu
dHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG5lZWRzRG9uZUp1bXAgPSBmYWxzZTsKKyAgICAgICAgaWYgKGZyYW1lU2h1
ZmZsZXIpIHsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKHN0dWJKaXQsIGZyYW1lU2h1
ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICAgICAgY2Fs
bHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgfSBl
bHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBzdHViSml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0u
Y2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoaXNEYXRhSUMpCisgICAgICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxs
ID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKKyAgICAg
ICAgICAgICAgICBuZWVkc0RvbmVKdW1wID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIgPSBjb2RlUHRyOworICAgICAgICBp
ZiAobmVlZHNEb25lSnVtcCkgeworICAgICAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CisgICAg
ICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CisgICAgYmluYXJ5U3dpdGNoLmZhbGxU
aHJvdWdoKCkubGluaygmc3R1YkppdCk7CisKKyAgICBpZiAoZnJhbWVTaHVmZmxlcikgeworICAg
ICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7CisgICAgICAgIGZyYW1l
U2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKKyAgICAgICAgZnJhbWVT
aHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1
ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKSk7CisjZWxzZQorICAgICAgICBm
cmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpy
ZWdUMCkpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnByZXBhcmVGb3JTbG93UGF0
aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUklu
Zm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJl
Z1QxKTsKKyNlbmRpZgorICAgIH0KKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBzdHViSml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpy
ZWdUMik7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0YUlDLCBsaW5rUmVnaXN0ZXIgaXMg
bm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAgLy8gMi4gSWYgaXQgaXMgdGFpbC1j
YWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24gZm9yIHNs
b3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0byBwdXQgaXQgZm9yIHRoZSBzbG93
LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAgICAgIHN0dWJKaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVu
dGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgc3R1
YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlDKTsKKyAgICAgICAgaWYgKGNhbGxM
aW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6OnJldHVybkZyb21CYXNlbGlu
ZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86
OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9CisgICAgfQorCisgICAgQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5s
aW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKHBhdGNoQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFt
ZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7CisgICAgZm9yIChD
YWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgeworI2lmIENQVShBUk1fVEhVTUIy
KQorICAgICAgICAvLyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcgZW5zdXJlcyBwcm9wZXIgbGlu
a2luZyBvbiBBUk0gVGh1bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBqdW1wcyB0byBhbiBhZGRyZXNz
CisgICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9ybWFs
IGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCisgICAg
ICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0NhbGxI
ZWxwZXJzOjpDYWxsOjpUYWlsKTsKKyAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWlsQ2FsbCA/
IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQdHIuY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxU
b0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0
KSkpOworI2Vsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGws
IEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOworI2Vu
ZGlmCisgICAgfQorCisgICAgaWYgKCFkb25lLmVtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFp
c0RhdGFJQyk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmRv
bmVMb2NhdGlvbigpKTsKKyAgICB9CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWND
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIAorICAgIGF1dG8gc3R1YlJvdXRpbmUg
PSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5B
TElaRV9DT0RFX0ZPUigKKyAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIs
IEpJVFN0dWJSb3V0aW5lUHRyVGFnLAorICAgICAgICAgICAgIlBvbHltb3JwaGljIGNhbGwgc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCisgICAgICAgICAgICAgICAg
aXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9j
aykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSkuZGF0YSgp
KSwKKyAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCksIGNhbGxMaW5r
SW5mbywgY2FsbENhc2VzLAorICAgICAgICBXVEZNb3ZlKGZhc3RDb3VudHMpKSk7CisKKyAgICAv
LyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMsIGJ1dCBz
dGlsbAorICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwgY2FsbGVl
IHdpbGwgYWx3YXlzCisgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCisgICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbyk7CisKKyAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBhIHByZXZp
b3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUgR0MgcnVu
cyBhbmQgc2VlcworICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCisgICAgY2Fs
bExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOworICAgIAorICAgIC8vIFRo
ZSBjYWxsIGxpbmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2FsbCBjYWNoZSBhcGFydCBmcm9tIHRo
ZSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsCisgICAgLy8gc3R1Yi4KKyAgICBpZiAoY2Fs
bExpbmtJbmZvLmlzT25MaXN0KCkpCisgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKK30K
Kwordm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihr
aW5kKSk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Cisg
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKKyAgICBjYXNlIEdldEJ5S2luZDo6VHJ5
QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKKyAgICBjYXNlIEdldEJ5S2lu
ZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVt
cEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdldEJ5S2luZDo6QnlWYWw6CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgorICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQoreworICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUo
Jm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgIEZ1bmN0aW9u
VHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+
KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2Ug
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUp
CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAg
IHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWlu
dGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ss
IHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAg
IG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmljIHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXpl
KQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFNldFBy
aXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2Vu
ZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICB9CisKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQoreworICAg
IGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOworICAg
IGVsc2UKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
Cit9CisKK3ZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24o
a2luZCkpOworICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQorICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAg
IGVsc2UKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCit2b2lkIHJlc2V0SGFz
UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOworfQorCit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKKyAgICBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uQ2hlY2tQcml2
YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCit2b2lk
IHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNj
ZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8pOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45M2EwMzY1MzI2YWJm
YmVkZWUwNTc1ODljNDU0MDliMmViMzY1ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApAQCAtMCwwICsxLDg5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiQ2FsbFZhcmlh
bnQuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbzsKKworZW51bSBjbGFzcyBHZXRCeUtpbmQgeworICAgIEJ5SWQsCisg
ICAgQnlWYWwsCisgICAgVHJ5QnlJZCwKKyAgICBCeUlkV2l0aFRoaXMsCisgICAgQnlJZERpcmVj
dCwKKyAgICBQcml2YXRlTmFtZSwKKyAgICBQcml2YXRlTmFtZUJ5SWQsCit9OworCitlbnVtIGNs
YXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisKK2VudW0gY2xhc3Mg
RGVsQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsCit9OworCitlbnVtIGNsYXNzIEluQnlL
aW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorICAgIFByaXZhdGVOYW1lCit9OworCit2b2lk
IHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1
ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXBhdGNo
R2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5S2lu
ZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtp
bmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQsIFB1dEtpbmQpOwor
dm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBEZWxldGVQ
cm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNoSW5C
eShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBJbkJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmpl
Y3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2Fz
Rm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJh
bmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50
aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIENhY2hl
YWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hJbnN0YW5j
ZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBw
cm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNGb3VuZCk7Cit2b2lkIGxpbmtN
b25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4p
Owordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxv
Y2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBsaW5rU2xv
d0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgdW5saW5rQ2FsbChWTSYsIENh
bGxMaW5rSW5mbyYpOwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwordm9pZCByZXNldEdldEJ5
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsKK3ZvaWQgcmVzZXRQ
dXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCk7Cit2b2lkIHJl
c2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQpOwordm9p
ZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7Cit2
b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
Cit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
dm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
Jik7Cit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7Cit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqLCBDb2RlTG9j
YXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0
KiBjYWxsZWUpOworCisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZWZlN2IxYjMzNzY0
YmRmNDJiMmU0ZjAyZDRkZjBjZDllODFjNDllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmgKQEAgLTAsMCArMSwyMTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlJlcGF0Y2guaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBT
bG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjYWxsZWVGcmFt
ZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOworCisgICAgaWYgKGNhbGxMaW5rSW5mby0+c3BlY2lh
bGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgYXV0byBjYWxsRGF0YSA9
IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOworICAgICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSAh
PSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgICAgIGlmIChjYWxsRGF0YS50eXBlID09IENh
bGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRD
YWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxS
ZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5n
bG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAgICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgICAgICAg
ICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
ZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZh
bHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBD
YWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25l
KTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90
QUZ1bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKKyAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCgKKyAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgfQorCisgICAgQVNTRVJUKGNh
bGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisK
KyAgICBhdXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1Y3REYXRhKHZtLCBjYWxsZWUpOwor
ICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6OkpTKTsKKwor
ICAgIGlmIChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2ZSkgewor
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsZWVGcmFtZSk7Cisg
ICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAg
IHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUpOwor
ICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAg
ICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRh
OjpUeXBlOjpOb25lKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBj
cmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKK30KKworQUxXQVlTX0lOTElORSBTbG93
UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKK3sKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNh
bGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsTGlu
a0luZm8tPmlzRGlyZWN0KCkpOworCisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gY2FsbGVl
RnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKCFjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkgeworICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIg
PSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CisKKyAgICAgICAgICAgIGlmICghY2FsbExp
bmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2Vl
bigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpbmtNb25vbW9ycGhpY0Nh
bGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0
aW9uLCBjb2RlUHRyKTsKKworICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0ID0gY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChs
aW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1v
ZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsK
KyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxl
SG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExp
bmtJbmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVu
Y3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxs
ZWUtPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBj
YWxsZWUtPmV4ZWN1dGFibGUoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKKyAg
ICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgICAgICBjb2RlUHRyID0g
anNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7CisgICAgICAgIGlmICghY29kZVB0
cikKKyAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQs
IE11c3RDaGVja0FyaXR5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpOworCisgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0g
KCkgeworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAg
ICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9OworCisgICAgICAgIGlmICghaXNDYWxs
KGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgeworICAgICAgICAgICAgdGhyb3dFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihn
bG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhj
ZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90
ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBmdW5jdGlvbkV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgY2Fs
bGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOworCisgICAgICAgIGNv
ZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OworICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKKwor
ICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKKyAgICAgICAgaWYgKGNhbGxlZUZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLT5pc1ZhcmFyZ3MoKSkKKyAgICAg
ICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRyID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKKyAgICB9CisKKyAgICBp
ZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRT
ZWVuKCk7CisgICAgZWxzZQorICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVG
cmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOworCisgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFp
bCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKworQUxXQVlTX0lOTElORSBT
bG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCit7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0lu
Zm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVG
cmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxG
dW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwor
ICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBD
YWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAg
fQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwo
Z2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7
CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5z
Y29wZVVuY2hlY2tlZCgpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rp
b24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENv
ZGVGb3Ioa2luZCkpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVj
dXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisK
KyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7CisgICAgICAgICAg
ICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rp
b25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgZnVu
Y3Rpb24pKTsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpOworICAg
ICAgICB9CisKKyAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGNhbGxlZUZyYW1l
LT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKKyAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVw
YXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGZ1bmN0aW9uLCBzY29wZSwg
a2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOworICAgIH0KKyAgICAvLyBGSVhNRTogU3Vw
cG9ydCB3YXNtIElDLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjAzMzkKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3IoCisgICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygp
LAorICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2Rl
KCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggMGQxOWUyNzkwNTZlNWYzN2U3NzFj
NWM0OWEyZGIwZTZjMmQ4NDhkNy4uYWM1NzEyN2JjZjg5MDcyYmUwMzg0MTZkYTEzOWI0MWYxNjRh
ZTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCkBAIC00MDMsNyArNDAzLDYgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyh1bnNpZ25lZCBudW1CaW5hcnlBcml0aFByb2ZpbGVz
LAogCiAjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFk
YXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FS
UkFZX1BST0ZJTEUoQ09VTlQpCi0gICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NB
TExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAgICAgICAgIG51bWJlck9mQXJyYXlQ
cm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0b3JOZXh0PigpOwogICAg
ICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEdl
dEJ5SWQ+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCmluZGV4IDQwMzk0YTk0Mzk5Mjk5M2Y1NDVhMmFjNjJjZjZlZGMwOWRmNTU1
ZmEuLjFjNTkwNDJlMGQwYzM4MTFiM2M5YmUyMTU4Y2RjNTRjMDFkYmI4MWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC03
NSw3ICs3NSw2IEBAIGNsYXNzIENhY2hlZENvZGVCbG9jazsKIAogdHlwZWRlZiB1bnNpZ25lZCBV
bmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2Vk
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci10eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkTExJbnRD
YWxsTGlua0luZm87CiAKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSB7CiAgICAgc3Ry
dWN0IE9mZnNldExvY2F0aW9uIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcAppbmRleCA1YzcyMDU4ZGNmMjE5NjBkY2Y4NTNlMGE5MmMyN2U4OWEyZDU2
YmVlLi41ZTMyZDJkMjRmMWIzZWQ4NzBjMzMwZjJlZjIzZDg1ZTRlY2U0ODM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0zMTUsNiArMzE1
LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQs
IENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBsbGludF9uYXRpdmVfY29u
c3RydWN0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxs
X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3Rf
dHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lOgorICAgIGNh
c2UgbGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFs
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVhbF90YWlsX2NhbGxf
dHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2dldF9ob3N0X2NhbGxfcmV0dXJuX3ZhbHVlOgog
ICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbjoKICAgICBjYXNlIGNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToKQEAgLTMyNSw2ICsz
MjksOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlE
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4
dF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX3JldHVybl9sb2NhdGlvbjoKICAg
ICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3NfcmV0
dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0
aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246
CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgpAQCAtMzM1LDcgKzM0MSw2
IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Rfc2xvd19y
ZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Nsb3dfcmV0dXJuX2xv
Y2F0aW9uOgogICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlvbjoK
LSAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF90YWls
X2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF90YWlsX2NhbGxf
dmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKQEAgLTM0Myw4ICszNDgsOSBAQCBDYXBhYmls
aXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZToKICAgICBj
YXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgogICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jYWxsOgotICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGw6CiAgICAgY2Fz
ZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
Y2FsbF92YXJhcmdzOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJn
czoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dDoKICAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3Bf
Y2FsbF9zbG93OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGI0NTFjZGI2MWY3YTExYjMzMDJjMTg1YzY2YmZm
MTdhOWZkYmUwOWYuLmU3MjJmOWViZGFjYzg5MzY5MDY1NmQ1YjYzZTlmNjI0NDQ2MTVmNDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKQEAgLTE2NiwxMCArMTY2LDEwIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNv
CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0
cnVjdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6
OkNhbGxWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJ
TlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJh
cmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElP
TihvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsKICAgICAgICAgICAgIGlmIChjYWxsSW5z
dHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlfaWQpCkBAIC0yMDEsMTAgKzIwMSwxMiBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVy
blBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6
Q29uc3RydWN0OgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CiAg
ICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOiB7Ci0gICAgICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9Ci0gICAgICAgICAgICAgICAgYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2Fs
bEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBudWxscHRyOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1fbG9jayk7CisgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBjYWxsQnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwot
CiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5kb25lTG9jYXRpb24oKS5y
ZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCmluZGV4IDk1NmQ2OTQwZTdkMjBiODIwMmYyNTUzZWM1ZmU3MGI3ZThlOWU2MGEuLmU2
MWY4OTRiZTEwOGNjYmZhMTJkYjIwODkyOWVjZGUyYzNkZjBmMjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtODQ3
LDEwICs4NDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChj
YWxsU2l0ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGluZm8tPmVtaXREaXJlY3RUYWls
Q2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAg
ICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CiAKICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKQEAgLTg5Miw3ICs4
OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogCiAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAg
ICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVl
UGF5bG9hZEdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsm
XXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKQEAgLTkwMCw3ICs5MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQ
UiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXgg
MGZlN2E3OTA5MTVhNzI0ZjRlMWZmYmQ5NmJhMTRlN2E4NWNiOGM3OS4uNzcwNzNmMzRhZmJmZGY5
NWZlNTgyNWEzYzg5ODljMzIyM2RkYWE1YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC05MzgsMTAgKzkzOCwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgSklUQ29t
cGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIG1faml0
LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogCi0gICAgICAgICAgICBjYWxsTGlu
a0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgc2NvcGVk
TGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJh
bWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBAIC05ODEsNyArOTgxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAKICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNh
bGxlZUdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17
CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAg
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKQEAgLTk4OSw3ICs5ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQYXRoKG1faml0LCBj
YWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCBlMWM4MmRmODgzNDE0OTE5
ODRiMDk4MzgxYjgwZDVlYTM2NzJkNmViLi4wMThhMmY4NThmNDIxMWQzODdiNDJiNjkyZTI1YjUx
ODYxYmU0Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCkBAIC0xMDQwMywxMCArMTA0MDMsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3Rl
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChqaXQs
IFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAg
ICAgICAgICAgICAgICAgICAgIApAQCAtMTA1NTksMTAgKzEwNTU5LDEwIEBAIElHTk9SRV9DTEFO
R19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwog
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFp
bENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQo
KT4oWyZdewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9KSk7CiAKICAgICAgICAgICAgICAgICBzbG93UGF0aC5s
aW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5sYWJl
bCgpOwpAQCAtMTA5MDIsMTAgKzEwOTAyLDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0geworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAo
KTsKQEAgLTExMTgzLDEwICsxMTE4MywxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXgg
YzhjYmJlZTA2YmY3ZDY2NjJjMTlhNGE0YThhMThjMjFjZWZkM2Y3Mi4uZTY0NTg1MzFlYmM5MDRk
ZTVkZDA0Y2UzYWJhNTNjNWJkM2M3MGIwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNzQ1LDE4ICs3NDUsMTggQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwoR1AKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAg
ICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBlbWl0Vmly
dHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBHUFJJbmZvOjpyZWdUMiwgaW5m
by0+Y2FsbE1vZGUoKSk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQor
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3QoVk0mIHZtLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZSBjYWxsTW9kZSkK
IHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBt
b3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5l
YXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CiAgICAgICAgIGxpbmtCdWZmZXIu
YWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soWz0sICZ2bV0gKCkgewotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsg
PSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKLSAgICAgICAgICAgIGluZm8tPnNldFNsb3dT
dHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1bmspKTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmly
dHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbE1vZGUpOwogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFsVGh1bmsuY29kZSgpKSk7CiAgICAg
ICAgIH0pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKaW5kZXggNjVkZDhlZGVmNzQ3OTk2ZDVmNmQ4ZjE5MjQ2ZTZhZDkzMzZkNDczOC4uYTQ0
YWE1Y2Y5NTRmMmMxNjU0NzllYzJkY2Q5MjNkNWZmNGYzZDFmOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xNzUyLDcgKzE3NTIsNyBAQCBjbGFz
cyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXIgewogICAgIH0KICAgICAK
ICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJ
bmZvKik7Ci0gICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0
KFZNJiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KFZNJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgQ2FsbE1vZGUpOwog
ICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNs
YWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUQ29kZS5oCmluZGV4IDE1ODk2MDNmMTQ5YzI3NmMzNTllN2JiMjZkNjRmNGQ4NTcy
N2YxNTAuLjMwMDNiMDczNTAxODhlNWY3M2ZjYzk2NzIwZDZhOWU3NDFmOGJjYjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaApAQCAtNjIsNyArNjIsNiBA
QCBjbGFzcyBKSVRDb25zdGFudFBvb2wgewogCiAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhf
dCB7CiAgICAgICAgIEdsb2JhbE9iamVjdCwKLSAgICAgICAgQ2FsbExpbmtJbmZvLAogICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbywKICAgICAgICAgRnVuY3Rpb25EZWNsLAogICAgICAgICBGdW5j
dGlvbkV4cHIsCkBAIC05Myw3ICs5Miw2IEBAIGNsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1Ymxp
YyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICB+QmFzZWxpbmVKSVRD
b2RlKCkgb3ZlcnJpZGU7CiAgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFw
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogCi0gICAg
QmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKICAgICBGaXhlZFZlY3RvcjxV
bmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwogICAgIEZpeGVkVmVjdG9yPFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CiAgICAgRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCmluZGV4IGNmMTVj
ZTE5OWVkMzc2YWYxNTBlODg3ZjNlZWQwMmZhMTVkYzdiMmEuLjUwMmY5YTA3MjFkZjFlMzEwNzhm
Njk5YTNjZWVkZjUyOTc4OTIxYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoSklUKQogCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKIApAQCAtODIsNiArODMs
MzcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KgogICAgIH0KIH0KIAorQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxD
YWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKQor
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpT
UiB7IEdQUkluZm86OnJlZ1QwIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDAgfTsKKyNlbmRpZgorICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOworICAg
IHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZs
ZURhdGEubnVtUGFyYW1ldGVycyA9IG51bVBhcmFtZXRlcnM7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyOworI2VuZGlmCisgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gYnl0ZWNvZGUubV9h
cmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBz
aHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgeworICAgICAgICBzaHVmZmxlRGF0
YS5hcmdzW2ldID0KKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFj
aygKKyAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsK
KyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1
ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOwor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJl
Y292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigp
KTsKKyNlbmRpZgorICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVn
aXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
ICAgIHNodWZmbGVEYXRhLnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHNodWZmbGVEYXRhOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKaW5kZXggMzM2
NTdlMzNhNjRmMzc4MWY0MzA5OThjMTMzMzcxYTFhYTY0Yjc1YS4uMGJjMTliOTlkNjFlNGJjYmI3
MTllYTlmY2MxYmM4YzM3ZmJmZWM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaApAQCAtMzIsNiArMzIsOCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorc3RydWN0IE9wVGFpbENhbGw7CisKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0
YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC00MCw2ICs0Miw4
IEBAIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSB7CiAgICAgICAgIGFyZ3Muc2hyaW5rVG9G
aXQoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgY3JlYXRlRm9y
QmFzZWxpbmVPckxMSW50VGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYsIHVuc2lnbmVkIG51bVBh
cmFtZXRlcnMpOworCiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWdu
ZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsg
VUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA5Mjk0MjQ2MDczNDAw
OTExYjZjMzU3Yzc4YTRhMGM2YTc0ZTlhYWQ0Li4yOGFlNmY3NzBkZGFjZDcxYzZmMTgyYzlkMTc5
ZmQxY2NlYjhkZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMDEsMTIgKzEw
MSw5IEBAIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rCiAgICAgcmV0dXJuIHN0ZDo6dHVwbGUgeyBz
dHViSW5mbywgc3R1YkluZm9JbmRleCB9OwogfQogCi1zdGQ6OnR1cGxlPFVubGlua2VkQ2FsbExp
bmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxpbmtlZENhbGxM
aW5rSW5mbygpCitVbmxpbmtlZENhbGxMaW5rSW5mbyogSklUOjphZGRVbmxpbmtlZENhbGxMaW5r
SW5mbygpCiB7Ci0gICAgdm9pZCogdW5saW5rZWRDYWxsTGlua0luZm9JbmRleCA9IGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihtX3VubGlua2VkQ2FsbHMuc2l6ZSgp
KSk7Ci0gICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSAmbV91bmxpbmtlZENhbGxzLmFs
bG9jKCk7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9JbmRleCA9
IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCB1
bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4KTsKLSAgICByZXR1cm4gc3RkOjp0dXBsZSB7IGluZm8s
IGNhbGxMaW5rSW5mb0luZGV4IH07CisgICAgcmV0dXJuICZtX3VubGlua2VkQ2FsbHMuYWxsb2Mo
KTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTAxMCw3ICsxMDA3LDYgQEAgdm9pZCBK
SVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gRml4ZWRWZWN0b3I8
VW5saW5rZWRDYWxsTGlua0luZm8+KG1fdW5saW5rZWRDYWxscy5zaXplKCkpOwogICAgIGlmICht
X2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpCiAgICAgICAgIHN0ZDo6bW92ZShtX3Vu
bGlua2VkQ2FsbHMuYmVnaW4oKSwgbV91bmxpbmtlZENhbGxzLmVuZCgpLCBtX2ppdENvZGUtPm1f
dW5saW5rZWRDYWxscy5iZWdpbigpKTsKLSAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5m
b3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogICAgIG1faml0Q29kZS0+bV91bmxp
bmtlZFN0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+KG1f
dW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKICAgICBpZiAobV9qaXRDb2RlLT5tX3VubGlua2Vk
U3R1YkluZm9zLnNpemUoKSkKICAgICAgICAgc3RkOjptb3ZlKG1fdW5saW5rZWRTdHViSW5mb3Mu
YmVnaW4oKSwgbV91bmxpbmtlZFN0dWJJbmZvcy5lbmQoKSwgbV9qaXRDb2RlLT5tX3VubGlua2Vk
U3R1YkluZm9zLmJlZ2luKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggZGUyYzVjZTc3
MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlhMS4uNjdiNDNkOGZhMzBiNzJjYmQ0OTQ0NjIy
OGM2NDI5NjRmM2QzMzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0xNTMsNyArMTUz
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwogICAgICAgICBVbmxp
bmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87Ci0gICAgICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZv
aWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMjk0LDE2ICsyOTMs
MTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAg
ICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAgICAs
IHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
LSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAgICAsIHZvaWQ+IGNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxs
TGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzA2LDYgKzcwNSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFt
ZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CiAgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihWTSYp
OworCisgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAg
Ly8gVGh1bmsgZ2VuZXJhdG9ycy4KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Io
Vk0mKTsKQEAgLTcyMSw3ICs3MjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19o
YW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hh
bmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogCiAgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKQpAQCAtOTU4LDcgKzk2MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgYWRkVG9Db25zdGFudFBvb2wo
SklUQ29uc3RhbnRQb29sOjpUeXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cik7CiAgICAgICAg
IHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQ+IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKLSAgICAgICAgc3RkOjp0
dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IGFk
ZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBh
ZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCkBAIC0xMDI5LDcgKzEwMzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBWZWN0b3I8SklUQ29uc3RhbnRQb29sOjpWYWx1ZT4gbV9jb25zdGFudFBvb2w7CiAgICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAgICAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VW5saW5r
ZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9y
PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CiAgICAgICAg
IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZlMTAyYjVkZmJm
YTJiZTRmZTE3MzE5N2UyYi4uOGY5MDkwMWQ4MzZmMTM4NTk3NmNjMDE3ODkxNzUyNzhkNTU4MzNl
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01OSwxNyArNTksMjEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVHUFIgKHJldHVy
blZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwotCi0jaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0g
ICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1Yihv
cF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgorICAgIGVtaXROYWtlZE5l
YXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNvZGUo
KSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpyZXR1
cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisK
KyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
IGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9y
ZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0
UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC04NCw3ICs4OCw3IEBAIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlz
ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwpA
QCAtOTcsNyArMTAxLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1IpOwogICAgICAgICBKdW1wIGRvbmUgPSBi
cmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3ModG1wSlNSLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdG1wR1BSKTsKLSAgICAg
ICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7
CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFz
dFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApA
QCAtMTEwLDcgKzExNCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09
IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
ICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzOwpAQCAtMTYwLDcgKzE2NCw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mCiAK
ICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAg
ICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZD
YWxsTGlua0luZm8oKSwgcmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlu
a0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsK
ICAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKICAg
ICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwpAQCAtMjAzLDY0ICsyMDcsMzkgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxM
aW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVn
VDApOwotCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKIAogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKIAogICAgIGxvYWRWYWx1ZShBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSwgY2FsbGVlSlNSKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
LSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZv
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BDYWxsRXZhbDo6TWV0YWRh
dGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgY2FsbExpbmtJbmZvR1BS
LCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxS
ZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpj
b21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvQ29uc3RhbnQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwm
IGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZs
ZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOwotICAgIHNodWZmbGVE
YXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLT5u
dW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BS
SW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0jZW5kaWYKLSAgICBzaHVmZmxlRGF0YS0+bnVtTG9j
YWxzID0KLSAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
IC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNv
ZGUubV9hcmdjKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdj
OyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQotICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKLSAg
ICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1Iu
cGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50
YWdHUFIoKSwgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7Ci0jZW5kaWYKLSAgICBzaHVmZmxlRGF0
YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0KICAgICBjb25zdGV4cHIgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25z
dGFudCwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlu
a0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9h
ZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVy
IHNodWZmbGVyIHsgKnRoaXMsICpzaHVmZmxlRGF0YSB9OworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BUYWlsQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2Fs
bExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNS
LnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17
CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhID0gQ2FsbEZyYW1lU2h1
ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKGJ5dGVjb2RlLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOworICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlciBzaHVmZmxlciB7ICp0aGlzLCBzaHVmZmxlRGF0YSB9OwogICAgICAgICBzaHVmZmxlci5s
b2NrR1BSKGNhbGxMaW5rSW5mb0dQUik7CiAgICAgICAgIHNodWZmbGVyLnByZXBhcmVGb3JUYWls
Q2FsbCgpOwotICAgIH0pOworICAgIH0pKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwog
Ci0gICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7Ci0gICAgaW5mby0+ZnJhbWVTaHVmZmxl
RGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOwotCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9u
ZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjg4LDE3ICsyNjcsMTQgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmQKICAgICAqLwogCiAgICAgVW5saW5rZWRDYWxsTGlua0luZm8q
IGluZm8gPSBudWxscHRyOwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0
YW50ID0gVUlOVF9NQVg7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgewotICAg
ICAgICBzdGQ6OnRpZShpbmZvLCBpbmZvQ29uc3RhbnQpID0gYWRkVW5saW5rZWRDYWxsTGlua0lu
Zm8oKTsKKyAgICAgICAgaW5mbyA9IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CiAgICAgICAg
IGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIGluZm8tPmNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CiAgICAgICAgIEFT
U0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsK
ICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZv
KCkpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVu
bGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsK
ICAgICB9Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7Cisg
ICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2Fs
bEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5p
dGlhbGl6ZWQuCiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLmJpdHMoKTsKQEAgLTMxNiwxNiArMjkyLDE2IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUpTUikpOwog
I2VuZGlmCiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlu
a0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVj
b2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENvbnN0YW50
KGluZm9Db25zdGFudCwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8o
KSwgY2FsbExpbmtJbmZvR1BSKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0g
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBb
Jl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5m
b0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhjYWxsTGlu
a0luZm9HUFIpOwotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aHMpOwogICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAg
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOwpAQCAtMzQ0LDE1ICszMjAsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmQKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQpCiB7CiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CisgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3BfY2FsbF9l
dmFsKTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKLSAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkNh
bGxMaW5rSW5mbygpLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwpAQCAtMzY2LDcgKzM0Myw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAKICAgICBy
ZXNldFNQKCk7CiAKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4MDM5ODM2Y2VlNmM3
YjM0ZmQyYzMwNC4uMmZlMjNjNDlmZDBmOTQwOTFmNjg2MDViNzU3YWUyY2UzMjIwMTRhMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0zNzAsMjEgKzM3MCw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKLXsKLSAgICBDQ2FsbEhl
bHBlcnMgaml0OwotCi0gICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAg
aml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBqaXQuZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsK
LSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJC
YXNlbGluZTogb3BfcmV0X2hhbmRsZXIiKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDBlMmQ3ZDA4Y2ZiNzVmMzI3MWQwNjJiMDk2YWJi
MGMzNWM3ZjFhODUuLjZiY2U3NGFiODJjNTU3ZDAwODUxNTA3ODUxYTA0ZTRlMTQ2MzBjMDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNjAsNyAr
NjAsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVy
dHlOYW1lLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVwYXRjaC5o
IgorI2luY2x1ZGUgIlJlcGF0Y2hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVy
LmgiCkBAIC0xNDQ2LDE4NiArMTQ0Niw5IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgY2FsbGVlRnJhbWUtPnNldENvZGVC
bG9jayhudWxscHRyKTsKLQotICAgIGlmIChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2lu
ZCgpID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0
YSh2bSwgY2FsbGVlKTsKLSAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgIT0gQ2FsbERhdGE6
OlR5cGU6OkpTKTsKLQotICAgICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlw
ZTo6TmF0aXZlKSB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2Jq
ZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUg
PSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0
KHZtKSwgY2FsbGVlRnJhbWUpOwotICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgIHZtLmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICBM
TEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
TGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDog
S2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgQVNTRVJUKGNhbGxEYXRh
LnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwotICAgICAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3Qs
IGNhbGxlZSkpOwotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgdm0u
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3Ry
dWN0KTsKLQotICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNh
bGxlZSk7Ci0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6
SlMpOwotCi0gICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6TmF0
aXZlKSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZy
YW1lKTsKLSAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsK
LSAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5h
dGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVG
cmFtZSk7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVw
VGhlRnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJ
bnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgIH0K
LQotICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUp
OwotICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25z
dHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKLSAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwot
fQotCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNsb3dQYXRo
UmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKSkKIHsKLSAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5m
by0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghY2FsbExpbmtJbmZv
LT5pc0RpcmVjdCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVG
cmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBKU0NlbGwqIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKLSAgICBpZiAoIWNhbGxl
ZUFzRnVuY3Rpb25DZWxsKSB7Ci0gICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0g
anNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9
IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKLQotICAgICAgICAgICAgaWYgKCFjYWxsTGlu
a0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVu
KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2Fs
bCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rp
b24sIGNvZGVQdHIpOwotCi0gICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxp
bmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9k
ZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwot
ICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVI
b3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlu
a0luZm8pKTsKLSAgICB9Ci0KLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxl
ZS0+c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNh
bGxlZS0+ZXhlY3V0YWJsZSgpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGNvZGVQdHI7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwotICAg
IGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvZGVQdHIgPSBq
c1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKLSAgICAgICAgaWYgKCFjb2RlUHRy
KQotICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwg
TXVzdENoZWNrQXJpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAo
KSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0
clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVj
dXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29u
c3RydWN0KSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7
Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVz
c09mQ29kZUJsb2NrKCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4
ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29k
ZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFu
ZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Ns
b3Q7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgICAgIEFyaXR5Q2hlY2tNb2Rl
IGFyaXR5OwotICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8
fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQotICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hl
Y2tBcml0eTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90
UmVxdWlyZWQ7Ci0gICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3Ioa2luZCwgYXJpdHkpOwotICAgIH0KLQotICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVu
T25jZSgpKQotICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICBlbHNlCi0gICAg
ICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBj
b2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0KLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExp
bmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtl
ZXBUaGVGcmFtZSkpOwotfQotCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JX
aXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
ZWVGcmFtZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsKQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNh
bGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotCi0gICAgSlNW
YWx1ZSBjYWxsZWVBc1ZhbHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVl
KCk7Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFs
dWUpOwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKSB7Ci0gICAgICAg
IGlmIChqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkp
IHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2Rl
UHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNh
bGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLSAgICAKLSAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwot
ICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7Ci0gICAgRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwotICAgIGlm
IChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKLSAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRsZVRocm93
RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0u
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQq
PihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2FsbChraW5k
KSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFs
T2JqZWN0LCBmdW5jdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0
aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0g
Y2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwotICAgICAgICBmdW5jdGlvbkV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVuY3Rp
b24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0gICAgfQotICAgIC8v
IEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDMzOQotICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJs
ZS0+ZW50cnlwb2ludEZvcigKLSAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5m
by0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhl
RnJhbWUpKTsKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwgZ2xvYmFsT2JqZWN0LCBj
YWxsTGlua0luZm8pOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlu
a1BvbHltb3JwaGljQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8pKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDU0OGQ1MWNkYTRlMmEyMWE5MjE3OWI1MTVmOTg0YWYyYzY4ZDZkZmMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwMjMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXBhdGNoLmgiCi0KLSNpZiBFTkFCTEUo
SklUKQotCi0jaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCi0jaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCi0jaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJD
YWxsRnJhbWVTaHVmZmxlci5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRl
ICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgot
I2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkZUTFRodW5rcy5oIgotI2luY2x1ZGUgIkZ1bGxDb2RlT3JpZ2lu
LmgiCi0jaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklU
U3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSUNTdGF0cy5oIgotI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgotI2luY2x1ZGUgIkluc3RhbmNlT2ZBY2Nlc3NDYXNlLmgiCi0jaW5jbHVk
ZSAiSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCi0jaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNp
bmNsdWRlICJNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiUG9seW1vcnBo
aWNBY2Nlc3MuaCIKLSNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgot
I2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgot
I2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmlu
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ1By
aW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQotewotICAgIEpTQ19SRVRVUk5fUkVUQUdHRURfT1BF
UkFUSU9OX1dJVEhfVkFMSURBVElPTihvcGVyYXRpb24pOwotfQotCi1zdGF0aWMgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRhZ0NhbGxUYXJnZXRXaXRoVmFsaWRhdGlvbihDb2RlTG9j
YXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwpCi17Ci0gICAgSlNDX1JFVFVSTl9SRVRB
R0dFRF9DQUxMX1RBUkdFVF9XSVRIX1ZBTElEQVRJT04oY2FsbCk7Ci19Ci0KLXN0YXRpYyBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJlYWRQdXRJQ0NhbGxUYXJnZXQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmV0dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlk
YXRpb24oc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uKTsKLSAgICBDb2RlTG9jYXRpb25DYWxsPEpT
SW50ZXJuYWxQdHJUYWc+IGNhbGwgPSBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uOwot
I2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpGVExKSVQpIHsKLSAgICAgICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdl
dCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gdGh1bmsgPSBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICByZXR1cm4gcmV0
YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihjb2RlQmxvY2stPnZtKCkuZnRsVGh1bmtzLT5rZXlG
b3JTbG93UGF0aENhbGxUaHVuayh0aHVuaykuY2FsbFRhcmdldCgpKTsKLSAgICB9Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQot
ICAgIHJldHVybiByZXRhZ0NhbGxUYXJnZXRXaXRoVmFsaWRhdGlvbihjYWxsKTsKLX0KLQotdm9p
ZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVMb2Nh
dGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7Ci0gICAgICAgIFZNJiB2
bSA9IGNvZGVCbG9jay0+dm0oKTsKLSAgICAgICAgRlRMOjpUaHVua3MmIHRodW5rcyA9ICp2bS5m
dGxUaHVua3M7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBN
YWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOwotICAg
ICAgICBhdXRvIHNsb3dQYXRoVGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwotICAgICAgICBGVEw6OlNsb3dQYXRoQ2FsbEtleSBrZXkgPSB0aHVua3Mua2V5Rm9y
U2xvd1BhdGhDYWxsVGh1bmsoc2xvd1BhdGhUaHVuayk7Ci0gICAgICAgIGtleSA9IGtleS53aXRo
Q2FsbFRhcmdldChuZXdDYWxsZWVGdW5jdGlvbik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbChjYWxsLCBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4odGh1bmtzLmdldFNs
b3dQYXRoQ2FsbFRodW5rKHZtLCBrZXkpLmNvZGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7
Ci0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
YWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGF0Y2hTbG93UGF0aENhbGwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBuZXdDYWxsZWVGdW5jdGlvbikKLXsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgewotICAgICAgICBzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24gPSBuZXdDYWxsZWVGdW5jdGlv
bi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8ubV9zbG93UGF0
aENhbGxMb2NhdGlvbiwgbmV3Q2FsbGVlRnVuY3Rpb24pOwotfQotCi1lbnVtIElubGluZUNhY2hl
QWN0aW9uIHsKLSAgICBHaXZlVXBPbkNhY2hlLAotICAgIFJldHJ5Q2FjaGVMYXRlciwKLSAgICBB
dHRlbXB0VG9DYWNoZQotfTsKLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNl
bGwoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBj
ZWxsLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCk7Ci0gICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
KQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmIChzdHJ1Y3R1cmUtPmlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVl
bkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgIC8vIEZsYXR0ZW5pbmcgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQsIHNvIHJl
dHVybiBlYXJseSBmb3IgYW5vdGhlciB0cnkuCi0gICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0
dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
Ci0gICAgfQotICAgIAotICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2Fj
aGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgcmV0dXJuIEF0
dGVtcHRUb0NhY2hlOwotfQotCi1zdGF0aWMgYm9vbCBmb3JjZUlDRmFpbHVyZShKU0dsb2JhbE9i
amVjdCopCi17Ci0gICAgcmV0dXJuIE9wdGlvbnM6OmZvcmNlSUNGYWlsdXJlKCk7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgc3RhdGljIHZvaWQgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVk
ZWQoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVCbG9jayogY29kZUJs
b2NrLCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiByZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdC5z
aG91bGRSZXNldFN0dWJBbmRGaXJlV2F0Y2hwb2ludHMoKSkgewotICAgICAgICByZXN1bHQuZmly
ZVdhdGNocG9pbnRzKHZtKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgICAgICBz
dHViSW5mby5yZXNldChsb2NrZXIsIGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemlu
Z0dldEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0g
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5k
OjpUcnlCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwot
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6
OlByaXZhdGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICByZXR1
cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVCeUlkT3B0aW1pemU7Ci0gICAgfQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkKLXsKLSAg
ICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkdldEJ5SWQ7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoK
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpczsKLSAgICBjYXNlIEdldEJ5
S2luZDo6VHJ5QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWQ7Ci0gICAg
Y2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0OwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkdldEJ5VmFsR2VuZXJpYzsKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZTsKLSAgICBjYXNlIEdldEJ5
S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0
ZU5hbWVCeUlkOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChmb3Jj
ZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZv
ciBpbW1lZGlhdGVzLgotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICBjb25zdCBib29sIGlzUHJpdmF0ZSA9IGtpbmQgPT0g
R2V0QnlLaW5kOjpQcml2YXRlTmFtZSB8fCBraW5kID09IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVC
eUlkOwotCi0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwotCi0gICAgICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7Ci0gICAgICAgICAg
ICBpZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewotICAgICAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYm
IHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxp
bmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganND
YXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNv
ZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewotICAgICAg
ICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0g
ICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5n
dGgoY29kZUJsb2NrLCBzdHViSW5mbykpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChjb2Rl
QmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJ
bmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5k
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3RoKGxv
Y2tlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpTdHJpbmdMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKERp
cmVjdEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxEaXJlY3RBcmd1bWVudHMq
Pih2bSwgYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBvdmVy
cmlkZXMsIHRoZW4gd2UgY2FuIGhhbmRsZSB0aGlzIGFzIGEgbm9ybWFsIHByb3BlcnR5IGxvYWQh
IEd1YXJkaW5nCi0gICAgICAgICAgICAgICAgLy8gdGhpcyB3aXRoIHN1Y2ggYSBjaGVjayBlbmFi
bGVzIHVzIHRvIGFkZCBhbiBJQyBjYXNlIGZvciB0aGF0IGxvYWQgaWYgbmVlZGVkLgotICAgICAg
ICAgICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQotICAgICAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vz
c0Nhc2U6OkRpcmVjdEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoU2NvcGVkQXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PFNj
b3BlZEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEaXR0
by4KLSAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJs
b2NrLCBBY2Nlc3NDYXNlOjpTY29wZWRBcmd1bWVudHNMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5
bWJvbCgpICYmIGJhc2VDZWxsLT5pbmhlcml0czxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4odm0p
ICYmICFzbG90LmlzVW5zZXQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gbW9kdWxlTmFtZXNw
YWNlU2xvdCA9IHNsb3QubW9kdWxlTmFtZXNwYWNlU2xvdCgpKQotICAgICAgICAgICAgICAgIG5l
d0Nhc2UgPSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
cHJvcGVydHlOYW1lLCBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqPihiYXNlQ2VsbCks
IG1vZHVsZU5hbWVzcGFjZVNsb3QtPmVudmlyb25tZW50LCBTY29wZU9mZnNldChtb2R1bGVOYW1l
c3BhY2VTbG90LT5zY29wZU9mZnNldCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoIW5ld0Nhc2UpIHsKLSAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFz
bG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsK
LQotICAgICAgICAgICAgYm9vbCBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewot
ICAgICAgICAgICAgICAgIGlmIChpc1ByaXZhdGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGpzQ2FzdDxKU1By
b3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgICAgICAgICBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+
c3RydWN0dXJlKHZtKTsKLSAgICAgICAgICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9u
ID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZUNlbGwpOwotICAgICAgICAgICAgaWYgKGFjdGlvbiAh
PSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAg
ICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgc2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkKLSAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZVZhbHVlCi0gICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0g
ICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpCi0gICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZlByb3BlcnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlO
YW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2
bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlG
dW5jdGlvbihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlk
U2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBw
cm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUmVmUHRy
PFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLQotICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0
IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICAgICAgaWYgKHNsb3QuaXNDdXN0b20o
KSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VG8gY2FjaGUgc2VsZiBjdXN0b21zLCB3ZSBtdXN0IGRpc2FsbG93IGRpY3Rpb25hcmllcyBiZWNh
dXNlIHdlCi0gICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSBpbmZvcm1lZCBpZiB0aGUgY3Vz
dG9tIGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNoZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb25z
dGFudCBmdW5jdGlvbiBwb2ludGVyLgotCi0gICAgICAgICAgICAgICAgaWYgKCFwcmVwYXJlQ2hh
aW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgc2xvdC5zbG90QmFzZSgpLCBzbG90LnNsb3RCYXNl
KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2Uo
KSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5m
bygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5G
bGF0dGVuZWRCZWZvcmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5
U3RydWN0dXJlKHZtLCBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlQ2VsbCkpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOyAvLyBXZSBtYXkgaGF2ZSBjaGFuZ2VkIHBy
b3BlcnR5IG9mZnNldHMuCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHNsb3QuaXNVbnNldCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIGEga2luZCBpcyBHZXRC
eUtpbmQ6OkJ5SWREaXJlY3Qgb3IgR2V0QnlLaW5kOjpQcml2YXRlTmFtZSwgd2UgZG8gbm90IG5l
ZWQgdG8gaW52ZXN0aWdhdGUgcHJvdG90eXBlIGNoYWlucyBmdXJ0aGVyLgotICAgICAgICAgICAg
ICAgIC8vIENhY2hlYWJpbGl0eSBqdXN0IGRlcGVuZHMgb24gdGhlIGhlYWQgc3RydWN0dXJlLgot
ICAgICAgICAgICAgICAgIGlmIChraW5kICE9IEdldEJ5S2luZDo6QnlJZERpcmVjdCAmJiAhaXNQ
cml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJl
Q2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVz
LT5mbGF0dGVuZWREaWN0aW9uYXJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9w
ZXJ0eSBvZmZzZXRzIG1heSBoYXZlIGNoYW5nZWQgZHVlIHRvIGZsYXR0ZW5pbmcuIFdlJ2xsIGNh
Y2hlIGxhdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNo
ZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9i
amVjdCwgYmFzZUNlbGwsIHNsb3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90
b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1
Y3R1cmUodm0sIHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSA9PSBvZmZz
ZXQpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGluc3RlYWQgZm9yIGZhc3Rl
ciBhY2Nlc3Nlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWlu
ID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRo
aXMgYGlmYCBzaG91bGQgYmUgaW5zaWRlIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5Qmxh
aC4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODUyMTUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90Lmlz
VW5zZXQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZS51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCBjb25kaXRpb25TZXQuc2xvdEJh
c2VDb25kaXRpb24oKS5vZmZzZXQoKSA9PSBvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lLnVpZCgpLCBzbG90LmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgSlNGdW5jdGlvbiogZ2V0dGVyID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgZ2V0dGVy
ID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIHNsb3QuZ2V0dGVyU2V0dGVyKCktPmdl
dHRlcigpKTsKLQotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0
aW9uPiBkb21BdHRyaWJ1dGU7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpICYmIHNsb3QuZG9tQXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgZG9tQXR0cmlidXRl
ID0gc2xvdC5kb21BdHRyaWJ1dGUoKTsKLQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlL
aW5kOjpUcnlCeUlkKSB7Ci0gICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0
eXBlOwotICAgICAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkxvYWQ7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nl
c3NDYXNlOjpNaXNzOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVH
ZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldEdldHRl
cjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxl
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHR5cGUsIHByb3BlcnR5TmFtZSwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53
YXRjaHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIWxvYWRUYXJnZXRGcm9tUHJveHkgJiYgZ2V0dGVyICYmIEludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoc3R1YkluZm8sIGdldHRl
ciwgc3RydWN0dXJlKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGdldHRlciwgV1RGTW92ZShwcm90
b3R5cGVBY2Nlc3NDaGFpbikpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2xv
dC5pc1Vuc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBpc1Byb3h5
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgQWNjZXNzQ2FzZTo6TG9hZCwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCwgaXNQcm94eSwgc2xvdC53YXRj
aHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpIHx8IHNsb3QuaXNVbnNldCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgc2xvdC5pc1Vuc2V0KCkgPyBBY2Nlc3NDYXNlOjpNaXNzIDog
QWNjZXNzQ2FzZTo6TG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSwg
b2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xv
dC53YXRjaHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nl
c3NUeXBlIHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0
dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVy
OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3Rv
bVZhbHVlR2V0dGVyOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09IEdldEJ5S2lu
ZDo6QnlJZFdpdGhUaGlzICYmIHR5cGUgPT0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0
ZXIgJiYgZG9tQXR0cmlidXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFj
Y2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IHR5cGUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9h
ZFRhcmdldEZyb21Qcm94eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2lu
dFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBGdW5jdGlvblB0cjxDdXN0b21BY2Nl
c3NvclB0clRhZz4oc2xvdC5jdXN0b21HZXR0ZXIoKSkgOiBudWxscHRyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSAh
PSBiYXNlVmFsdWUgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZG9tQXR0cmlidXRlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpHZXRCeUFkZEFjY2Vzc0Nhc2UsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51
bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8u
YWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6
c3RyaWN0KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwg
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAg
ICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6
QnlJZFdpdGhUaGlzOgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAg
ICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgR2V0
QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAg
ICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihy
ZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVl
ZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3Vs
dC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19
Ci0KLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCi0gICAgaWYgKHRyeUNhY2hlR2V0QnkoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5m
bywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oa2luZCkpOwotfQot
Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5R2V0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0g
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotCi0gICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7Ci0KLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0K
LSAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotCi0gICAgICAgIEFj
Y2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGJhc2UtPnR5cGUo
KSA9PSBEaXJlY3RBcmd1bWVudHNUeXBlKQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWREaXJlY3RBcmd1bWVudHNMb2FkOwotICAgICAgICBlbHNlIGlmIChiYXNl
LT50eXBlKCkgPT0gU2NvcGVkQXJndW1lbnRzVHlwZSkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkU2NvcGVkQXJndW1lbnRzTG9hZDsKLSAgICAgICAgZWxzZSBp
ZiAoYmFzZS0+dHlwZSgpID09IFN0cmluZ1R5cGUpCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmluZ0xvYWQ7Ci0gICAgICAgIGVsc2UgaWYgKGlzVHlwZWRW
aWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhMb2FkOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6Ci0gICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhMb2FkOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgot
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVJbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2TG9hZDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyTG9hZDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKLSAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2Fk
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQzMjoK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDMyTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VHlwZUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5
IGluIElDCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKLSAgICAgICAgICAg
IGNhc2UgVHlwZUJpZ1VpbnQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJ
bmRleGluZ1NoYXBlTWFzazsKLSAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewot
ICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZUxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNMb2FkOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKLSAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZUxvYWQ7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6
OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7Ci0KLSAgICAgICAg
aWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZt
KSwgSWRlbnRpZmllcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVk
ZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0K
LXZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlmICh0cnlDYWNoZUFycmF5R2V0QnlWYWwo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbykgPT0gR2l2ZVVw
T25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQot
ewotICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsK
LSAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGly
ZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Q7Ci0gICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdDsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0g
ICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdDsKLSAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
LSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKLSAgICAg
ICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0Ogot
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKLSAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7Ci0g
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkR2VuZXJpYzsKLSAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0
cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2
YXRlRmllbGRHZW5lcmljOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9
Ci0gICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24o
Y29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5k
IHB1dEtpbmQpCi17Ci0gICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5S2lu
ZDo6QnlJZDoKLSAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2lu
ZDo6Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgc3dpdGNo
IChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAg
ICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgICAgIEFT
U0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0
TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVG
aWVsZE9wdGltaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBN
YWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRL
aW5kIHB1dEtpbmQpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgIHsKLSAgICAgICAg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFs
T2JqZWN0LT52bSgpKTsKLQotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0
KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmICFzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgIXNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgdHJ5IHRvIGRvIHNvbWV0aGluZyBzbWFydGVyIGhlcmUuLi4KLSAgICAgICAgaWYgKGlzQ29w
eU9uV3JpdGUob2xkU3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpCi0gICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgLy8gV2UgY2FuJ3QgZW5kIHVwIHN0b3JpbmcgdG8g
YSBDb1cgb24gdGhlIHByb3RvdHlwZSBzaW5jZSBpdCBzaG91bGRuJ3Qgb3duIHByb3BlcnRpZXMu
Ci0gICAgICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShzbG90LmJhc2UoKS0+aW5kZXhpbmdNb2Rl
KCkpKTsKLQotICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAg
SlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLQotICAgICAgICBib29sIGlz
UHJveHkgPSBmYWxzZTsKLSAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndh
cmRpbmdQcm94eVR5cGUpIHsKLSAgICAgICAgICAgIGJhc2VDZWxsID0ganNDYXN0PEpTUHJveHkq
PihiYXNlQ2VsbCktPnRhcmdldCgpOwotICAgICAgICAgICAgYmFzZVZhbHVlID0gYmFzZUNlbGw7
Ci0gICAgICAgICAgICBpc1Byb3h5ID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gV2UgY3VycmVu
dGx5IG9ubHkgY2FjaGUgUmVwbGFjZSBhbmQgSlMvQ3VzdG9tIFNldHRlcnMgb24gSlNQcm94eS4g
V2UgZG9uJ3QKLSAgICAgICAgICAgIC8vIGNhY2hlIHRyYW5zaXRpb25zIGJlY2F1c2UgZ2xvYmFs
IG9iamVjdHMgd2lsbCBuZXZlciBzaGFyZSB0aGUgc2FtZSBzdHJ1Y3R1cmUKLSAgICAgICAgICAg
IC8vIGluIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uLgotICAgICAgICAgICAgYm9vbCBpc0Nh
Y2hlYWJsZVByb3h5ID0gKHNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiBzbG90LnR5cGUoKSA9PSBQ
dXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgfHwgc2xv
dC5pc0NhY2hlYWJsZVNldHRlcigpCi0gICAgICAgICAgICAgICAgfHwgc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpOwotICAgICAgICAgICAgaWYgKCFpc0NhY2hlYWJsZVByb3h5KQotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlz
UHJveHkgJiYgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0IHx8IHB1
dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKSkKLSAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdD
YXNlOwotCi0gICAgICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0Nh
Y2hlYWJsZVB1dCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBhc3Nl
cnQgaGVscHMgY2F0Y2ggYnVncyBpZiB3ZSBhY2NpZGVudGFsbHkgZm9yZ2V0IHRvIGRpc2FibGUg
Y2FjaGluZwotICAgICAgICAgICAgICAgIC8vIHdoZW4gd2UgdHJhbnNpdGlvbiB0aGVuIHN0b3Jl
IHRvIGFuIGV4aXN0aW5nIHByb3BlcnR5LiBUaGlzIGlzIGNvbW1vbiBhbW9uZwotICAgICAgICAg
ICAgICAgIC8vIHBhdGhzIHRoYXQgcmVpZnkgbGF6eSBwcm9wZXJ0aWVzLiBJZiB3ZSByZWlmeSBh
IGxhenkgcHJvcGVydHkgYW5kIGZvcmdldAotICAgICAgICAgICAgICAgIC8vIHRvIGRpc2FibGUg
Y2FjaGluZywgd2UgbWF5IGNvbWUgZG93biB0aGlzIHBhdGguIFRoZSBSZXBsYWNlIElDIGRvZXMg
bm90Ci0gICAgICAgICAgICAgICAgLy8ga25vdyBob3cgdG8gbW9kZWwgdGhlc2UgdHlwZXMgb2Yg
c3RydWN0dXJlIHRyYW5zaXRpb25zIChvciBhbnkgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAg
Ly8gdHJhbnNpdGlvbiBmb3IgdGhhdCBtYXR0ZXIpLgotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSA9PSBvbGRTdHJ1Y3R1cmUp
OwotCi0gICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFj
ZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpCi0gICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZv
LCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29k
ZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3ND
YXNlOjpSZXBsYWNlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9sZFN0cnVj
dHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwgaXNQcm94eSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCghaXNQcm94eSk7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIG9sZCBzdHJ1Y3R1cmUgaXMgZGljdGlvbmFyeSwgaXQgbWVhbnMgdGhhdCB0aGlz
IGlzIG9uZS1vbi1vbmUgYmV0d2VlbiBhbiBvYmplY3QgYW5kIGEgc3RydWN0dXJlLgotICAgICAg
ICAgICAgICAgIC8vIElmIHRoaXMgaXMgTmV3UHJvcGVydHkgb3BlcmF0aW9uLCBnZW5lcmF0aW5n
IElDIGZvciB0aGlzIGRvZXMgbm90IG9mZmVyIGFueSBiZW5lZml0IGJlY2F1c2UgdGhpcyB0cmFu
c2l0aW9uIG5ldmVyIGhhcHBlbnMgYWdhaW4uCi0gICAgICAgICAgICAgICAgaWYgKG9sZFN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJl
LCBpZGVudC5pbXBsKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
Tm9uZSksIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUgfHwgIW5l
d1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIEpT
T2JqZWN0OjpwdXQgaXMgb3ZlcnJpZGRlbiBieSBVc2VyT2JqZWN0LCBVc2VyT2JqZWN0OjpwdXQg
cGVyZm9ybXMgc2lkZS1lZmZlY3Qgb24gSlNPYmplY3Q6OnB1dCwgYW5kIGl0IG5lZ2xlY3RzIHRv
IG1hcmsgdGhlIFB1dFByb3BlcnR5U2xvdCBhcyBub24tY2FjaGFlYmxlLAotICAgICAgICAgICAg
ICAgIC8vIHRoZW4gYXJiaXRyYXJ5IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyBjYW4gaGFwcGVuIGR1
cmluZyB0aGUgcHV0IG9wZXJhdGlvbiwgYW5kIHRoaXMgZ2VuZXJhdGVzIHdyb25nIHRyYW5zaXRp
b24gaW5mb3JtYXRpb24gaGVyZSBhcyBpZiBvbGRTdHJ1Y3R1cmUgLT4gbmV3U3RydWN0dXJlLgot
ICAgICAgICAgICAgICAgIC8vIEluIHJlYWxpdHksIHRoZSB0cmFuc2l0aW9uIGlzIG9sZFN0cnVj
dHVyZSAtPiBzb21ldGhpbmcgdW5rbm93biBzdHJ1Y3R1cmVzIC0+IGJhc2VWYWx1ZSdzIHN0cnVj
dHVyZS4KLSAgICAgICAgICAgICAgICAvLyBUbyBndWFyZCBhZ2FpbnN0IHRoZSBlbWJlZGRlcidz
IHBvdGVudGlhbGx5IGluY29ycmVjdCBVc2VyT2JqZWN0OjpwdXQgaW1wbGVtZW50YXRpb24sIHdl
IHNob3VsZCBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24gYW5kIGlmIGZvdW5kLCBhbmQgZ2l2ZSB1
cCBvbiBjYWNoaW5nIHRoZSBwdXQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VWYWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKHZtKSA9PSBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAg
IGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgIT0gbmV3U3RydWN0dXJlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAg
ICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgICAgIEFTU0VSVCghbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBw
cm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKHB1dEtpbmQgPT0gUHV0
S2luZDo6Tm90RGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMg
PSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIG51bGxwdHIp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
cm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xv
YmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlTZXR0ZXJNaXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIGdsb2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHB1dEtpbmQgPT0g
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChpZGVudC5pc1ByaXZhdGVOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBjb25k
aXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Modm0sIGNvZGVCbG9j
aywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVUcmFuc2l0aW9uKHZtLCBjb2Rl
QmxvY2ssIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgc3R1YkluZm8pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0Fj
Y2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLQotICAgICAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gZG8gdGhpcyBldmVuIGlmIHdlJ3JlIGEgc2VsZiBjdXN0b20sIHNpbmNlIHdlIG11
c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVzCi0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBu
ZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hl
IHRoZSBjb25zdGFudAotICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uIHBvaW50ZXIuCi0gICAg
ICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xv
YmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAgICAgICAgICAgIGlmICgh
Y2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hh
aW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hh
aW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBvbGRTdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc2xvdC5pc0N1c3RvbUFjY2Vz
c29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFjY2Vzc0Nhc2U6OkN1
c3RvbVZhbHVlU2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgaW52YWxpZE9mZnNldCwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFj
Y2Vzc0NoYWluKSwgaXNQcm94eSwgc2xvdC5jdXN0b21TZXR0ZXIoKS5yZXRhZ2dlZDxDdXN0b21B
Y2Nlc3NvclB0clRhZz4oKSwgc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5iYXNlKCkg
OiBudWxscHRyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgICAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0
LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hl
U3RhdHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0No
YWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBwcm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUodm0sIGJhc2VD
ZWxsLT5zdHJ1Y3R1cmUodm0pKS0+Z2V0KHZtLCBpZGVudC5pbXBsKCksIGF0dHJpYnV0ZXMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkgfHwgIShh
dHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4g
PSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIHNsb3Qu
YmFzZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjb25kaXRpb25T
ZXQuc2xvdEJhc2VDb25kaXRpb24oKS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
QWNjZXNzb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xv
dEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vz
c0Nhc2U6OlNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgY29uZGl0
aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgaXNQcm94eSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5QWRkQWNj
ZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09
IGJhc2VWYWx1ZSkpOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNj
ZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3RyaWN0TW9k
ZSgpID8gRUNNQU1vZGU6OnN0cmljdCgpIDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9wZXJ0eU5h
bWUsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29t
ZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRo
SnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJh
c2VWYWx1ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKLQotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZp
cmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2Nr
LCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVV
cE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQotewotICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBp
ZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRT
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2lu
ZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5
S2luZCwgcHV0S2luZCkpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVB
cnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBQdXRLaW5kKQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQot
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIGlmICghaW5kZXguaXNJbnQzMigp
KQotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotCi0gICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotCi0gICAg
ewotICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0KLSAgICAgICAg
QWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoaXNUeXBlZFZp
ZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgewotICAgICAg
ICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUp
IHsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OFN0b3JlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDg6Ci0gICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50OENsYW1wZWRTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgVHlwZUludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUludDE2U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDE2U3RvcmU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKLSAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgotICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQz
MlN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlRmxv
YXQzMjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlGbG9hdDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWlu
dDY0QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgotICAg
ICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5
cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOwotICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1No
YXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMlN0b3JlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVTaGFwZToKLSAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERvdWJsZVN0b3JlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBl
OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlT
dG9yYWdlU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgcmVzdWx0ID0gc3R1
YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01B
TW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRT
b21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdp
dGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7Ci0K
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNo
cG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUg
OiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFz
ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1
dEtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQotewotICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlW
YWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2lu
ZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0
ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBE
ZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKLXsKLSAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBy
ZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAgICAgICAgaWYgKGZv
cmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLQotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKCFiYXNl
VmFsdWUuaXNPYmplY3QoKSB8fCAhb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2Fj
aGVhYmxlKCkgfHwgb2xkU3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVEZWxldGUoKSkK
LSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmIChiYXNlVmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAg
aWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmhhc0JlZW5GbGF0dGVuZWRCZWZv
cmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAg
IGpzQ2FzdDxKU09iamVjdCo+KGJhc2VWYWx1ZSktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZt
KTsKLSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7
Ci0KLSAgICAgICAgaWYgKHNsb3QuaXNEZWxldGVIaXQoKSkgewotICAgICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgbmV3T2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKLSAgICAgICAgICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9t
RXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUu
dWlkKCksIG5ld09mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgaWYgKCFuZXdT
dHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBuZXdTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgICAgICAgICAgQVNTRVJUKG5ld09mZnNldCA9PSBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+dHJhbnNpdGlvbktpbmQoKSA9
PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbik7Ci0gICAgICAgICAgICBBU1NFUlQo
bmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zm
c2V0KG5ld09mZnNldCkpOwotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZURlbGV0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIG5ld09mZnNldCwgb2xkU3RydWN0
dXJlLCBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICB9IGVsc2UgaWYgKHNsb3QuaXNOb25jb25maWd1
cmFibGUoKSkgewotICAgICAgICAgICAgaWYgKGVjbWFNb2RlLmlzU3RyaWN0KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTm9uQ29u
ZmlndXJhYmxlLCBwcm9wZXJ0eU5hbWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwgeyB9
LCBudWxscHRyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0ZU1pc3MsIHByb3Bl
cnR5TmFtZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwotCi0g
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgZWNtYU1vZGUsIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6RGVsQnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKLSAgICAgICAgICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRj
aHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1
bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2Fj
aGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0
eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgRGVsQnlLaW5kIGtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQotewotICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVEZWxldGVCeShnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgc2xvdCwgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc3R1
YkluZm8sIGtpbmQsIGVjbWFNb2RlKSA9PSBHaXZlVXBPbkNhY2hlKSB7Ci0gICAgICAgIExPR19J
QygoSUNFdmVudDo6RGVsQnlSZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VWYWx1ZS5jbGFzc0luZm9P
ck51bGwoZ2xvYmFsT2JqZWN0LT52bSgpKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVy
dHlOYW1lLnVpZCgpKSkpOwotICAgICAgICBpZiAoa2luZCA9PSBEZWxCeUtpbmQ6OkJ5SWQpCi0g
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJh
dGlvbkRlbGV0ZUJ5SWRHZW5lcmljKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbEdl
bmVyaWMpOwotICAgIH0KLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCi17Ci0gICAg
c3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGNhc2UgSW5CeUtpbmQ6OkJ5VmFsOgotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGNhc2UgSW5CeUtpbmQ6
OlByaXZhdGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotaW5s
aW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1
bmN0aW9uKEluQnlLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBJ
bkJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlJZEdlbmVyaWM7Ci0g
ICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFs
R2VuZXJpYzsKLSAgICBjYXNlIEluQnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lR2VuZXJpYzsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
SW5CeSgKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLAot
ICAgIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgp
KTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2Jq
ZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkgfHwgKCF3YXNGb3VuZCAmJiAhYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZUZvckFic2VuY2UoKSkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLSAgICAgICAgCi0gICAgICAgIGlmICh3YXNGb3VuZCkgewotICAgICAgICAgICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YmFzZS0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxQb2x5UHJvdG9B
Y2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgaWYgKHdhc0ZvdW5kKSB7Ci0gICAg
ICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNl
KTsKLSAgICAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgICAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nl
c3MuCi0gICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpV
bnNldAotICAgICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAg
ICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKLSAgICAgICAgICAgICAgICAmJiAh
c2xvdC53YXRjaHBvaW50U2V0KCkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVy
YXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5
U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplKTsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5p
dEluQnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChzbG90LnNsb3RCYXNlKCkgIT0gYmFzZSkgewotICAgICAgICAgICAgICAgIGF1dG8gY2Fj
aGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xv
dCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVz
LT5mbGF0dGVuZWREaWN0aW9uYXJ5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVBy
b3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVBy
b3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3ND
aGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlO
YW1lLnVpZCgpKSA9PSBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVC
bG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1w
bCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBjb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKSA9PSBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhn
bG9iYWxPYmplY3QsIGJhc2UsIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1
cykKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAg
aWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9i
amVjdCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3ND
aGFpbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVs
bHB0cjsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB3YXNG
b3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBwcm9wZXJ0eU5h
bWUsIHdhc0ZvdW5kID8gc2xvdC5jYWNoZWRPZmZzZXQoKSA6IGludmFsaWRPZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0KLSAg
ICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShu
ZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0g
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKLQotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBpZiAoa2lu
ZCA9PSBJbkJ5S2luZDo6QnlJZCkKLSAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5m
bywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2
ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJl
cGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVJbkJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNl
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHdhc0ZvdW5kLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0g
R2l2ZVVwT25DYWNoZSkgewotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhH
ZW5lcmljLCBiYXNlT2JqZWN0LT5jbGFzc0luZm8oZ2xvYmFsT2JqZWN0LT52bSgpKSwgSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwotICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY0luQnlG
dW5jdGlvbihraW5kKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5k
SUQsIGJvb2wgd2FzRm91bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBy
ZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJy
YW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVy
ZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAg
ICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwot
ICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgcmV0dXJu
IGFjdGlvbjsKLQotICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNz
Q2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIGJyYW5kSUQsIGludmFsaWRPZmZzZXQs
IHN0cnVjdHVyZSwgeyB9LCB7IH0pOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFj
Y2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmlj
dCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0Lmdl
bmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBs
YWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0
eSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZp
cmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2Nr
LCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVV
cE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEhhc1ByaXZhdGVC
cmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3
YXNGb3VuZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNoZUhhc1By
aXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgYnJhbmRJRCwg
d2FzRm91bmQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZEdl
bmVyaWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVDaGVja1ByaXZh
dGVCcmFuZCgKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwKLSAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50
aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElELnVpZCgpKTsKLQot
ICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkK
LSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKLQotICAgICAgICBJbmxpbmVDYWNoZUFj
dGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKLSAgICAgICAgaWYgKGFjdGlv
biAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAg
ICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6
Q2hlY2tQcml2YXRlQnJhbmRBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZUNoZWNrUHJpdmF0ZUJyYW5kKHZtLCBjb2RlQmxvY2ssIGJy
YW5kSUQsIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNz
Q2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCks
IGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJh
dGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZh
dGVCcmFuZFJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlz
QmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2Rl
KCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NO
b3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZv
LCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNo
Q2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIGJy
YW5kSUQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVDaGVja1By
aXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgYnJhbmRJRCwg
c3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRHZW5lcmljKTsK
LX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKAot
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U09iamVjdCogYmFzZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZp
ZXIgYnJhbmRJRCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFu
ZElELnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUo
Z2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7Ci0KLSAgICAgICAgaWYgKG9sZFN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OwotCi0gICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0s
IGJhc2UpOwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAg
ICAgcmV0dXJuIGFjdGlvbjsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpzZXRCcmFuZFRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBicmFuZElELnVpZCgpKTsKLSAgICAgICAgaWYgKCFu
ZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAg
ICBpZiAobmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkg
PT0gb2xkU3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+dHJhbnNpdGlv
bktpbmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6U2V0QnJhbmQpOwotICAgICAgICBBU1NFUlQobmV3
U3RydWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNCYXNlUHJv
cGVydHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlNldFByaXZhdGVCcmFuZEFk
ZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9w
ZXJ0eSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
Y3JlYXRlU2V0UHJpdmF0ZUJyYW5kKHZtLCBjb2RlQmxvY2ssIGJyYW5kSUQsIG9sZFN0cnVjdHVy
ZSwgbmV3U3RydWN0dXJlKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwg
YnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0
ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlNldFByaXZhdGVC
cmFuZFJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlz
QmFzZVByb3BlcnR5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQo
dm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19
Ci0KLXZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIG9sZFN0cnVjdHVyZSwgIGJyYW5kSUQsIHN0dWJJ
bmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1z
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbnN0YW5jZU9mKAotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIHZhbHVl
VmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywKLSAgICBib29sIHdhc0ZvdW5kKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNF
X0FTU0VSVCh2YWx1ZVZhbHVlLmlzQ2VsbCgpKTsgLy8gc2hvdWxkQ29uc2lkZXJDYWNoaW5nIHJl
amVjdHMgbm9uLWNlbGxzLgotICAgIAotICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmpl
Y3QpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAgICB7Ci0gICAgICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsK
LSAgICAgICAgCi0gICAgICAgIEpTQ2VsbCogdmFsdWUgPSB2YWx1ZVZhbHVlLmFzQ2VsbCgpOwot
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLT5zdHJ1Y3R1cmUodm0pOwotICAg
ICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLSAgICAgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJvdG90eXBlVmFsdWUpOwotICAg
ICAgICBpZiAocHJvdG90eXBlKSB7Ci0gICAgICAgICAgICBpZiAoIWpzRHluYW1pY0Nhc3Q8SlNP
YmplY3QqPih2bSwgdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNl
T2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZNaXNzLCBzdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlUXVlcmllc0FyZUNhY2hlYWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgdG8gZG8gcG9seSBwcm90by4K
LSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1NjYzCi0gICAgICAgICAgICAgICAgcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxP
YmplY3QsIHZhbHVlLCB3YXNGb3VuZCA/IHByb3RvdHlwZSA6IG51bGxwdHIpOwotICAgICAgICAg
ICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0Zvckluc3RhbmNlT2YoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm90b3R5cGUsIHdhc0ZvdW5kKTsKLQotICAg
ICAgICAgICAgICAgIGlmIChjb25kaXRpb25TZXQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5jZU9mQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgIHdh
c0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkhpdCA6IEFjY2Vzc0Nhc2U6Okluc3RhbmNl
T2ZNaXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IHByb3RvdHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5ld0Nhc2UpCi0gICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZH
ZW5lcmljLCBDYWNoZWFibGVJZGVudGlmaWVyKCkpOwotICAgICAgICAKLSAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpJbnN0YW5jZU9mQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgSWRlbnRpZmllcigpKSk7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5h
ZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpz
dHJpY3QoKSwgbnVsbHB0ciwgV1RGTW92ZShuZXdDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5zdGFuY2VPZlJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
SWRlbnRpZmllcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVl
ZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiBy
ZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVy
OwotfQotCi12b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIHZhbHVlVmFsdWUsIEpTVmFs
dWUgcHJvdG90eXBlVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBib29s
IHdhc0ZvdW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKLSAgICBpZiAodHJ5Q2FjaGVJbnN0YW5jZU9mKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCB2YWx1ZVZhbHVlLCBwcm90b3R5cGVWYWx1ZSwgc3R1YkluZm8sIHdhc0ZvdW5kKSA9PSBHaXZl
VXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Ns
b3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewotICAgIGNhbGxMaW5rSW5m
by5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRh
Z2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8o
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yKQotewotICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0
dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
Ci17Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0
dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgbGlua1Ns
b3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0lu
Zm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxU
aHVuaykpOwotfQotCi1zdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2Fs
bGVlKQotewotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAvLyBFYWNoIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1bGUs
IHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVyLgotICAgIHJldHVybiBq
c0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjYWxsZWUpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotfQotCi12b2lkIGxp
bmtNb25vbW9ycGhpY0NhbGwoCi0gICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAg
IEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7Ci0KLSAgICBDYWxs
RnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIC8vIE91
ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwotICAg
IC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCi0gICAg
QVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7Ci0KLSAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIC8vIFdl
YkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCi0gICAg
SlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgp
LmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2Vs
bCgpKSA6IGNhbGxlckNvZGVCbG9jazsKLSAgICBBU1NFUlQob3duZXIpOwotCi0gICAgQVNTRVJU
KCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3Jw
aGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICBjYWxsTGlua0luZm8u
c2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOwotCi0gICAgaWYgKHNob3VsZER1
bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQotICAgICAgICBkYXRhTG9nKCJMaW5r
aW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0lu
Zm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAi
LCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwotCi0gICAgaWYgKGNhbGxlZUNvZGVC
bG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZy
YW1lLCAmY2FsbExpbmtJbmZvKTsKLQotICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRp
b25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSkgewot
ICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWND
YWxsVGh1bmtHZW5lcmF0b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGxp
bmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCi12b2lkIGxpbmtEaXJlY3RDYWxsKAot
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsK
LSAgICAKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7Ci0KLSAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJbmZvLnNldENv
ZGVCbG9jayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihj
YWxsZWVDb2RlQmxvY2spKTsKLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxl
ckNvZGVCbG9jaykpCi0gICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29k
ZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRv
ICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29k
ZVB0ciwgIlxuIik7Ci0KLSAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2Rl
TG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7Ci0KLSAgICBpZiAoY2FsbGVl
Q29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2Fs
bEZyYW1lLCAmY2FsbExpbmtJbmZvKTsKLX0KLQotdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0gICAgQ29kZUJsb2Nr
KiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygp
OwotICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAgICAKLSAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCi17Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5pc0Rp
cmVjdCgpKSB7Ci0gICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOwotICAgICAg
ICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQotICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgbGlu
a1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7Ci0KLSAgICAgICAgICAgIGlm
IChjYWxsTGlua0luZm8uc3R1YigpKQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZl
cnRDYWxsVG9TdHViKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2Fs
bGVlKCk7IC8vIFRoaXMgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBjYWNoZSBib3RoIGZvciBkYXRh
IGFuZCBjb2RlLWJhc2VkIGNhY2hlcy4KLSAgICB9Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU2Vl
bigpOwotICAgIGNhbGxMaW5rSW5mby5jbGVhclN0dWIoKTsKLSAgICBjYWxsTGlua0luZm8uY2xl
YXJTbG93U3R1YigpOwotICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKLSAgICAgICAg
Y2FsbExpbmtJbmZvLnJlbW92ZSgpOwotfQotCi12b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNh
bGxMaW5rSW5mbykpOwotICAgIAotICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGlu
ZVB0clRhZz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAg
ICBkYXRhTG9nTG5JZihzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSwK
LSAgICAgICAgIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxl
ckNvZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwotCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFs
VGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0gICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJ
bmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJl
SklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci0gICAgY2FsbExpbmtJ
bmZvLnNldENsZWFyZWRCeVZpcnR1YWwoKTsKLX0KLQotbmFtZXNwYWNlIHsKLXN0cnVjdCBDYWxs
VG9Db2RlUHRyIHsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLX07Ci19IC8vIGFubm9ueW1vdXMg
bmFtZXNwYWNlCi0KLXZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8sIENhbGxWYXJpYW50IG5ld1ZhcmlhbnQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FsbExp
bmtJbmZvLmFsbG93U3R1YnMoKSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2Fs
bEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
LQotICAgIC8vIER1cmluZyBleGVjdXRpb24gb2YgbGlua1BvbHltb3JwaGljQ2FsbCwgd2Ugc3Ry
b25nbHkgYXNzdW1lIHRoYXQgd2UgbmV2ZXIgZG8gR0MuCi0gICAgLy8gR0MgamV0dGlzb25zIENv
ZGVCbG9ja3MsIGNoYW5nZXMgQ2FsbExpbmtJbmZvIGV0Yy4gYW5kIGJyZWFrcyBhc3N1bXB0aW9u
IGRvbmUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGNhbGwuCi0gICAgRGVmZXJHQ0ZvckFXaGlsZSBk
ZWZlckdDRm9yQVdoaWxlKHZtKTsKLSAgICAKLSAgICBpZiAoIW5ld1ZhcmlhbnQpIHsKLSAgICAg
ICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBm
b3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwotICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1
cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCi0gICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUo
KS5pc0NlbGwoKSk7Ci0KLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZy
YW1lLT5jb2RlQmxvY2soKTsKLSAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5
TW9kdWxlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSk7Ci0KLSAgICAvLyBXZWJBc3Nl
bWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgotICAgIEpTQ2Vs
bCogb3duZXIgPSBpc1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+
Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFTU0VSVChvd25lcik7
Ci0KLSAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsKLSAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1YigpKQotICAgICAgICBsaXN0ID0gc3R1
Yi0+dmFyaWFudHMoKTsKLSAgICBlbHNlIGlmIChKU09iamVjdCogb2xkQ2FsbGVlID0gY2FsbExp
bmtJbmZvLmNhbGxlZSgpKQotICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZh
cmlhbnQob2xkQ2FsbGVlKSB9OwotICAgIAotICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJp
YW50KGxpc3QsIG5ld1ZhcmlhbnQpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJl
IGNhbGxzIHRoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3Vy
ZSBjYWxscy4KLSAgICAvLyBUaGlzIG1ha2VzIHN3aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4g
SXQgYWxzbyBwcm9kdWNlcyBwcm9maWxpbmcgdGhhdCdzIGVhc2llciBvbiB0aGUgREZHOwotICAg
IC8vIHRoZSBERkcgZG9lc24ndCByZWFsbHkgd2FudCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlv
biBvZiBjbG9zdXJlIGFuZCBub24tY2xvc3VyZSBjYWxsZWVzLgotICAgIGJvb2wgaXNDbG9zdXJl
Q2FsbCA9IGZhbHNlOwotICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpICB7Ci0g
ICAgICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgewotICAgICAgICAgICAgbGlzdCA9
IGRlc3BlY2lmaWVkVmFyaWFudExpc3QobGlzdCk7Ci0gICAgICAgICAgICBpc0Nsb3N1cmVDYWxs
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IGlmIChpc0Nsb3N1cmVDYWxsKQotICAgICAgICBjYWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1
cmUoKTsKLSAgICAKLSAgICBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOwot
ICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlVmFsdWVzOwotICAgIAotICAgIC8vIEZpZ3VyZSBvdXQg
d2hhdCBvdXIgY2FzZXMgYXJlLgotICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3Qp
IHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwotICAgICAgICBpZiAo
dmFyaWFudC5leGVjdXRhYmxlKCkgJiYgIXZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5j
dGlvbigpKSB7Ci0gICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHZhcmlh
bnQuZXhlY3V0YWJsZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7Ci0gICAgICAgICAg
ICAvLyBJZiB3ZSBjYW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24n
dCBoYXZlIGEgQ29kZUJsb2NrIG9yIGJlY2F1c2UgYXJpdHkgbWlzbWF0Y2gsCi0gICAgICAgICAg
ICAvLyBhc3N1bWUgdGhhdCBpdCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBh
IHZpcnR1YWwgY2FsbC4KLSAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5pc1ZhcmFyZ3MoKSkgewotICAg
ICAgICAgICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaW50NjRfdCBuZXdDYXNlVmFsdWUgPSAwOwotICAgICAgICBpZiAoaXNDbG9zdXJlQ2Fs
bCkgewotICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2
YXJpYW50LmV4ZWN1dGFibGUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRk
IGEgZmFzdCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgotICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTMx
MQotICAgICAgICAgICAgaWYgKCFuZXdDYXNlVmFsdWUpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb24gPSB2
YXJpYW50LmZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lz
ZV9jYXN0PGludHB0cl90PihmdW5jdGlvbik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmludGVy
bmFsRnVuY3Rpb24oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgIGlmIChjYXNlVmFsdWVzLmNvbnRhaW5zKG5ld0Nhc2VWYWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICBkYXRhTG9nKCJFUlJPUjogQXR0ZW1wdCB0byBhZGQgZHVwbGljYXRl
IGNhc2UgdmFsdWUuXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeGlzdGluZyBjYXNl
IHZhbHVlczogIik7Ci0gICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwotICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiBjYXNlVmFsdWVzKQotICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKGNvbW1hLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiXG4i
KTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFkZDogIiwgbmV3Q2Fz
ZVZhbHVlLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJWYXJpYW50IGxpc3Q6ICIs
IGxpc3REdW1wKGNhbGxDYXNlcyksICJcbiIpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBj
YWxsQ2FzZXMuYXBwZW5kKFBvbHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7
Ci0gICAgICAgIGNhc2VWYWx1ZXMuYXBwZW5kKG5ld0Nhc2VWYWx1ZSk7Ci0gICAgfQotICAgIEFT
U0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhc2VWYWx1ZXMuc2l6ZSgpKTsKLQotICAgIC8vIElm
IHdlIGFyZSBvdmVyIHRoZSBsaW1pdCwganVzdCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgot
ICAgIHVuc2lnbmVkIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZTsKLSAgICBpZiAo
aXNXZWJBc3NlbWJseSkKLSAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXpl
ID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9yV2ViQXNzZW1i
bHlUb0pTKCk7Ci0gICAgZWxzZSBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6dG9wVGllckpJVCgpKQotICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlz
dFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BU
aWVyKCk7Ci0gICAgZWxzZQotICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNp
emUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsKLQotICAg
IC8vIFdlIHVzZSBsaXN0LnNpemUoKSBpbnN0ZWFkIG9mIGNhbGxDYXNlcy5zaXplKCkgYmVjYXVz
ZSB3ZSByZXNwZWN0IENhbGxWYXJpYW50IHNpemUgZm9yIG5vdy4KLSAgICBpZiAobGlzdC5zaXpl
KCkgPiBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpIHsKLSAgICAgICAgbGlua1Zp
cnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFZlY3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgp
KTsKLSAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4gZmFzdENvdW50czsKLQotICAgIGlmICghaXNX
ZWJBc3NlbWJseSAmJiBjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BU
aWVySklUKCkpIHsKLSAgICAgICAgZmFzdENvdW50cyA9IG1ha2VVbmlxdWVBcnJheTx1aW50MzJf
dD4oY2FsbENhc2VzLnNpemUoKSk7Ci0gICAgICAgIG1lbXNldChmYXN0Q291bnRzLmdldCgpLCAw
LCBjYWxsQ2FzZXMuc2l6ZSgpICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0gICAgfQotICAgIAotICAg
IEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsTGlua0luZm8uY2FsbGVlR1BSKCk7Ci0KLSAgICBib29s
IGlzRGF0YUlDID0gY2FsbExpbmtJbmZvLmlzRGF0YUlDKCk7Ci0gICAgQ0NhbGxIZWxwZXJzIHN0
dWJKaXQoY2FsbGVyQ29kZUJsb2NrKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVT
aHVmZmxlcj4gZnJhbWVTaHVmZmxlcjsKLSAgICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZs
ZURhdGEoKSkgewotICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7Ci0g
ICAgICAgIGZyYW1lU2h1ZmZsZXIgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHVi
Sml0LCAqY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSk7Ci0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUg
Y2FsbGVlIGlzIGEgY2VsbCwgYW5kIHdlIGNhbgotICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9u
YWwgcmVnaXN0ZXIgdGhpcyBidXlzIHVzLgotICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVD
YWxsZWVJc0NlbGwoKTsKLSNlbmRpZgotICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNh
bGxlZUdQUik7Ci0gICAgfQotCi0gICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKLSAgICBp
ZiAoaXNDbG9zdXJlQ2FsbCkgewotICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKLSAgICAgICAg
ICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gQXNzZW1ibHlIZWxw
ZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNv
bXBhcmlzb25WYWx1ZUdQUiA9IGNhbGxlZUdQUjsKLQotICAgIEdQUlJlZyBmYXN0Q291bnRzQmFz
ZUdQUjsKLSAgICBpZiAoZnJhbWVTaHVmZmxlcikKLSAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIg
PSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZhc3RD
b3VudHNCYXNlR1BSID0KLSAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOwotICAg
IH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3Vu
dHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7Ci0KLSAgICBpZiAoIWZyYW1lU2h1ZmZsZXIg
JiYgY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAgICAvLyBXZSBzdHJvbmdseSBh
c3N1bWUgdGhhdCBjYWxsZWVHUFIgaXMgbm90IGEgY2FsbGVlIHNhdmUgcmVnaXN0ZXIgaW4gdGhl
IHNsb3cgcGF0aC4KLSAgICAgICAgQVNTRVJUKCFjYWxsZXJDb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKS0+ZmluZChjYWxsZWVHUFIpKTsKLSAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7Ci0gICAgfQotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKLSAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB3
ZSBoYXZlIGEgZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2hHUFIu
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxs
KCkpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwo
Y2FsbGVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUikp
OwotI2Vsc2UKLSAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0
aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSNlbmRpZgotICAgICAgICAvLyBGSVhNRTogV2UgY291bGQg
YWRkIGEgZmFzdCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgot
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxl
ZUdQUikpOwotCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBj
b21wYXJpc29uVmFsdWVHUFIpOwotICAgICAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBzdHViSml0
LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBjb21wYXJpc29uVmFsdWVHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7Ci0gICAg
ICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29tcGFyaXNvblZhbHVl
R1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246
OnJhcmVEYXRhVGFnKSwgY29tcGFyaXNvblZhbHVlR1BSKTsKLSAgICAgICAgaGFzRXhlY3V0YWJs
ZS5saW5rKCZzdHViSml0KTsKLSAgICB9Ci0KLSAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNo
KGNvbXBhcmlzb25WYWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOwot
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKLSAgICB3aGlsZSAoYmluYXJ5U3dpdGNo
LmFkdmFuY2Uoc3R1YkppdCkpIHsKLSAgICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3
aXRjaC5jYXNlSW5kZXgoKTsKLSAgICAgICAgCi0gICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQg
PSBjYWxsQ2FzZXNbY2FzZUluZGV4XS52YXJpYW50KCk7Ci0gICAgICAgIAotICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICAgICAgaWYgKHZh
cmlhbnQuZXhlY3V0YWJsZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRh
YmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBj
b2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlv
bktpbmQoKSwgdmFyaWFudC5mdW5jdGlvbigpKTsKLSAgICAgICAgICAgIGlmICghY29kZVB0cikK
LSAgICAgICAgICAgICAgICBjb2RlUHRyID0gdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRl
ZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1
bmN0aW9uKCkpOwotICAgICAgICAgICAgY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rp
b25UcmFtcG9saW5lRm9yKENvZGVGb3JDYWxsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKGZhc3RDb3VudHMpIHsKLSAgICAgICAgICAgIHN0dWJKaXQuYWRkMzIoCi0gICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXpl
b2YodWludDMyX3QpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG5lZWRzRG9uZUp1bXAg
PSBmYWxzZTsKLSAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKLSAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKHN0dWJKaXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1Ykpp
dC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWls
Q2FsbCgpKSB7Ci0gICAgICAgICAgICBzdHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
LSAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxs
KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNEYXRhSUMpCi0gICAgICAg
ICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2Fs
bCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICAgICAgICAgICAgICBuZWVkc0RvbmVKdW1wID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYWxsc1tjYXNlSW5kZXhd
LmNvZGVQdHIgPSBjb2RlUHRyOwotICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkKLSAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKLSAgICB9Ci0gICAgCi0gICAgc2xvd1Bh
dGgubGluaygmc3R1YkppdCk7Ci0gICAgYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkubGluaygm
c3R1YkppdCk7Ci0KLSAgICBpZiAoZnJhbWVTaHVmZmxlcikgewotICAgICAgICBmcmFtZVNodWZm
bGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVh
c2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFz
ZUdQUihmYXN0Q291bnRzQmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
ZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6
cmVnVDEsIEdQUkluZm86OnJlZ1QwKSk7Ci0jZWxzZQotICAgICAgICBmcmFtZVNodWZmbGVyLT5z
ZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwotI2VuZGlm
Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnByZXBhcmVGb3JTbG93UGF0aCgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSNlbmRpZgot
ICAgIH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgaWYg
KGlzRGF0YUlDICYmICFjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgIC8vIFdl
IHdlcmUgY2FsbGVkIGZyb20gdGhlIGZhc3QgcGF0aCwgZ2V0IHJpZCBvZiBhbnkgcmVtbmFudHMg
b2YgdGhhdAotICAgICAgICAvLyB3aGljaCBtYXkgZXhpc3QuIFRoaXMgcmVhbGx5IG9ubHkgbWF0
dGVycyBmb3IgeDg2LCB3aGljaCBhZGp1c3RzCi0gICAgICAgIC8vIFNQIGZvciBjYWxscy4KLSAg
ICAgICAgc3R1YkppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVn
VDQpOwotICAgIH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkp
LCBHUFJJbmZvOjpyZWdUNCk7Ci0gICAgCi0gICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1w
IHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9j
YXRlKCkpIHsKLSAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJ
bmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChj
YWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7Ci0gICAgZm9yIChDYWxsVG9Db2RlUHRy
IGNhbGxUb0NvZGVQdHIgOiBjYWxscykgewotI2lmIENQVShBUk1fVEhVTUIyKQotICAgICAgICAv
LyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcgZW5zdXJlcyBwcm9wZXIgbGlua2luZyBvbiBBUk0g
VGh1bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBqdW1wcyB0byBhbiBhZGRyZXNzCi0gICAgICAgIC8v
IHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9ybWFsIGNhbGwgY2FsbHMg
YW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCi0gICAgICAgIGJvb2wgaXNU
YWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0NhbGxIZWxwZXJzOjpDYWxs
OjpUYWlsKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWlsQ2FsbCA/IGNhbGxUb0NvZGVQ
dHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2Fs
bCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOwotI2Vsc2UK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRy
PEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgaWYgKCFkb25lLmVtcHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
Y2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3cs
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5
bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgCi0gICAgYXV0byBzdHVi
Um91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCi0gICAg
ICAgIEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICAgICAiUG9seW1vcnBoaWMg
Y2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKLSAgICAgICAg
ICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVy
Q29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxl
QWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMp
KS5kYXRhKCkpLAotICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwg
Y2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCi0gICAgICAgIFdURk1vdmUoZmFzdENvdW50cykpKTsK
LQotICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0
cywgYnV0IHN0aWxsCi0gICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2Vs
bCBjYWxsZWUgd2lsbCBhbHdheXMKLSAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKLSAgICBs
aW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLQotICAgIC8vIElmIHRoZXJlIGhhZCBiZWVu
IGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRo
ZSBHQyBydW5zIGFuZCBzZWVzCi0gICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4K
LSAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5lKSk7Ci0gICAgCi0g
ICAgLy8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMgYSBjYWxsIGNhY2hlIGFwYXJ0
IGZyb20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwKLSAgICAvLyBzdHViLgotICAg
IGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92
ZSgpOwotfQotCi12b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1
bmN0aW9uKGtpbmQpKTsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6
QnlJZDoKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAgIGNhc2UgR2V0QnlL
aW5kOjpUcnlCeUlkOgotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgIGNhc2Ug
R2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5h
bWU6Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCi17Ci0gICAgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAg
ICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogewotICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBk
ZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKLSAgICAgICAg
RnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0
aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKLSAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAg
ICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RP
cHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsK
LSAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUpOwotICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNv
ZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQotICAg
ICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5l
cmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRG
dW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWMgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVs
ZE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYyB8
fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxk
T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOwotICAgIHN3aXRjaCAoa2luZCkg
ewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQp
Ci17Ci0gICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQotICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZSk7Ci0gICAgZWxzZQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6
cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKLXsKLSAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlG
dW5jdGlvbihraW5kKSk7Ci0gICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCi0gICAgICAg
IElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
byk7Ci0gICAgZWxzZQotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNj
ZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLXZvaWQg
cmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBJbmxpbmVBY2Nl
c3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOwot
ICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldENoZWNrUHJpdmF0ZUJy
YW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17
Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFz
SnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19
Ci0KLXZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKLSAgICBJ
bmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgSlNPYmplY3QqIGNhbGxlZSkKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAg
aWYgKCFjYWxsZWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChraW5kICE9IENv
ZGVGb3JDYWxsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoYXV0byogd2FzbUZ1
bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNhbGxlZSkp
Ci0gICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGNhbGxlZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNlMzc3ZWUxMGEyZWY4NGEyM2Q5ZWMyZGQ0
OGNmNjhkNzljN2RlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgL2Rldi9udWxsCkBA
IC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKLSNpbmNsdWRl
ICJQdXRLaW5kLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1lbnVtIGNsYXNzIEdldEJ5S2luZCB7
Ci0gICAgQnlJZCwKLSAgICBCeVZhbCwKLSAgICBUcnlCeUlkLAotICAgIEJ5SWRXaXRoVGhpcywK
LSAgICBCeUlkRGlyZWN0LAotICAgIFByaXZhdGVOYW1lLAotICAgIFByaXZhdGVOYW1lQnlJZCwK
LX07Ci0KLWVudW0gY2xhc3MgUHV0QnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotfTsK
LQotZW51bSBjbGFzcyBEZWxCeUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlWYWwKLX07Ci0KLWVu
dW0gY2xhc3MgSW5CeUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlWYWwsCi0gICAgUHJpdmF0ZU5h
bWUKLX07Ci0KLXZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7
Ci12b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUs
IENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgR2V0QnlLaW5kKTsKLXZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmpl
Y3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0
dWJJbmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwotdm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxP
YmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlm
aWVyLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2lu
ZCwgUHV0S2luZCk7Ci12b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVC
bG9jayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJs
ZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7Ci12
b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKLXZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFu
ZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlcGF0Y2hD
aGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0Kiwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaFNl
dFByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQg
cmVwYXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIHZh
bHVlLCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5k
KTsKLXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPik7Ci12b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIENhbGxMaW5r
SW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7
Ci12b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwotdm9pZCB1bmxp
bmtDYWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7Ci12b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7Ci12
b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQp
Owotdm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlL
aW5kKTsKLXZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERl
bEJ5S2luZCk7Ci12b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IEluQnlLaW5kKTsKLXZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVC
bG9jayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwotTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgSlNPYmplY3QqIGNhbGxlZSk7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCmluZGV4IDI5NzE0N2UxYzRjMDhkY2NkNWY3Yjc4NjQxMWQ4NTViMmExZGU0N2Mu
LmRiZDVhYmQzNzg4ZDcxYjgwMzA1YmI4NTFmYmNjMjcxM2U4N2IwMGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTM0NCw0OCArMzQ0LDI1
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxU
aHVua0ZvclJlZ3VsYXJDYWxsKFZNJiB2bSkKICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZt
LCBDYWxsTW9kZTo6UmVndWxhciwgQ29kZUZvckNhbGwpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3Ry
dWN0KFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6
UmVndWxhciwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDYWxsKFZNJiB2bSkKIHsK
ICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNh
bGwpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNvbnN0cnVjdCk7Ci19Ci0KLXN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0Zv
ckNvbnN0cnVjdENhbGwoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0s
IENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDYWxsKTsKLX0KLQogc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29u
c3RydWN0KFZNJiB2bSkKIHsKICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9k
ZTo6Q29uc3RydWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiB2bSwgQ2FsbE1vZGUgY2FsbE1vZGUpCiB7Ci0g
ICAgYXV0byBtb2RlID0gY2FsbExpbmtJbmZvLmNhbGxNb2RlKCk7Ci0gICAgYXV0byBraW5kID0g
Y2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpOwogICAgIGF1dG8gZ2VuZXJhdG9yID0g
WyZdICgpIC0+IFRodW5rR2VuZXJhdG9yIHsKLSAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAg
ICAgIHN3aXRjaCAoY2FsbE1vZGUpIHsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoK
LSAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKLSAgICAgICAgICAgIHJldHVybiB2aXJ0
dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0OworICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxU
aHVua0ZvclJlZ3VsYXJDYWxsOwogICAgICAgICBjYXNlIENhbGxNb2RlOjpUYWlsOgotICAgICAg
ICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZp
cnR1YWxUaHVua0ZvclRhaWxDYWxsOwotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zv
clRhaWxDb25zdHJ1Y3Q7CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENh
bGw7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OkNvbnN0cnVjdDoKLSAgICAgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtG
b3JDb25zdHJ1Y3RDYWxsOwogICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0
cnVjdENvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKaW5k
ZXggMGY5ZjZlMmQzNmY2ZGQyM2UxODcyNmFjZTYzMTRhMzBhMjAxZGJjZS4uYWI3Y2Y2NmM0MjE1
MWVlMDE5NThjMWFiMjJmMjlmY2Q4ZGQ3MDE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC00OSw3ICs0OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbExp
bmtJbmZvJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVua0ZvcihWTSYsIENhbGxNb2RlKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAppbmRleCBlOGRhZmY3ZDg4YjMw
YzZiZjg0NzIzMTRiZTJmMWM3OTYwZjI0N2Y1Li5kMGIzNzM4OTIxYTRmMDAxNTEyZTdkZWUzYTg0
NDNjNTE5M2JkMjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNw
cApAQCAtNTgsNiArNTgsNyBAQCBleHRlcm4gIkMiIHZvaWQgd2FzbV9lbnRyeSh2b2lkKiwgdm9p
ZCosIHZvaWQqKTsKIGV4dGVybiAiQyIgdm9pZCB2bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGlu
ZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKHZvaWQp
OwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJhbXBvbGluZSh2b2lk
KTsKK2V4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5l
KHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIGV4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lKHZvaWQp
OwogZXh0ZXJuICJDIiB2b2lkIHJldHVybkZyb21MTEludFRyYW1wb2xpbmUodm9pZCk7CiAjZW5k
aWYKQEAgLTE1Myw3ICsxNTQsNyBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAg
c3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9K
SVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQot
ICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQ
dHJUYWcpKTsKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0
ZShKU0VudHJ5UHRyVGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGVS
ZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8
dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxK
U0VudHJ5VHJhbXBvbGluZSkpKSk7CiAgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsSlNFbnRyeVB0clRhZyldPSBjb2Rl
UmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwpAQCAtMTYxLDExICsxNjIsMTkg
QEAgdm9pZCBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVS
ZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGNvZGVSZWYu
Y29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5U2xvd1BhdGhQdHJUYWcpKTsKKyAg
ICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRy
VGFnLCB0cnVlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8dm9pZCosIENGdW5j
dGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxKU0VudHJ5U2xvd1Bh
dGhUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJUYWcpXSA9
IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQorICAgIHsK
KyAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRl
KEpTRW50cnlQdHJUYWcsIGZhbHNlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGVS
ZWYuY29uc3RydWN0KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXRhZ0NvZGVQdHI8
dm9pZCosIENGdW5jdGlvblB0clRhZywgTmF0aXZlVG9KSVRHYXRlUHRyVGFnPigmdGFpbENhbGxX
aXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZSkpKSk7CisgICAgICAgIGdfanNjQ29uZmlnLmxs
aW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsV2l0aG91dFVu
dGFnSlNFbnRyeVB0clRhZyldPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgIH0KICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCmluZGV4IDFhOTVkMWRkMGVhNWVmMzQzMTA2MTViNjkxZWJj
OWExZWFiODJhNmEuLmY5ZDFkYjVhNDY5MzRjNjY3MTZlZjY3NTgwYTVjNWEyMjhjMWQ0YjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAt
NjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCiAj
aW5jbHVkZSAiUHJvdG9DYWxsRnJhbWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIKICNpbmNsdWRlICJTaGFkb3dDaGlja2Vu
LmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCkBA
IC01ODIsNiArNTgzLDE3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHN0YWNrX2NoZWNrKQogICAg
IExMSU5UX1JFVFVSTl9UV08ocGMsIGNhbGxGcmFtZSk7CiB9CiAKK2V4dGVybiAiQyIgU2xvd1Bh
dGhSZXR1cm5UeXBlIGxsaW50X2xpbmtfY2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0Nl
bGwqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbCopCit7
CisgICAgcmV0dXJuIGxpbmtGb3IoY2FsbGVlRnJhbWUsIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCksIGNhbGxMaW5rSW5mbyk7Cit9CisKK2V4dGVybiAiQyIgU2xvd1BhdGhS
ZXR1cm5UeXBlIGxsaW50X3ZpcnR1YWxfY2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0Nl
bGwqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbCopCit7
CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7CisgICAgcmV0dXJuIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSwgY2FsbGVlRnJhbWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVk
KTsKK30KKwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19vYmplY3QpCiB7CiAg
ICAgTExJTlRfQkVHSU4oKTsKQEAgLTE4MTksNyArMTgzMSw4IEBAIHN0YXRpYyBTbG93UGF0aFJl
dHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBj
YWxsZWUsCiAgICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxl
ZSkpOwogICAgICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2Fs
bGVlRnJhbWUpOwogICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICAg
ICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgTExJbnQ6Omdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVG
cmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgICAgIExM
SU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0Vu
dHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc2xvd1BhdGhMb2coIkNh
bGwgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIpOwpAQCAtMTgzOCw3
ICsxODUxLDggQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxs
RnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgY2FsbGVlRnJhbWUt
PnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxs
UmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxs
ZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgIERpc2FsbG93R0Mg
ZGlzYWxsb3dHQzsKLSAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxs
ZWVGcmFtZSwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICBhdXRvKiBjYWxs
ZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwor
ICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgfQogICAgIAogICAgIHNsb3dQYXRoTG9nKCJDb25z
dHJ1Y3RvciBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwgIlxuIik7CkBAIC0x
ODQ3LDcgKzE4NjEsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxs
KENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgIExMSU5UX0NBTExf
VEhST1coZ2xvYmFsT2JqZWN0LCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmpl
Y3QsIGNhbGxlZSkpOwogfQogCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFs
dWUgY2FsbGVlQXNWYWx1ZSwgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxw
dHIpCitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFsdWUgY2FsbGVlQXNWYWx1
ZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFt
ZSgpOwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKQEAgLTE4NTksMTcgKzE4NzMsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBz
ZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAg
ICAKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxs
ZWVBc1ZhbHVlKTsKICAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9u
Kj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgIGlmIChjYWxsZWVBc1ZhbHVlLmluaGVy
aXRzPEludGVybmFsRnVuY3Rpb24+KHZtKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9u
VHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotCi0g
ICAgICAgICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8p
IHsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNh
bGxlckNvZGVCbG9jaywgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7Ci0gICAgICAgICAgICB9
Ci0KICAgICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aDxKU0VudHJ5UHRyVGFnPihjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xv
YmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0Vu
dHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBD
YWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgICAgICBMTElOVF9DQUxM
X1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwg
a2luZCkpOwogICAgIH0KQEAgLTE5MDQsNzQgKzE5MTMsOSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRp
b25LaQogICAgIH0KIAogICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgIAotICAgIGlmICghTExJ
TlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgY2Fs
bExpbmtJbmZvLT5saW5rKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0g
ICAgICAgIGlmIChjb2RlQmxvY2spCi0gICAgICAgICAgICBjb2RlQmxvY2stPmxpbmtJbmNvbWlu
Z0NhbGwoY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgIH0KLQogICAgIGFzc2VydElzVGFn
Z2VkV2l0aDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAg
IExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIE9wJiYgYnl0ZWNvZGUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4ID0gMCkKLXsKLSAgICAv
LyBUaGlzIG5lZWRzIHRvOgotICAgIC8vIC0gU2V0IHVwIGEgY2FsbCBmcmFtZS4KLSAgICAvLyAt
IEZpZ3VyZSBvdXQgd2hhdCB0byBjYWxsIGFuZCBjb21waWxlIGl0IGlmIG5lY2Vzc2FyeS4KLSAg
ICAvLyAtIElmIHBvc3NpYmxlLCBsaW5rIHRoZSBjYWxsJ3MgaW5saW5lIGNhY2hlLgotICAgIC8v
IC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3MgdG8gY2FsbCBhbmQgdGhl
IG5ldyBjYWxsIGZyYW1lLgotICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9w
ZXJhbmQoY2FsbEZyYW1lLCBjYWxsZWVGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCkpOwot
ICAgIAotICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsRnJhbWUgLSBzdGFja09mZnNl
dEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludEluZGV4KTsKLSAgICAKLSAg
ICBjYWxsZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCkpOwotICAgIGNhbGxl
ZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSA9IGNhbGxlZUFzVmFsdWU7Ci0gICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxG
cmFtZSk7Ci0gICAgCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spOwotICAgIHJldHVybiBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFz
VmFsdWUsICZjYWxsTGlua0luZm9Gb3IobWV0YWRhdGEsIGNoZWNrcG9pbnRJbmRleCkpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJ
Tl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJh
bWUsIHBjLT5hczxPcENhbGw+KCksIENvZGVGb3JDYWxsKSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BD
KCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8
T3BUYWlsQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NvbnN0cnVjdCkKLXsKLSAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAg
ICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcENvbnN0
cnVjdD4oKSwgQ29kZUZvckNvbnN0cnVjdCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcEl0ZXJh
dG9yT3Blbj4oKSwgQ29kZUZvckNhbGwsIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsKSk7Ci19
Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwpCi17
Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ss
IGNhbGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JOZXh0PigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVy
YXRvck5leHQ6OmNvbXB1dGVOZXh0KSk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFt
ZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JF
VFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IEpTRW50cnlQdHJUYWcpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2l6
ZV9mcmFtZV9mb3JfdmFyYXJncykKQEAgLTIwNDMsOCArMTk4Nyw4IEBAIGVudW0gY2xhc3MgU2V0
QXJndW1lbnRzV2l0aCB7CiAgICAgQ3VycmVudEFyZ3VtZW50cwogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFNldEFyZ3VtZW50c1dpdGggc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgT3AsIFNl
dEFyZ3VtZW50c1dpdGggc2V0PgoraW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0
dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCkKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKIApAQCAtMjA1
MywxMSArMTk5NywxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgLy8gLSBSZXR1cm4g
YSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwg
ZnJhbWUuCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wPigpOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICBKU1ZhbHVlIGNhbGxl
ZUFzVmFsdWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jYWxsZWUpOwogCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IHZtLm5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwot
Ci0gICAgaWYgKHNldCA9PSBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpIHsKKyAgICB1bnNpZ25l
ZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZtLnZhcmFyZ3NMZW5ndGggKyAxOworICAg
IGlmIGNvbnN0ZXhwciAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCkgewogICAgICAg
ICBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNh
bGxlZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBn
ZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9hcmd1bWVudHMpLCBieXRlY29kZS5tX2Zp
cnN0VmFyQXJnLCB2bS52YXJhcmdzTGVuZ3RoKTsKICAgICAgICAgTExJTlRfQ0FMTF9DSEVDS19F
WENFUFRJT04oZ2xvYmFsT2JqZWN0KTsKICAgICB9IGVsc2UKQEAgLTIwNjcsMjcgKzIwMTIsMzAg
QEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CiAg
ICAgY2FsbEZyYW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUp
KTsKKyAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby51cGRhdGVNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisKKyAgICBhdXRvKiBjYWxs
ZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwor
ICAgIExMSU5UX1JFVFVSTl9UV08ocGMsIGNhbGxlclNQKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVw
PE9wQ2FsbFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNX
aXRoOjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncywgU2V0
QXJndW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncykKIHsKLSAg
ICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBD
b2RlRm9yQ2FsbCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJn
c1NldHVwPE9wVGFpbENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxG
cmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1Nl
dHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2Fs
bCwgU2V0QXJndW1lbnRzV2l0aDo6Q3VycmVudEFyZ3VtZW50cyk7CisgICAgcmV0dXJuIHZhcmFy
Z3NTZXR1cDxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgU2V0QXJndW1lbnRzV2l0aDo6Q3Vy
cmVudEFyZ3VtZW50cz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MpCiB7Ci0gICAgcmV0dXJu
IHZhcmFyZ3NTZXR1cDxPcENvbnN0cnVjdFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JD
b25zdHJ1Y3QsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NT
ZXR1cDxPcENvbnN0cnVjdFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZy
YW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9u
KiBwYywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJldHVyblBvaW50KQpA
QCAtMjExMCw3ICsyMDU4LDggQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxs
RXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24KICAgICAKICAgICB2
bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmVuY29kZShldmFsKGdsb2Jh
bE9iamVjdCwgY2FsbGVlRnJhbWUsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpKTsKICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxs
ZWVGcmFtZSwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgIGF1dG8qIGNhbGxlclNQ
ID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAg
TExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RD
YWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpT
RW50cnlQdHJUYWcpOwogfQogICAgIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Nh
bGxfZXZhbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgK
aW5kZXggZTIwYTBkZmM2Yjg3YWNkNjIyNjhlODhhYTZhYTk2NGZiNmUwOWI2Ni4uZDQzOGZjYjMz
OWRhZmUzN2EzYzE0MWRiZTI0YTZhZDIxMTI5YmI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKQEAgLTM4LDYgKzM4LDggQEAgbmFtZXNwYWNlIExM
SW50IHsKIAogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhY2Vfb3BlcmFu
ZChDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIGludCBvcGVy
YW5kKSBSRUZFUkVOQ0VEX0ZST01fQVNNOwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUg
bGxpbnRfdHJhY2VfdmFsdWUoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJv
bVdoZXJlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgUkVGRVJFTkNFRF9GUk9NX0FTTTsKK2V4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X2xpbmtfY2FsbChDYWxsRnJhbWUqLCBK
U0NlbGwqLCBDYWxsTGlua0luZm8qLCBKU0NlbGwqKTsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIGxsaW50X3ZpcnR1YWxfY2FsbChDYWxsRnJhbWUqLCBKU0NlbGwqLCBDYWxsTGlua0lu
Zm8qLCBKU0NlbGwqKTsKIGV4dGVybiAiQyIgdm9pZCBsbGludF93cml0ZV9iYXJyaWVyX3Nsb3co
Q2FsbEZyYW1lKiwgSlNDZWxsKikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiAK
ICNkZWZpbmUgTExJTlRfU0xPV19QQVRIX0RFQ0wobmFtZSkgXApAQCAtMTE5LDkgKzEyMSw2IEBA
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdW5jX2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19h
c3luY19mdW5jKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2Fz
eW5jX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2V0
X2Z1bmN0aW9uX25hbWUpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9j
YWxsKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdGFpbF9jYWxsKTsK
LUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0KTsKIExMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncyk7
CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX2Zv
cndhcmRfYXJndW1lbnRzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Y2FsbF92YXJhcmdzKTsKQEAgLTEzMSw4ICsxMzAsNiBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUxNik7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2NhbGxfZXZhbF93aWRlMzIpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF90ZWFyX29mZl9hcmd1bWVudHMpOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFRodW5rcy5jcHAKaW5kZXggNDYyY2JmYmU0ZTM0NTY4NDVlMDVhYThiYzBjNDgxMTUz
Y2JiOGQwYS4uMTYwM2MyYzc4NTRjOTk5YmU5ZTZjNTcwNTMzNmNmZjc0MjcyOTBiMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCkBAIC0zNDYsOSArMzQ2
LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRl
SlNHYXRlVGh1bmsodm9pZCogcG9pbnRlciwgUHQKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0Owog
Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDMsIHRhZyk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgaml0
LmZhckp1bXAoR1BSSW5mbzo6cmVnVDMsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwo
R1BSSW5mbzo6cmVnVDUsIHRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpLCBHUFJJbmZvOjpyZWdUNSk7CisgICAgaml0LmZhckp1bXAoR1BSSW5m
bzo6cmVnVDUsIE9wZXJhdGlvblB0clRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpMTEludFRodW5rKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnLCAiTExJbnQgJXMgY2FsbCBnYXRlIHRodW5rIiwgbmFtZSk7CkBAIC0zNjYsMTMgKzM2Niwx
NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVX
YXNtR2F0ZVRodW5rKHZvaWQqIHBvaW50ZXIsCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50ICVzIHdhc20gY2FsbCBnYXRl
IHRodW5rIiwgbmFtZSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcgdGFnKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyB0
YWcsIGJvb2wgdW50YWcpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGppdC51bnRh
Z1B0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0gICAgaml0
LnZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOwotICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QwLCB0YWcpOworICAgIGlmICh1
bnRhZykgeworICAgICAgICBqaXQudW50YWdQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBBUk02
NFJlZ2lzdGVyczo6bHIpOworICAgICAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJl
Z2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgfQorICAgIGppdC5mYXJK
dW1wKEdQUkluZm86OmFyZ3VtZW50R1BSNywgdGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkxMSW50VGh1
bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcsICJMTEludCB0YWlsIGNhbGwgZ2F0ZSB0aHVuayIpOwpAQCAtNTczLDggKzU3NSw4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXR1cm5Mb2NhdGlvblRo
dW5rKE9wY29kZUlEIG9wY29kZUlELCBPcGNvCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9w
X2l0ZXJhdG9yX29wZW4pCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2l0ZXJhdG9yX25l
eHQpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdCkKLSAgICBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Nsb3cpCi0gICAgTExJTlRfUkVUVVJOX0xP
Q0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3cpCisgICAgTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX2NhbGxfdmFyYXJncykKKyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3Ry
dWN0X3ZhcmFyZ3MpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV9pZCkKICAg
ICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X3ZhbCkKICAgICBMTElOVF9SRVRVUk5f
TE9DQVRJT04ob3BfcHV0X2J5X2lkKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50VGh1bmtzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuaAppbmRleCBiODdjNDIwY2JlNDAyYTFmMGNmMDg2ODEwN2I1YWZkNmRiY2Y1NGFjLi4w
NWVjNjAxYzAxNjRjYjk1NGI3M2EyMWM3MzUxZmYwMTBmZWE3MTBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaApAQCAtODgsNyArODgsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBqaXRDYWdlUHRyVGh1bmsoKTsKICNp
ZiBDUFUoQVJNNjRFKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4gY3JlYXRlSlNHYXRlVGh1bmsodm9pZCosIFB0clRhZywgY29uc3QgY2hhciopOwogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlV2FzbUdhdGVUaHVu
ayh2b2lkKiwgUHRyVGFnLCBjb25zdCBjaGFyKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnKTsKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQ
dHJUYWcsIGJvb2wpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4gbG9vcE9TUkVudHJ5R2F0ZVRodW5rKCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPiBlbnRyeU9TUkVudHJ5R2F0ZVRodW5rKCk7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiB3YXNtT1NSRW50cnlHYXRlVGh1bmsoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQppbmRleCBiYjg4YjZmZGIwOTliNDk5YWU2ZmY0ZTgxMDEwMTUwNGRhYTZkNGUzLi4zMDdi
NDFmMTdhZjM4ODZmNjNiZDhhODY0YjUzYmFjNWQ1NDg0YTdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC01NTEsNiAr
NTUxLDcgQEAgY29uc3QgU3ltYm9sVHlwZSA9IGNvbnN0ZXhwciBTeW1ib2xUeXBlCiBjb25zdCBP
YmplY3RUeXBlID0gY29uc3RleHByIE9iamVjdFR5cGUKIGNvbnN0IEZpbmFsT2JqZWN0VHlwZSA9
IGNvbnN0ZXhwciBGaW5hbE9iamVjdFR5cGUKIGNvbnN0IEpTRnVuY3Rpb25UeXBlID0gY29uc3Rl
eHByIEpTRnVuY3Rpb25UeXBlCitjb25zdCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSA9IGNvbnN0ZXhw
ciBJbnRlcm5hbEZ1bmN0aW9uVHlwZQogY29uc3QgQXJyYXlUeXBlID0gY29uc3RleHByIEFycmF5
VHlwZQogY29uc3QgRGVyaXZlZEFycmF5VHlwZSA9IGNvbnN0ZXhwciBEZXJpdmVkQXJyYXlUeXBl
CiBjb25zdCBQcm94eU9iamVjdFR5cGUgPSBjb25zdGV4cHIgUHJveHlPYmplY3RUeXBlCkBAIC0x
MTUxLDI3ICsxMTUyLDI3IEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAgICAgICAgIGNsb29w
Q2FsbEpTRnVuY3Rpb24gY2FsbGVlCiAgICAgZWxzaWYgQVJNNjRFCiAgICAgICAgIG1hY3JvIGNh
bGxOYXJyb3coKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpv
ZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkg
KiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRh
ZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFt
ZSUpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBvbGluZV8lb3Bjb2RlTmFt
ZSU6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisgICAgICAgICAgICBjYWxsIHQ1
LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGNhbGxXaWRlMTYoKQot
ICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0Nv
bmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJV93aWRlMTYpICogUHRy
U2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBj
YWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9m
ZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dp
ZGUxNikgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0
ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9saW5lXyVvcGNvZGVO
YW1lJV93aWRlMTY6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisgICAgICAgICAg
ICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGNhbGxX
aWRlMzIoKQotICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZz
ZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJV93aWRl
MzIpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcgIyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhw
ciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29k
ZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9saW5l
XyVvcGNvZGVOYW1lJV93aWRlMzI6Ci0gICAgICAgICAgICBjYWxsIHQzLCBjYWxsUHRyVGFnCisg
ICAgICAgICAgICBjYWxsIHQ1LCBjYWxsUHRyVGFnCiAgICAgICAgIGVuZAogCi0gICAgICAgIG1v
dmUgY2FsbGVlLCB0MworICAgICAgICBtb3ZlIGNhbGxlZSwgdDUKICAgICAgICAgc2l6ZShjYWxs
TmFycm93LCBjYWxsV2lkZTE2LCBjYWxsV2lkZTMyLCBtYWNybyAoZ2VuKSBnZW4oKSBlbmQpCiAg
ICAgZWxzZQogICAgICAgICBjYWxsIGNhbGxlZSwgY2FsbFB0clRhZwpAQCAtMTIwOSwxMiArMTIx
MCwyMyBAQCBtYWNybyBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaQogICAgIGVuZAogZW5kCiAKLW1hY3JvIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBj
YWxsUHRyVGFnKQotICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCittYWNybyBwcmVw
YXJlRm9yUmVndWxhckNhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCiBlbmQKIAotIyBz
cCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZQotbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxl
ZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCittYWNybyBpbnZva2VG
b3JSZWd1bGFyQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgbWF5YmVPbGRDRlIs
IGNhbGxQdHJUYWcpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgY2FsbGVlLCBjYWxsUHRyVGFnKQorZW5kCisKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHBy
ZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2Fs
bFB0clRhZykKK2VuZAorCittYWNybyBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKCkKK2VuZAor
CisjIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQ1NpemUKKyMg
V2UgbGVhdmUgY2ZyIHRlbXA0IHRvIHVzZSBpdCBmb3IgdW50YWdnaW5nLgorbWFjcm8gcHJlcGFy
ZUZvclRhaWxDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQogICAgIHJlc3RvcmVDYWxs
ZWVTYXZlc1VzZWRCeUxMSW50KCkKIAogICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpc1tjZnJdLCB0ZW1wMgpAQCAtMTIzMiwxOCArMTI0NCwxNyBAQCBt
YWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1w
NCwgY2FsbFB0clRhZykKICAgICBtb3ZlIGNmciwgdGVtcDEKICAgICBhZGRwIHRlbXAyLCB0ZW1w
MQogCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
W3NwXSwgdGVtcDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZVtzcF0sIHRlbXAyCiAgICAgIyBXZSBhc3N1
bWUgPCAyXjI4IGFyZ3VtZW50cwogICAgIG11bGkgU2xvdFNpemUsIHRlbXAyCiAgICAgYWRkaSBT
dGFja0FsaWdubWVudCAtIDEgKyBDYWxsRnJhbWVIZWFkZXJTaXplLCB0ZW1wMgogICAgIGFuZGkg
flN0YWNrQWxpZ25tZW50TWFzaywgdGVtcDIKIAogICAgIGlmIEFSTXY3IG9yIEFSTTY0IG9yIEFS
TTY0RSBvciBDX0xPT1Agb3IgQ19MT09QX1dJTiBvciBNSVBTIG9yIFJJU0NWNjQKLSAgICAgICAg
YWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKICAgICAgICAgc3ViaSBDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgQ2FsbGVyRnJhbWVBbmRQQzo6cmV0dXJuUENb
Y2ZyXSwgbHIKICAgICBlbHNlCi0gICAgICAgIGFkZHAgUHRyU2l6ZSwgc3AKKyAgICAgICAgc3Vi
cCBQdHJTaXplLCBzcAogICAgICAgICBzdWJpIFB0clNpemUsIHRlbXAyCiAgICAgICAgIGxvYWRw
IFB0clNpemVbY2ZyXSwgdGVtcDMKICAgICAgICAgc3RvcmVwIHRlbXAzLCBbc3BdCkBAIC0xMjcw
LDkgKzEyODEsMTIgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRl
bXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCiAgICAgZW5kCiAKICAgICBtb3ZlIHRlbXAx
LCBzcAorZW5kCisKK21hY3JvIGludm9rZUZvclRhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKICAgICBpZiBBUk02NEUKLSAgICAg
ICAgbW92ZSB0ZW1wNCwgYTIKLSAgICAgICAgbW92ZSBjYWxsZWUsIGEwCisgICAgICAgIG1vdmUg
bWF5YmVPbGRDRlIsIGEyCisgICAgICAgIG1vdmUgY2FsbGVlLCBhNwogICAgICAgICBsZWFwIEpT
Q0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25z
dGV4cHIgR2F0ZTo6dGFpbENhbGwlY2FsbFB0clRhZyUpICogUHRyU2l6ZSwgYTEKICAgICAgICAg
am1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjICVjYWxsUHRyVGFnJQogICAgIGVsc2UK
QEAgLTEyODAsNiArMTI5NCwyMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0
ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBlbmQKIGVuZAogCisj
IHQ1IGlzIG1ldGFkYXRhCittYWNybyBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbChvcGNv
ZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxS
ZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxQdHJUYWcpCisgICAgaWYgQVJNNjRFCisgICAgICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIGE3CisgICAgICAgIGxlYXAgSlNDQ29uZmln
ICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBH
YXRlOjp0YWlsQ2FsbFdpdGhvdXRVbnRhZyVjYWxsUHRyVGFnJSkgKiBQdHJTaXplLCBhMQorICAg
ICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJUYWclCisgICAg
ZWxzZQorICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCBhMQorICAgICAg
ICBqbXAgYTEsIGNhbGxQdHJUYWcKKyAgICBlbmQKK2VuZAorCittYWNybyBwcmVwYXJlRm9yU2xv
d1RhaWxDYWxsKCkKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCitlbmQKKwog
bWFjcm8gc2xvd1BhdGhGb3JDb21tb25DYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVj
dCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBzbG93UGF0aEZvckNhbGwo
b3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRj
aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogZW5kCkBAIC0xMjkxLDcgKzEzMjEsNyBAQCBtYWNy
byBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVBy
b2ZpbGVOYW1lLCBkc3RWaXJ0dQogICAgICAgICBtYWNybyAoY2FsbGVlLCBjYWxsZWVGcmFtZVB0
cikKICAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250VXBkYXRlU1AKICAgICAg
ICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCi0gICAgICAgICAgICBwcmVwYXJlQ2FsbChj
YWxsZWUsIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpCisgICAgICAgICAg
ICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKICAgICAgICAgLmRvbnRVcGRhdGVTUDoKICAg
ICAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNo
LCBjYWxsZWUsIEpTRW50cnlTbG93UGF0aFB0clRhZykKICAgICAgICAgZW5kKQpAQCAtMTgyMCwx
MiArMTg1MCwxNiBAQCBpZiBBUk02NEUKICAgICBnbG9iYWwgX3RhaWxDYWxsSlNFbnRyeVRyYW1w
b2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZToKICAgICAgICAgdW50YWdSZXR1
cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwgSlNFbnRyeVB0clRhZworICAgICAgICBqbXAg
YTcsIEpTRW50cnlQdHJUYWcKIAogICAgIGdsb2JhbCBfdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhU
cmFtcG9saW5lCiAgICAgX3RhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJhbXBvbGluZToKICAgICAg
ICAgdW50YWdSZXR1cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwgSlNFbnRyeVNsb3dQYXRo
UHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZworCisgICAgZ2xvYmFsIF90YWls
Q2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lCisgICAgX3RhaWxDYWxsV2l0aG91dFVu
dGFnSlNFbnRyeVRyYW1wb2xpbmU6CisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAg
ICAgZ2xvYmFsIF9leGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZQogICAgIF9leGNlcHRpb25IYW5k
bGVyVHJhbXBvbGluZToKQEAgLTIzMjUsMTcgKzIzNTksMTcgQEAgZW5kKQogCiAKICMgd2UgY2Fu
J3QgdXNlIGNhbGxPcCBiZWNhdXNlIHdlIGNhbid0IHBhc3MgYGNhbGxgIGFzIHRoZSBvcGNvZGUg
bmFtZSwgc2luY2UgaXQncyBhbiBpbnN0cnVjdGlvbiBuYW1lCi1jb21tb25DYWxsT3Aob3BfY2Fs
bCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
bWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY29tbW9uQ2FsbE9wKG9wX2NhbGwsIF9sbGludF9zbG93
X3BhdGhfY2FsbCwgT3BDYWxsLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3Vs
YXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dS
ZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogICAgIGFycmF5UHJvZmlsZUZvckNh
bGwoT3BDYWxsLCBnZXR1KQogZW5kKQogCiAKLW1hY3JvIGNhbGxPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKLSAgICBjb21tb25DYWxsT3Aob3BfJW9wY29kZU5h
bWUlLCBfbGxpbnRfc2xvd19wYXRoXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBwcmVwYXJl
Q2FsbCwgZm4pCittYWNybyBjYWxsT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBwcmVwYXJl
Q2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIGZu
KQorICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9w
Y29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJl
UG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCiBlbmQKIAogCi1jYWxsT3AodGFpbF9j
YWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0
YSkKK2NhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52
b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9y
U2xvd1RhaWxDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJyYXlQcm9maWxlRm9y
Q2FsbChPcFRhaWxDYWxsLCBnZXR1KQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgp
CiAgICAgIyByZWxvYWQgbWV0YWRhdGEgc2luY2UgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3Vl
KCkgbWlnaHQgaGF2ZSB0cmFzaGVkIHQ1CkBAIC0yMzQzLDcgKzIzNzcsNyBAQCBjYWxsT3AodGFp
bF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRh
ZGF0YSkKIGVuZCkKIAogCi1jYWxsT3AoY29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKK2NhbGxPcChjb25zdHJ1
Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJD
YWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1
bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAKIAogbWFjcm8gYnJhbmNoSWZF
eGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQpAQCAtMjM1NCw0NyArMjM4OCwyOSBAQCBtYWNybyBi
cmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAubm9FeGNlcHRpb246ICAgIAogZW5k
CiAKLW1hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBk
aXNwYXRjaCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQotICAgIGNhbGxT
bG93UGF0aChmcmFtZVNsb3dQYXRoKQotICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJv
d19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQotICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKLSAg
ICBpZiBKU1ZBTFVFNjQKLSAgICAgICAgbW92ZSByMSwgc3AKLSAgICBlbHNlCi0gICAgICAgICMg
VGhlIGNhbGxlZUZyYW1lIGlzIG5vdCBzdGFjayBhbGlnbmVkLCBtb3ZlIGRvd24gYnkgQ2FsbGVy
RnJhbWVBbmRQQ1NpemUgdG8gYWxpZ24KLSAgICAgICAgaWYgQVJNdjcKLSAgICAgICAgICAgIHN1
YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCB0MgotICAgICAgICAgICAgbW92ZSB0Miwgc3AK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUs
IHNwCi0gICAgICAgIGVuZAotICAgIGVuZAotICAgIHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNv
ZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNh
bGwpCi1lbmQKLQogCi1sbGludE9wKG9wX2NhbGxfdmFyYXJncywgT3BDYWxsVmFyYXJncywgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZG9DYWxsVmFyYXJncyhvcF9jYWxsX3ZhcmFy
Z3MsIHNpemUsIE9wQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVf
ZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY2FsbF92YXJhcmdzLCBwcmVwYXJl
Rm9yUmVndWxhckNhbGwpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX2NhbGxfdmFyYXJncywgT3BD
YWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4p
CisgICAgZG9DYWxsVmFyYXJncyhvcF9jYWxsX3ZhcmFyZ3MsIHNpemUsIGdldCwgT3BDYWxsVmFy
YXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19w
YXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY2FsbF92YXJhcmdz
LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9y
UG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCkKIGVuZCkK
IAotbGxpbnRPcChvcF90YWlsX2NhbGxfdmFyYXJncywgT3BUYWlsQ2FsbFZhcmFyZ3MsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF90YWlsX2NhbGxf
dmFyYXJncywgT3BUYWlsQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAg
IyBXZSBsaWUgYW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmluZyBp
dCBzaW5jZSB3ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBvcGNv
ZGUKLSAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBzaXplLCBPcFRhaWxD
YWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFy
YXJncywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclRhaWxD
YWxsKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIHNpemUsIGdldCwg
T3BUYWlsQ2FsbFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
X2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRo
X3RhaWxfY2FsbF92YXJhcmdzLCBwcmVwYXJlRm9yVGFpbENhbGwsIGludm9rZUZvclRhaWxDYWxs
LCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFyZUZvclNsb3dUYWlsQ2FsbCkK
IGVuZCkKIAogCi1sbGludE9wKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgT3BUYWls
Q2FsbEZvcndhcmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQorbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQogICAgICMgV2UgbGllIGFu
ZCBwZXJmb3JtIHRoZSB0YWlsIGNhbGwgaW5zdGVhZCBvZiBwcmVwYXJpbmcgaXQgc2luY2Ugd2Ug
Y2FuJ3QKICAgICAjIHByZXBhcmUgdGhlIGZyYW1lIGZvciBhIGNhbGwgb3Bjb2RlCi0gICAgZG9D
YWxsVmFyYXJncyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHNpemUsIE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1l
X2Zvcl9mb3J3YXJkX2FyZ3VtZW50cywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMsIHByZXBhcmVGb3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgc2l6ZSwgZ2V0LCBPcFRhaWxDYWxsRm9yd2FyZEFy
Z3VtZW50cywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xv
d19wYXRoX3NpemVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRo
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VG
b3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93
VGFpbENhbGwpCiBlbmQpCiAKIAotbGxpbnRPcChvcF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25z
dHJ1Y3RWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJh
cmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBPcENvbnN0cnVjdFZhcmFyZ3MsIGRpc3Bh
dGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93
X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCkKK2xsaW50T3BX
aXRoTWV0YWRhdGEob3BfY29uc3RydWN0X3ZhcmFyZ3MsIE9wQ29uc3RydWN0VmFyYXJncywgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgZG9DYWxsVmFy
YXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcENvbnN0cnVjdFZhcmFyZ3Ms
IG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9z
aXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdz
LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9y
UG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCkKIGVuZCkK
IAogCkBAIC0yNTEwLDYgKzI1MjYsOTEgQEAgb3AobGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29u
c3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAgaW50ZXJuYWxGdW5jdGlvbkNhbGxUcmFt
cG9saW5lKEludGVybmFsRnVuY3Rpb246Om1fZnVuY3Rpb25Gb3JDb25zdHJ1Y3QpCiBlbmQpCiAK
KyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8q
CisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CittYWNybyBsaW5rU2xvd1BhdGhGb3Io
ZnVuY3Rpb24pCisgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCisgICAgbG9hZHAgSlNHbG9iYWxPYmpl
Y3Q6Om1fdm1bdDNdLCB0MQorICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDFdCisg
ICAgbW92ZSB0MiwgYTIKKyAgICBtb3ZlIHQzLCBhMQorICAgIG1vdmUgY2ZyLCBhMAorICAgIGND
YWxsNChmdW5jdGlvbikKKyAgICBmdW5jdGlvbkVwaWxvZ3VlKCkKKyAgICB1bnRhZ1JldHVybkFk
ZHJlc3Mgc3AKKyAgICBidHB6IHIxLCAuZG9Ob3RUcmFzaAorICAgIHByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbCh0MSkKKyAgICBwcmVwYXJlRm9yVGFpbENhbGwodDEsIHQyLCB0MywgdDQp
CisgICAgdW50YWdSZXR1cm5BZGRyZXNzIHQ0CisuZG9Ob3RUcmFzaDoKKyAgICBqbXAgdDAsIEpT
RW50cnlQdHJUYWcKK2VuZAorCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyMg
dDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorbWFj
cm8gdmlydHVhbFRodW5rRm9yKG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrLCBpbnRlcm5h
bEZ1bmN0aW9uVHJhbXBvbGluZSwgcHJlcGFyZUNhbGwsIHNsb3dDYXNlKQorICAgIGFkZGkgMSwg
Q2FsbExpbmtJbmZvOjptX3Nsb3dQYXRoQ291bnRbdDJdCisgICAgaWYgSlNWQUxVRTY0CisgICAg
ICAgIG1vdmUgTm90Q2VsbE1hc2ssIHQxCisgICAgICAgIGJ0cW56IHQwLCB0MSwgc2xvd0Nhc2UK
KyAgICBlbHNlCisgICAgICAgIGJpbmVxIHQxLCBDZWxsVGFnLCBzbG93Q2FzZQorICAgIGVuZAor
ICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgSlNGdW5jdGlvblR5cGUsIC5ub3RKU0Z1bmN0
aW9uCisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9leGVjdXRhYmxlT3JSYXJlRGF0YVt0MF0sIHQx
CisgICAgYnRweiB0MSwgKGNvbnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIC5pc0V4
ZWN1dGFibGUKKyAgICBsb2FkcCAoRnVuY3Rpb25SYXJlRGF0YTo6bV9leGVjdXRhYmxlIC0gKGNv
bnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpW3QxXSwgdDEKKy5pc0V4ZWN1dGFibGU6
CisgICAgbG9hZHAgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tbdDFdLCB0MQorICAgIGJ0
cHogdDEsIHNsb3dDYXNlCisuY2FsbENvZGU6CisgICAgcHJlcGFyZUNhbGwodDUsIHQyLCB0Mywg
dDQpCisgICAgam1wIHQxLCBKU0VudHJ5UHRyVGFnCisubm90SlNGdW5jdGlvbjoKKyAgICBiYm5l
cSBKU0NlbGw6Om1fdHlwZVt0MF0sIEludGVybmFsRnVuY3Rpb25UeXBlLCBzbG93Q2FzZQorICAg
IHByZXBhcmVDYWxsKHQ1LCB0MiwgdDMsIHQ0KQorICAgIGptcCBpbnRlcm5hbEZ1bmN0aW9uVHJh
bXBvbGluZQorZW5kCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBp
cyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGlu
dF9saW5rX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xs
aW50X2xpbmtfY2FsbCkKK2VuZCkKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVl
CisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QK
K29wKGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxU
aHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBf
bGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRl
bXAyLCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtT
bG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQorCisjIDY0Yml0OnQwIDMyYml0
KHQwLHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIn
cyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBvbGluZSwg
bWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBfbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3Ry
dWN0X3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkgZW5kLCAu
c2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFs
X2NhbGwpCitlbmQpCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBp
cyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGlu
dF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVu
a0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBfbGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAy
LCB0ZW1wMywgdGVtcDQpCisgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0
ZW1wMSkKKyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRl
bXA0KQorICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgdGVtcDQKKyAgICBlbmQsIC5zbG93Q2Fz
ZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkK
K2VuZCkKIAogaWYgSklUCiAgICAgbWFjcm8gbG9hZEJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmNwcAppbmRleCBjMDRmZmQ2YjBiYzNmMjZlMTkyZjA2ZjJiYmY3NGIwNjRkY2IyNzlhLi45ODc2
ZWY2ZWY3NDJhY2VlZGFlMjY5YTJhYjQ1NGM1YjYyY2Q1MTZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCkBAIC0xMjksNiAr
MTI5LDggQEAgdXNpbmcgV2ViQ29uZmlnOjpnX2NvbmZpZzsKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIENhbGxMaW5rSW5mbzsKKwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBDTG9vcFJl
Z2lzdGVyIGlzIHRoZSBzdG9yYWdlIGZvciBhbiBlbXVsYXRlZCBDUFUgcmVnaXN0ZXIuCiAvLyBJ
dCBkZWZpbmVzIHRoZSBwb2xpY3kgb2YgaG93IGludHMgc21hbGxlciB0aGFuIGludHB0cl90IGFy
ZSBwYWNrZWQgaW50byB0aGUKQEAgLTE2Niw2ICsxNjgsNyBAQCBjbGFzcyBDTG9vcFJlZ2lzdGVy
IHsKICAgICBvcGVyYXRvciBQcm90b0NhbGxGcmFtZSooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
UHJvdG9DYWxsRnJhbWUqPihtX3ZhbHVlKTsgfQogICAgIG9wZXJhdG9yIFJlZ2lzdGVyKigpIHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpc3Rlcio+KG1fdmFsdWUpOyB9CiAgICAgb3BlcmF0b3Ig
Vk0qKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFZNKj4obV92YWx1ZSk7IH0KKyAgICBvcGVyYXRv
ciBDYWxsTGlua0luZm8qKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PENhbGxMaW5rSW5mbyo+KG1f
dmFsdWUpOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5h
YmxlX2lmX3Q8c2l6ZW9mKFQpID09IHNpemVvZih1aW50cHRyX3QpPj4KICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgb3BlcmF0b3I9KFQgdmFsdWUpIHsgbV92YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHZhbHVlKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCA5MDNlNWE0NWIxYjY2ODJmZDI4
NzhiOTc5NDg1MmFlZmQ2NzUxZDVlLi5kOGI2MzA4YTNlNmZkNDVmMmMzNWQwYjI3YTQ0OTRiOThk
YTYwMzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAtMTE4LDcgKzExOCw5IEBAIG1hY3JvIGNDYWxs
MlZvaWQoZnVuY3Rpb24pCiBlbmQKIAogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQotICAgIGlmIEFS
TXY3IG9yIE1JUFMKKyAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgorICAgICAgICBjbG9vcENh
bGxTbG93UGF0aDQgZnVuY3Rpb24sIGEwLCBhMSwgYTIsIGEzCisgICAgZWxzaWYgQVJNdjcgb3Ig
TUlQUwogICAgICAgICBjYWxsIGZ1bmN0aW9uCiAgICAgZWxzaWYgWDg2IG9yIFg4Nl9XSU4KICAg
ICAgICAgcHVzaCBhMwpAQCAtMjE1MSwzNSArMjE1Myw2MCBAQCBtYWNybyBhcnJheVByb2ZpbGVG
b3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAgICBiaW5lcSBUaGlzQXJndW1lbnRPZmZzZXQg
KyBUYWdPZmZzZXRbY2ZyLCB0MywgOF0sIENlbGxUYWcsIC5kb25lCiAgICAgbG9hZGkgVGhpc0Fy
Z3VtZW50T2Zmc2V0ICsgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XSwgdDAKICAgICBsb2FkaSBK
U0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MAotICAgIHN0b3JlaSB0MCwgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3Ry
dWN0dXJlSURbdDVdCisgICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKLW1h
Y3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKQotICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXRDYWxsZWUodDAp
CisjIHQ1IGhvbGRzIG1ldGFkYXRhLgorbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93
UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93
Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3Rh
cnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIGdldENhbGxlZSh0MykKIAot
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxs
ZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXRbdDVdLCB0MgotICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGVQYXlsb2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0MywgLm9wQ2FsbFNsb3cpCi0gICAg
YmluZXEgdDMsIHQyLCAub3BDYWxsU2xvdworICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDMsIHQxLCB0MCkKKworICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
CiAgICAgZ2V0QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAgICAgbmVnaSB0
MwogICAgIGFkZHAgY2ZyLCB0MyAgIyB0MyBjb250YWlucyB0aGUgbmV3IHZhbHVlIG9mIGNmcgot
ICAgIHN0b3JlaSB0MiwgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFt0M10KLSAgICBnZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyh0MikgICAgCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCisgICAgZ2V0QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXModDIpCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAr
IFBheWxvYWRPZmZzZXRbdDNdCi0gICAgc3RvcmVpIENlbGxUYWcsIENhbGxlZSArIFRhZ09mZnNl
dFt0M10KKworICAgICMgU3RvcmUgbG9jYXRpb24gYml0cyBhbmQgfGNhbGxlZXwsIGFuZCBjb25m
aWd1cmUgc3AuCisgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRh
Z09mZnNldFtjZnJdCisgICAgc3RvcmVpIHQwLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3QzXQor
ICAgIHN0b3JlaSB0MSwgQ2FsbGVlICsgVGFnT2Zmc2V0W3QzXQogICAgIG1vdmUgdDMsIHNwCi0g
ICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5t
X21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0g
ICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFs
dWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNF
bnRyeVB0clRhZykKKyAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorCisgICAgYmlu
ZXEgdDEsIENlbGxUYWcsIC5vcENhbGxTbG93CisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDMKKyAgICBi
dHB6IHQzLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwg
Lm5vdFBvbHltb3JwaGljCisgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRh
ZyByZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9s
aW5lIHNlcGFyYXRlbHkuCisgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBw
b2x5bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHlt
b3JwaGljIHRodW5rIHNpZGUuCisgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgSlNFbnRyeVB0clRhZykKKyAgICBqbXAgLmdvUG9seW1vcnBoaWMKKworLm5vdFBv
bHltb3JwaGljOgorICAgIGJwbmVxIHQwLCB0MywgLm9wQ2FsbFNsb3cKKyAgICBwcmVwYXJlQ2Fs
bCh0MiwgdDMsIHQ0LCB0MSkKKworLmdvUG9seW1vcnBoaWM6CisgICAgbG9hZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2Fs
bERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQogCiAub3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZv
ckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBk
c3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAg
IyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgIyB0MiBpcyBDYWxsTGlua0lu
Zm8qCisgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgIGFkZHAgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZv
KiBpbiB0MgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIHQzCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisg
ICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUl
X3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCiBlbmQKICAgICAgICAgCi1tYWNy
byBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFy
ZUNhbGwsIHByb2xvZ3VlKQorbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRo
LCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBo
aWMsIHByZXBhcmVTbG93Q2FsbCwgcHJvbG9ndWUpCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKQEAgLTIxODgsNyArMjIx
NSw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3Ry
dWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAg
ICAgICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkKLSAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkK
KyAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1h
Y3JvIGdldEFyZ3VtZW50U3RhcnQoZHN0KQpAQCAtMjE5OSwxMCArMjIyNiw2OCBAQCBtYWNybyBj
b21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNh
bGwsIHByb2xvZ3VlKQogICAgICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJn
YywgZHN0KQogICAgICAgICBlbmQKICAgICAgICAgCi0gICAgICAgIGNhbGxIZWxwZXIob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNh
bGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0
LCBnZXRBcmd1bWVudENvdW50KQorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRhCisgICAgICAg
IGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxl
LCBtX2RzdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJl
cGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKIAorbWFjcm8gZG9D
YWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBnZXQsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xv
d1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3Jw
aGljLCBwcmVwYXJlU2xvd0NhbGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCisg
ICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xp
bmUpCisgICAgIyBjYWxsZWVGcmFtZSBpbiByMQorICAgIGlmIEpTVkFMVUU2NAorICAgICAgICBt
b3ZlIHIxLCBzcAorICAgIGVsc2UKKyAgICAgICAgIyBUaGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0
YWNrIGFsaWduZWQsIG1vdmUgZG93biBieSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGlnbgor
ICAgICAgICBpZiBBUk12NworICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1Np
emUsIHQyCisgICAgICAgICAgICBtb3ZlIHQyLCBzcAorICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKKyAgICAgICAgZW5kCisgICAgZW5k
CisgICAgY2FsbENhbGxTbG93UGF0aCgKKyAgICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhv
c2UgYXJlIHIwIGFuZCByMQorICAgICAgICBtYWNybyAocmVzdG9yZWRQQ09yVGhyb3csIGNhbGxl
ZUZyYW1lUHRyKQorICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVT
UAorICAgICAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgICAgICAgICBtb3Zl
IGNhbGxlZUZyYW1lUHRyLCBzcAorICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MikKKyAgICAg
ICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxLCB0MCkKKyAgICAgICAg
ICAgIG1ldGFkYXRhKHQ1LCB0MikKKworICAgICAgICAgICAgYmluZXEgdDEsIENlbGxUYWcsIC5v
cENhbGxTbG93CisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
Y2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MworICAgICAgICAgICAgYnRw
eiB0MywgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5u
b3RQb2x5bW9ycGhpYworICAgICAgICAgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5v
dCB1bnRhZyByZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0
cmFtcG9saW5lIHNlcGFyYXRlbHkuCisgICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVu
dGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9u
ZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBhcmVQb2x5
bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUs
IGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAg
ICBqbXAgLmdvUG9seW1vcnBoaWMKKworICAgICAgICAubm90UG9seW1vcnBoaWM6CisgICAgICAg
ICAgICBicG5lcSB0MCwgdDMsIC5vcENhbGxTbG93CisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0
MiwgdDMsIHQ0LCB0MSkKKworICAgICAgICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBpbnZva2VDYWxs
KG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0Vmly
dHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisgICAgICAg
IC5vcENhbGxTbG93OgorICAgICAgICAgICAgIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2Fs
bGVlCisgICAgICAgICAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAgICAgICAgICMgdDMg
aXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICAgICAgICAgIGFkZHAgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBpbiB0
MgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5r
SW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCB0MworICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2Jh
bE9iamVjdFt0M10sIHQzCisgICAgICAgICAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgICAgICAg
ICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCBK
U0VudHJ5UHRyVGFnKQorICAgICAgICAuZG9udFVwZGF0ZVNQOgorICAgICAgICAgICAgam1wIF9s
bGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCisgICAgICAgIGVuZCkKK2VuZAor
CiBsbGludE9wKG9wX3JldCwgT3BSZXQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQogICAg
IGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgZ2V0KG1fdmFsdWUsIHQyKQpAQCAt
Mjg2Niw3ICsyOTUxLDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBP
cEl0ZXJhdG9yT3BlbiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICAgICAgbW92ZSAx
LCBkc3QKICAgICBlbmQKIAotICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50
X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9y
UHJvZmlsZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0
QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5n
VGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKKyAgICBtZXRhZGF0YSh0
NSwgdDApCisgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRo
X2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBt
X2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBw
cmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2Fs
bCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRB
cmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQp
CiAKIC5nZXRCeUlkU3RhcnQ6CiAgICAgbWFjcm8gc3RvcmVOZXh0QW5kRGlzcGF0Y2godmFsdWVU
YWcsIHZhbHVlUGF5bG9hZCkKQEAgLTI5MjcsNyArMzAxMyw4IEBAIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfaXRlcmF0b3JfbmV4dCwgT3BJdGVyYXRvck5leHQsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoCiAgICAgZW5kCiAKICAgICAjIFVzZSBtX3ZhbHVlIHNsb3QgYXMgYSB0bXAgc2luY2Ug
d2UgYXJlIGdvaW5nIHRvIHdyaXRlIHRvIGl0IGxhdGVyLgotICAgIGNhbGxIZWxwZXIob3BfaXRl
cmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0
b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNh
bGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0
QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50
KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX25leHQs
IF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9yTmV4dCwgbV9u
ZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VG
b3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVG
b3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEs
IGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5j
bHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0OgogICAgIG1hY3JvIHN0b3JlRG9uZUFu
ZEptcFRvR2V0VmFsdWUoZG9uZVZhbHVlVGFnLCBkb25lVmFsdWVQYXlsb2FkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpp
bmRleCBhOTEzMTRmY2U5ZWU0NGNhNmUwYmFjNzgyZDliZTJmNTljMGE4MzcwLi4zOTI1YzdjMzZj
NGUzODAwMjgzNzJmYmY2YmRmNWU3MTRjOTY1YjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMTQzLDcgKzE0
Myw5IEBAIGVuZAogIyBUaGlzIGJhcmVseSB3b3Jrcy4gYXJnMyBhbmQgYXJnNCBzaG91bGQgcHJv
YmFibHkgYmUgaW1tZWRpYXRlcy4KIG1hY3JvIGNDYWxsNChmdW5jdGlvbikKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCh0NCwgMHhiYWQwYzAwNCkKLSAgICBpZiBYODZfNjQgb3IgQVJN
NjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKKyAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgorICAg
ICAgICBjbG9vcENhbGxTbG93UGF0aDQgZnVuY3Rpb24sIGEwLCBhMSwgYTIsIGEzCisgICAgZWxz
aWYgWDg2XzY0IG9yIEFSTTY0IG9yIEFSTTY0RSBvciBSSVNDVjY0CiAgICAgICAgIGNhbGwgZnVu
Y3Rpb24KICAgICBlbHNpZiBYODZfNjRfV0lOCiAgICAgICAgICMgT24gV2luNjQsIHJjeCwgcmR4
LCByOCwgYW5kIHI5IGFyZSB1c2VkIGZvciBwYXNzaW5nIHRoZSBmaXJzdCBmb3VyIHBhcmFtZXRl
cnMuCkBAIC0zMDksMTIgKzMxMSwxMiBAQCBtYWNybyBtYWtlSmF2YVNjcmlwdENhbGwoZW50cnks
IHByb3RvQ2FsbEZyYW1lLCB0ZW1wMSwgdGVtcDIpCiAgICAgaWYgQ19MT09QIG9yIENfTE9PUF9X
SU4KICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBlbnRyeQogICAgIGVsc2lmIEFSTTY0RQot
ICAgICAgICBtb3ZlIGVudHJ5LCB0MwotICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhw
ciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6dm1FbnRy
eVRvSmF2YVNjcmlwdCkgKiBQdHJTaXplLCBhMgotICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9K
SVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZworICAgICAgICBtb3ZlIGVudHJ5LCB0NQorICAg
ICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0
ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6dm1FbnRyeVRvSmF2YVNjcmlwdCkgKiBQdHJTaXplLCBh
NworICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRh
ZwogICAgICAgICBnbG9iYWwgX3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lCiAgICAgICAg
IF92bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZToKLSAgICAgICAgY2FsbCB0MywgSlNFbnRy
eVB0clRhZworICAgICAgICBjYWxsIHQ1LCBKU0VudHJ5UHRyVGFnCiAgICAgZWxzZQogICAgICAg
ICBjYWxsIGVudHJ5LCBKU0VudHJ5UHRyVGFnCiAgICAgZW5kCkBAIC0yMzYwLDQxICsyMzYyLDU4
IEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGxv
YWRxIFRoaXNBcmd1bWVudE9mZnNldFtjZnIsIHQzLCA4XSwgdDAKICAgICBidHFueiB0MCwgbm90
Q2VsbE1hc2ssIC5kb25lCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDMK
LSAgICBzdG9yZWkgdDMsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8u
bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQorICAgIHN0b3JlaSB0Mywg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0
dXJlSURbdDVdCiAuZG9uZToKIGVuZAogCi1tYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNs
b3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rl
ciwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRB
cmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKLSAgICBtZXRhZGF0
YSh0NSwgdDApCi0gICAgZ2V0Q2FsbGVlKHQwKQorIyB0NSBob2xkcyBtZXRhZGF0YS4KK21hY3Jv
IGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJl
cGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykKKyAgICBnZXRDYWxsZWUodDEpCiAKLSAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0
W3Q1XSwgdDIKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKLSAgICBi
cW5lcSB0MywgdDIsIC5vcENhbGxTbG93CisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MSwgdDApCiAKKyAgICAjIEFsaWduZWQgdG8gSklUOjpjb21waWxlU2V0dXBGcmFtZQogICAg
IGdldEFyZ3VtZW50U3RhcnQodDMpCiAgICAgbHNoaWZ0aSAzLCB0MwogICAgIG5lZ3AgdDMKICAg
ICBhZGRwIGNmciwgdDMKLSAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KICAgICBnZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyh0MikKLSAgICBzdG9yZVBDKCkKICAgICBzdG9yZWkgdDIsIEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KKworICAgICMgU3Rv
cmUgbG9jYXRpb24gYml0cyBhbmQgfGNhbGxlZXwsIGFuZCBjb25maWd1cmUgc3AuCisgICAgc3Rv
cmVQQygpCisgICAgc3RvcmVxIHQwLCBDYWxsZWVbdDNdCiAgICAgbW92ZSB0Mywgc3AKLSAgICBp
ZiBBUk02NEUKLSAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDAKLSAgICAgICAgcHJlcGFyZUNhbGwo
dDAsIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5UHRyVGFnKQotICAgICAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVd
LCB0MAotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0
MCwgSlNFbnRyeVB0clRhZykKLSAgICBlbHNlCi0gICAgICAgIHByZXBhcmVDYWxsKCVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0s
IHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5UHRyVGFnKQotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rp
b24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQotICAgIGVu
ZAotLm9wQ2FsbFNsb3c6Ci0gICAgc2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQotZW5kCisgICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBD
U2l6ZSwgc3AKKworICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQxCisgICAgYnRweiB0MSwgKGNvbnN0ZXhw
ciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9ycGhpYwor
ICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50YWcgcmV0dXJuIGFkZHJlc3Mu
IFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGluZSBzZXBhcmF0ZWx5Lgor
ICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBj
YXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRl
LgorICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQ
dHJUYWcpCisgICAgam1wIC5nb1BvbHltb3JwaGljCiAKLW1hY3JvIGNvbW1vbkNhbGxPcChvcGNv
ZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCisu
bm90UG9seW1vcnBoaWM6CisgICAgYnFuZXEgdDAsIHQxLCAub3BDYWxsU2xvdworICAgIHByZXBh
cmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisuZ29Qb2x5bW9ycGhpYzoKKyAgICBsb2FkcCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBo
aWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6
ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRp
c3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCisKKy5vcENhbGxTbG93OgorICAgICMgNjRi
aXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgor
ICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICBhZGRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1LCB0MiAjIENhbGxMaW5rSW5mbyogaW4g
dDIKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1f
c2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCB0MworICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDNdLCB0MworICAgIHBy
ZXBhcmVTbG93Q2FsbCgpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rl
ciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRyVGFnKQorZW5kCisKK21hY3JvIGNvbW1vbkNhbGxP
cChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tl
Q2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHByb2xvZ3VlKQogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUs
IHQwKQogCkBAIC0yNDAzLDcgKzI0MjIsNyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFt
ZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAg
ICBlbmQsIG1ldGFkYXRhKQogCiAgICAgICAgIG1hY3JvIGdldENhbGxlZShkc3QpCi0gICAgICAg
ICAgICBnZXQobV9jYWxsZWUsIHQwKQorICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCBkc3QpCiAg
ICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGdldEFyZ3VtZW50U3RhcnQoZHN0KQpAQCAtMjQx
NCwxMCArMjQzMyw2NyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgs
IG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICAgICAgZ2V0dShz
aXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywgZHN0KQogICAgICAgICBlbmQKIAotICAgICAgICBj
YWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwg
bV9kc3QsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwg
Z2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKKyAgICAgICAgIyB0NSBob2xkcyBt
ZXRhZGF0YQorICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVT
dHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJl
UG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCiAgICAgZW5kKQog
ZW5kCiAKK21hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgZ2V0LCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGws
IHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsKQorICAgIGNhbGxTbG93UGF0aChm
cmFtZVNsb3dQYXRoKQorICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lKQorICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKKyAgICBpZiBKU1ZB
TFVFNjQKKyAgICAgICAgbW92ZSByMSwgc3AKKyAgICBlbHNlCisgICAgICAgICMgVGhlIGNhbGxl
ZUZyYW1lIGlzIG5vdCBzdGFjayBhbGlnbmVkLCBtb3ZlIGRvd24gYnkgQ2FsbGVyRnJhbWVBbmRQ
Q1NpemUgdG8gYWxpZ24KKyAgICAgICAgaWYgQVJNdjcKKyAgICAgICAgICAgIHN1YnAgcjEsIENh
bGxlckZyYW1lQW5kUENTaXplLCB0MgorICAgICAgICAgICAgbW92ZSB0Miwgc3AKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCisgICAg
ICAgIGVuZAorICAgIGVuZAorICAgIGNhbGxDYWxsU2xvd1BhdGgoCisgICAgICAgIHNsb3dQYXRo
LAorICAgICAgICAjIFRob3NlIGFyZSByMCBhbmQgcjEKKyAgICAgICAgbWFjcm8gKHJlc3RvcmVk
UENPclRocm93LCBjYWxsZWVGcmFtZVB0cikKKyAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQ
dHIsIC5kb250VXBkYXRlU1AKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQor
ICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKKyAgICAgICAgICAgIGdldChtX2Nh
bGxlZSwgdDEpCisgICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0
MCkKKyAgICAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKKworICAgICAgICAgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2Nr
W3Q1XSwgdDEKKyAgICAgICAgICAgIGJ0cHogdDEsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpw
b2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAgICAgICAgICMgcHJl
cGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5l
ZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGluZSBzZXBhcmF0ZWx5LgorICAgICAgICAg
ICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhpYyBjYWxsIGNh
c2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRodW5rIHNpZGUu
CisgICAgICAgICAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBK
U0VudHJ5UHRyVGFnKQorICAgICAgICAgICAgam1wIC5nb1BvbHltb3JwaGljCisKKyAgICAgICAg
Lm5vdFBvbHltb3JwaGljOgorICAgICAgICAgICAgYnFuZXEgdDAsIHQxLCAub3BDYWxsU2xvdwor
ICAgICAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKyAgICAgICAgLmdvUG9s
eW1vcnBoaWM6CisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
Y2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0
NQorICAgICAgICAgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwg
SlNFbnRyeVB0clRhZykKKworICAgICAgICAub3BDYWxsU2xvdzoKKyAgICAgICAgICAgICMgNjRi
aXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorICAgICAgICAgICAgIyB0MiBpcyBDYWxsTGlu
a0luZm8qCisgICAgICAgICAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAg
ICAgICAgICBhZGRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1
LCB0MiAjIENhbGxMaW5rSW5mbyogaW4gdDIKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0
NV0sIHQ1CisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICAgICAgICAg
IGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDNdLCB0MworICAgICAgICAgICAgcHJl
cGFyZVNsb3dDYWxsKCkKKyAgICAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFt
ZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFs
UmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgLmRvbnRVcGRh
dGVTUDoKKyAgICAgICAgICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBv
bGluZQorICAgICAgICBlbmQpCitlbmQKKwogbGxpbnRPcChvcF9yZXQsIE9wUmV0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQog
ICAgIGdldChtX3ZhbHVlLCB0MikKQEAgLTMwNDYsOCArMzEyMiw4IEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfaXRlcmF0b3Jfb3BlbiwgT3BJdGVyYXRvck9wZW4sIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoCiAgICAgICAgIG1vdmUgMSwgZHN0CiAgICAgZW5kCiAKLQotICAgIGNhbGxIZWxw
ZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGws
IE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRD
YWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGlu
Z1RoaXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhlbHBlcihvcF9pdGVy
YXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRv
ck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNh
bGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2Fs
bCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0
QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXRCeUlkU3RhcnQ6CiAgICAgbWFjcm8g
c3RvcmVOZXh0QW5kRGlzcGF0Y2godmFsdWUpCkBAIC0zMTA0LDcgKzMxODAsOCBAQCBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1ZSBzbG90IGFzIGEg
dG1wIHNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4KLSAgICBjYWxsSGVs
cGVyKG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxs
LCBPcEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRD
YWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGlu
Z1RoaXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhlbHBlcihvcF9pdGVy
YXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRv
ck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2Fs
bCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxs
LCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQs
IG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRB
cmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldERvbmVTdGFydDoKICAgICBtYWNybyBz
dG9yZURvbmVBbmRKbXBUb0dldFZhbHVlKGRvbmVWYWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20vY2xvb3AucmIKaW5kZXggY2FkMjE1YWUzNDNjYzg2YjNhMTBhNWZhZjY2Mjg0
MjRhOWMwMmYyOC4uYzcwMTY2NGFiMmJmZmYyMDdkMTJlNWUyMjJmOTY0Y2ZhOTEyYTJmZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIKQEAgLTU3Miw2ICs1NzIs
MTQgQEAgZGVmIGNsb29wRW1pdENhbGxTbG93UGF0aFZvaWQob3BlcmFuZHMpCiAgICAgJGFzbS5w
dXRjICIje29wZXJhbmRzWzBdLmNMYWJlbH0oI3tvcGVyYW5kc1sxXS5jbER1bXB9LCAje29wZXJh
bmRzWzJdLmNsRHVtcH0pOyIKIGVuZAogCitkZWYgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoNChvcGVy
YW5kcykKKyAgICAkYXNtLnB1dGMgInsiCisgICAgJGFzbS5wdXRjICIgICAgY2xvb3BTdGFjay5z
ZXRDdXJyZW50U3RhY2tQb2ludGVyKHNwLnZwKCkpOyIKKyAgICAkYXNtLnB1dGMgIiAgICBTbG93
UGF0aFJldHVyblR5cGUgcmVzdWx0ID0gI3tvcGVyYW5kc1swXS5jTGFiZWx9KCN7b3BlcmFuZHNb
MV0uY2xEdW1wfSwgI3tvcGVyYW5kc1syXS5jbER1bXB9LCAje29wZXJhbmRzWzNdLmNsRHVtcH0s
ICN7b3BlcmFuZHNbNF0uY2xEdW1wfSk7IgorICAgICRhc20ucHV0YyAiICAgIGRlY29kZVJlc3Vs
dChyZXN1bHQsIHQwLCB0MSk7IgorICAgICRhc20ucHV0YyAifSIKK2VuZAorCiBjbGFzcyBJbnN0
cnVjdGlvbgogICAgIGRlZiBsb3dlckNfTE9PUAogICAgICAgICBjYXNlIG9wY29kZQpAQCAtMTE3
NSw2ICsxMTgzLDkgQEAgZGVmIGxvd2VyQ19MT09QCiAgICAgICAgIHdoZW4gImNsb29wQ2FsbFNs
b3dQYXRoVm9pZCIKICAgICAgICAgICAgIGNsb29wRW1pdENhbGxTbG93UGF0aFZvaWQob3BlcmFu
ZHMpCiAKKyAgICAgICAgd2hlbiAiY2xvb3BDYWxsU2xvd1BhdGg0IgorICAgICAgICAgICAgY2xv
b3BFbWl0Q2FsbFNsb3dQYXRoNChvcGVyYW5kcykKKwogICAgICAgICAjIEZvciBkZWJ1Z2dpbmcg
b25seS4gVGhpcyBpcyB1c2VkIHRvIGluc2VydCBpbnN0cnVtZW50YXRpb24gaW50byB0aGUKICAg
ICAgICAgIyBnZW5lcmF0ZWQgTExJbnRBc3NlbWJseS5oIGR1cmluZyBsbGludCBkZXZlbG9wbWVu
dCBvbmx5LiBEbyBub3QgdXNlCiAgICAgICAgICMgZm9yIHByb2R1Y3Rpb24gY29kZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgppbmRleCA5
Y2JhNWQ2OGYzY2FkMzFjZmEyZDk2ZWE0YzliYmE4ZGZlOWRhOWIyLi5jMDBiNTE2YjMzZWM1YWQx
MjlkNTZjM2ZmZDIzZTlmNWVjMjA1ZjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCkBAIC00NTksNiArNDU5LDcgQEAKICAgICAgImNs
b29wQ2FsbE5hdGl2ZSIsICAgICAgICAgIyBvcGVyYW5kczogY2FsbGVlCiAgICAgICJjbG9vcENh
bGxTbG93UGF0aCIsICAgICAgICMgb3BlcmFuZHM6IGNhbGxUYXJnZXQsIGN1cnJlbnRGcmFtZSwg
Y3VycmVudFBDCiAgICAgICJjbG9vcENhbGxTbG93UGF0aFZvaWQiLCAgICMgb3BlcmFuZHM6IGNh
bGxUYXJnZXQsIGN1cnJlbnRGcmFtZSwgY3VycmVudFBDCisgICAgICJjbG9vcENhbGxTbG93UGF0
aDQiLCAgICAgICMgb3BlcmFuZHM6IGNhbGxUYXJnZXQsIGEwLCBhMSwgYTIsIGEzCiAKICAgICAg
IyBGb3IgZGVidWdnaW5nIG9ubHk6CiAgICAgICMgVGFrZXMgbm8gb3BlcmFuZHMgYnV0IHNpbXBs
eSBlbWl0cyB3aGF0ZXZlciBmb2xsb3dzIGluIC8vIGNvbW1lbnRzIGFzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAppbmRleCA5NTgxMDVkMzI2NmRk
ZmY4NWJlNWQ3NmQ4N2NkZTVjYjMzMTMxNGMzLi40OGZkOTJmOGI2YThlZDI5NDRhNzI0OGIxNTdk
MmFmNzI3NzNjNWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlQmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGVCYXNlLmgKQEAgLTU3LDYgKzU3LDcgQEAgaW5saW5lIGJvb2wgaXNDYWxsKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKIAogY2xhc3MgRXhlY3V0YWJsZUJhc2UgOiBwdWJsaWMgSlND
ZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsKIAogcHJvdGVjdGVkOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaApp
bmRleCA1YWE1NDJhMTJmMjcxZGJkZmYwMjBiOTEwZWRiY2M5YTExYzgzNjU2Li4yZTliNTA2NjA1
Y2ZjNmYxYzVlZGQyMmRhZDk3M2U3M2VhYThmNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMjYsNiArMjYsNyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgiCisj
aW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGFibGUuaCIKICNp
bmNsdWRlICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0JveC5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2F0ZS5oCmluZGV4IGY2YTA1YjA2NWUzMmQ4YWVjZDU2N2JmNmFiNzRhYWU2
Mzg5OTc3NzguLmU0Nzc5MmI4NzY0ZTkxZDUwNjEwZTRjZGRhZTMyMzFjMTQ1OWUyMDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgdihqaXRDYWdlUHRyLCBOb1B0clRhZykgXAogICAgIHYodGFpbENhbGxKU0Vu
dHJ5UHRyVGFnLCBOb1B0clRhZykgXAogICAgIHYodGFpbENhbGxKU0VudHJ5U2xvd1BhdGhQdHJU
YWcsIE5vUHRyVGFnKSBcCisgICAgdih0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcs
IE5vUHRyVGFnKSBcCiAgICAgdihsb29wT1NSRW50cnksIE5vUHRyVGFnKSBcCiAgICAgdihlbnRy
eU9TUkVudHJ5LCBOb1B0clRhZykgXAogICAgIHYod2FzbU9TUkVudHJ5LCBOb1B0clRhZykgXApA
QCAtNDYsMjAgKzQ3LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIEpTQ19KU19HQVRF
X09QQ09ERVModikgXAogICAgIHYob3BfY2FsbCwgSlNFbnRyeVB0clRhZykgXAotICAgIHYob3Bf
dGFpbF9jYWxsLCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9jb25zdHJ1Y3QsIEpTRW50cnlQ
dHJUYWcpIFwKICAgICB2KG9wX2l0ZXJhdG9yX25leHQsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2
KG9wX2l0ZXJhdG9yX29wZW4sIEpTRW50cnlQdHJUYWcpIFwKLSAgICB2KG9wX2NhbGxfc2xvdywg
SlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfc2xvdywgSlNFbnRy
eVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jb25zdHJ1Y3Rfc2xvdywgSlNFbnRyeVNsb3dQ
YXRoUHRyVGFnKSBcCi0gICAgdihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVNsb3dQYXRo
UHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1Bh
dGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93LCBK
U0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3cs
IEpTRW50cnlTbG93UGF0aFB0clRhZykgXAorICAgIHYob3BfY2FsbF92YXJhcmdzLCBKU0VudHJ5
UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3RfdmFyYXJncywgSlNFbnRyeVB0clRhZykgXAor
ICAgIHYob3BfY2FsbF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxf
c2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3Nsb3csIEpTRW50cnlQ
dHJUYWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9yX25leHRfc2xvdywgSlNFbnRyeVB0clRhZykgXAor
ICAgIHYob3BfaXRlcmF0b3Jfb3Blbl9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9j
YWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfdGFpbF9jYWxsX3Zh
cmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJh
cmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NhbGxfZXZhbF9zbG93LCBKU0Vu
dHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX25leHRfc2xvdywgSlNFbnRy
eVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50cnlT
bG93UGF0aFB0clRhZykgXAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggOWNmNWZlYTAxOTg0OWRiNmU2NjA5MTBiYjk0NTFj
ZDI3YzI1ZmJjNS4uZWM0ODIyZjVhOTAzZDRmYjg1Y2I0ODQxYTRjZDY4ZjBjMTBiZmJmMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTM4LDYgKzEzOCw3IEBACiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5j
bHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRFeGNlcHRpb25zLmgiCiAjaW5jbHVk
ZSAiTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCIKQEAgLTkxMCw2
ICs5MTEsNDEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRD
VElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2QKICAgICByZXR1cm4gTExJbnQ6Omdl
dENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0
X3RyYW1wb2xpbmUpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
Vk06OmdldENUSUxpbmtDYWxsKCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25z
Ojp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIGdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyNlbmRpZgorICAgIHJl
dHVybiBMTEludDo6Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGludF9saW5rX2NhbGxfdHJh
bXBvbGluZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBWTTo6
Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkKK3sKKyNpZiBFTkFCTEUoSklU
KQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIGdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dl
ZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlmCisgICAgcmV0dXJuIExMSW50OjpjYWxsVG9UaHJv
dygqdGhpcykudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKK30KKworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBWTTo6Z2V0Q1RJVmlydHVhbENh
bGwoQ2FsbE1vZGUgY2FsbE1vZGUpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoT3B0aW9u
czo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3IoKnRoaXMsIGNhbGxN
b2RlKTsKKyNlbmRpZgorICAgIHN3aXRjaCAoY2FsbE1vZGUpIHsKKyAgICBjYXNlIENhbGxNb2Rl
OjpSZWd1bGFyOgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsKKyAgICBjYXNlIENhbGxN
b2RlOjpUYWlsOgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUpOworICAgIGNhc2Ug
Q2FsbE1vZGU6OkNvbnN0cnVjdDoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lKTsK
KyAgICB9CisgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSk7Cit9CisKIFZNOjpDbGllbnREYXRhOjp+
Q2xpZW50RGF0YSgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5ZWYz
ODJjNjBlZTgzNGZjYmIxZDkwODFjNzgxOGZkNzg2N2ZhNDA4Li4zYWJmNzExYTY1NTJiZTRiMzFh
ZmU0N2UwNTlmMzMxZTA4OTkxOTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAg
LTEwNiw2ICsxMDYsOCBAQCBjbGFzcyBCYXNpY0Jsb2NrTG9jYXRpb247CiBjbGFzcyBCdWlsdGlu
RXhlY3V0YWJsZXM7CiBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3MgQ2Fs
bEZyYW1lOworY2xhc3MgQ2FsbExpbmtJbmZvOworZW51bSBjbGFzcyBDYWxsTW9kZTsKIHN0cnVj
dCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENv
ZGVDYWNoZTsKQEAgLTkwMiw2ICs5MDQsOSBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wg
Y2FuQ29uc3RydWN0KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJTGlu
a0NhbGwoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJ
VGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBnZXRDVElWaXJ0dWFsQ2FsbChDYWxsTW9kZSk7CiAK
ICAgICBzdGF0aWMgcHRyZGlmZl90IGV4Y2VwdGlvbk9mZnNldCgpCiAgICAgewpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBiNDNmZDc1OWVi
Mzc1OTA1NDdhMzhkZThlYzIyMTZjODAyYjAyYWI2Li40YzMzODY5ZGNlYTM3NDMyNjExMThiOWFh
NjQ1MGViMmEwOTI2NWZkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIxLTExLTExICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIENhbGxMaW5rSW5mbyBp
biBMTEludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMyNzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBzdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5Lmpz
OgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5q
czoKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnZtLmlzV2FzbVN1
cHBvcnRlZCk6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanM6Cisg
ICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci52bS5pc1dhc21TdXBwb3J0
ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVy
LmpzOgorICAgICAgICAoZG9lc1RyZWVIYXZlU3RhY2tUcmFjZSk6CisgICAgICAgIChydW5UZXN0
KToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzOgorCiAyMDIx
LTExLTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIElu
bGluZSBSZWdFeHAudGVzdCBKSVQgY29kZSBpbiBERkcgYW5kIEZUTApkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5
LmpzIGIvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJl
LW9mLXByb3h5LmpzCmluZGV4IDUwY2FlZWQxMTQ4NDI5ZmQxYjVjZTBiMGZlYWU2YmRkZGU2NzEw
YjguLjk0ZGFiNDZkMmQ3MTg0ZjM1ZDQzZTJkYjRhMmRkNTY0MTk4YmVmZjUgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1w
cm94eS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8t
YmUtYXdhcmUtb2YtcHJveHkuanMKQEAgLTEsNCArMSw0IEBACi0vL0AgcnVuRGVmYXVsdCgiLS12
YWxpZGF0ZU9wdGlvbnM9dHJ1ZSAtLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS11c2VDb25j
dXJyZW50R0M9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRTb29uPTEwIiwgIi0tdGhyZXNob2xk
Rm9ySklUQWZ0ZXJXYXJtVXA9MTAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
PTEwMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwPTEwMCIsICItLXRo
cmVzaG9sZEZvck9wdGltaXplU29vbj0xMDAiLCAiLS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZUFm
dGVyV2FybVVwPTEwMDAiLCAiLS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb249MTAwMCIsICIt
LXZhbGlkYXRlQkNFPXRydWUiLCAiLS11c2VGVExKSVQ9dHJ1ZSIpCisvL0AgcnVuRGVmYXVsdCgi
LS12YWxpZGF0ZU9wdGlvbnM9dHJ1ZSIsICItLXVzZUNvbmN1cnJlbnRKSVQ9ZmFsc2UiLCAiLS11
c2VDb25jdXJyZW50R0M9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRTb29uPTEwIiwgIi0tdGhy
ZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
V2FybVVwPTEwMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwPTEwMCIs
ICItLXRocmVzaG9sZEZvck9wdGltaXplU29vbj0xMDAiLCAiLS10aHJlc2hvbGRGb3JGVExPcHRp
bWl6ZUFmdGVyV2FybVVwPTEwMDAiLCAiLS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb249MTAw
MCIsICItLXZhbGlkYXRlQkNFPXRydWUiLCAiLS11c2VGVExKSVQ9dHJ1ZSIpCiAKIGZ1bmN0aW9u
IG1haW4oKSB7CiAgICAgbGV0IHYxNjI7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1w
bGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzCmluZGV4IDY4OWEwMDVhYjU1NWExZmM2
MDFhNTRlNGViZjk0ZTk5YTY2OGY3N2UuLjVjMjIwZmQ3NmNkYzVjNDBlNTljYzY2ZTU3MzQyYzcy
ZDhjN2YzYWEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdh
c20tbmFtZS1zZWN0aW9uLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
LXdhc20tbmFtZS1zZWN0aW9uLmpzCkBAIC02OSw1ICs2OSw1IEBACiAgICAgdmFyIHdhc21FbnRy
eSA9IGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5fcGFycm90
KDEpOwogICAgIH07Ci0gICAgcnVuVGVzdCh3YXNtRW50cnksIFsiX3NpbGx5IiwgIih1bmtub3du
KSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfZWdnc10iLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29u
XSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJv
dF0iLCAid2FzbS1zdHViIiwgIjI0IiwgIndhc21FbnRyeSJdKTsKKyAgICBydW5UZXN0KHdhc21F
bnRyeSwgWyJfc2lsbHkiLCAiKHVua25vd24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIs
ICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIs
ICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XSIsICIodW5rbm93bikiLCAid2FzbUVudHJ5Il0p
OwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5q
cyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMKaW5kZXggY2QyMWYy
ODhjMTQ4YTRiNzQwNWJmODY4ZGVmOWI1NDU3MzQwNTA0NS4uMDZkZjAxMjQ5NTk2OWUyODQyMTg3
Nzg2OTAxMzViZjA5MDEwZWM2ZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmct
cHJvZmlsZXItd2FzbS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13
YXNtLmpzCkBAIC04LDUgKzgsNSBAQAogICAgIHZhciB3YXNtRW50cnkgPSBmdW5jdGlvbigpIHsK
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMubG9vcCgxMDAwMDAwMCk7CiAgICAgfTsK
LSAgICBydW5UZXN0KHdhc21FbnRyeSwgWyI8Pz4ud2FzbS1mdW5jdGlvblswXSIsICJ3YXNtLXN0
dWIiLCAiMCIsICJ3YXNtRW50cnkiXSk7CisgICAgcnVuVGVzdCh3YXNtRW50cnksIFsiPD8+Lndh
c20tZnVuY3Rpb25bMF0iLCAiKHVua25vd24pIiwgIndhc21FbnRyeSJdKTsKIH0KZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMg
Yi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCmlu
ZGV4IDk2NDJkZGM3YzFlNmYwNmUzYjEzMjc5YzBlNGEwMjViNTRkY2FiZjEuLjFiOTJlOTQ4NTRh
ZjYzZjY3ZDA4ZjU0ODg3YzUyMTc5MTRlZTJiZjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNz
L3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMKKysrIGIvSlNUZXN0cy9zdHJl
c3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcwpAQCAtNzAsMTEgKzcwLDEz
IEBAIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKICAgICAKICAgICBsZXQgbm9kZSA9IHRyZWU7CiAg
ICAgZm9yIChsZXQgaSA9IHN0YWNrVHJhY2UubGVuZ3RoOyBpLS07ICkgeworICAgICAgICBsZXQg
cHJldiA9IG5vZGU7CiAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkcmVuW3N0YWNrVHJhY2VbaV1d
OwogICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgIGlmIChWRVJCT1NFKSB7CiAgICAg
ICAgICAgICAgICAgcHJpbnQoImZhaWxpbmcgb24gIiArIGkgKyAiIDogIiArIHN0YWNrVHJhY2Vb
aV0pOwogICAgICAgICAgICAgICAgIHByaW50KEpTT04uc3RyaW5naWZ5KHRyZWUpKTsKKyAgICAg
ICAgICAgICAgICBwcmludChPYmplY3Qua2V5cyhwcmV2LmNoaWxkcmVuKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEwOCw3ICsxMTAs
NyBAQCBmdW5jdGlvbiBydW5UZXN0KGZ1bmMsIHN0YWNrVHJhY2VPclN0cmluZykgewogICAgICAg
ICB9CiAgICAgfSB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IHRpbWVUb0ZhaWwpOwog
ICAgIHByaW50KEpTT04uc3RyaW5naWZ5KHJvb3QsIHVuZGVmaW5lZCwgMikpOwotICAgIGRvZXNU
cmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwgc3RhY2tUcmFjZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgZG9l
c1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNlT3JTdHJpbmcsIHRydWUsIHRydWUp
OwogICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHN0YWNrIHRyYWNlIik7CiB9CiAKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qcyBiL0pTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qcwppbmRleCA2ODA1ZTY4OWY1Yzg3OWUy
Y2E1MDljODhkM2U3YjM3NmRlMDlmYWFhLi4zM2M4NmJmMWNkZTlhOGRhYjExOGUwZTRjYjBiYWNk
NTliNzQ5MWU5IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNl
Y3Rpb24uanMKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpz
CkBAIC02OSw0ICs2OSw0IEBACiBhc3NlcnQuZXEoc3RhY2t0cmFjZVszXSwgIjw/Pi53YXNtLWZ1
bmN0aW9uW19iYWNvbl1AW3dhc20gY29kZV0iKTsKIGFzc2VydC5lcShzdGFja3RyYWNlWzRdLCAi
PD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dQFt3YXNtIGNvZGVdIik7CiBhc3NlcnQuZXEoc3RhY2t0
cmFjZVs1XSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdQFt3YXNtIGNvZGVdIik7Ci1hc3Nl
cnQuZXEoc3RhY2t0cmFjZVs2XSwgIndhc20tc3R1YkBbd2FzbSBjb2RlXSIpOyAvLyB3YXNtIGVu
dHJ5Cithc3NlcnQuZXEoc3RhY2t0cmFjZVs2XSwgIndhc20tc3R1YkBbbmF0aXZlIGNvZGVdIik7
IC8vIHdhc20gZW50cnkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444090</attachid>
            <date>2021-11-12 13:06:44 -0800</date>
            <delta_ts>2021-11-12 13:10:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211112130643.patch</filename>
            <type>text/plain</type>
            <size>410422</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDVkZDgyYWRiMWUzNWI4NmIyZTdmMzk1ZTI4ZTMzNmE5YTk0MWE5Li5lM2Y4ZmRkMTI4NWE4M2Ey
MTYzMGMxYzEyYjk1YzIxMTZlNjU5NWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzggQEAKKzIwMjEtMTEtMTIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludGVncmF0
ZXMgbm9ybWFsIENhbGxMaW5rSW5mbyBpbnRvIExMSW50IGFuZCByZW1vdmUgYWRob2MgTExJbnRD
YWxsTGlua0luZm8uCisgICAgICAgIFNvIHRoYXQgd2UgY2FuIHNpbXBsaWZ5IG91ciBJQyBzb2Z0
d2FyZSBzdGFjaywgYW5kIHVuaWZ5aW5nIGNhbGwgSUMgbWVjaGFuaXNtIGludG8gb25lIENhbGxM
aW5rSW5mby4KKworICAgICAgICAxLiBMTEludCBjYW4gZnVsbHkgdXNlIG91ciBwb2x5bW9ycGhp
YyBjYWxsIElDLCBhbmQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gcmVzZXQgY2FsbCBJQyB3aGVuCisg
ICAgICAgICAgIHRpZXJpbmcgdXAgZnJvbSBMTEludCB0byBCYXNlbGluZSBKSVQgc2luY2UgYm90
aCBub3cgdXNlcyB0aGUgc2FtZSBDYWxsTGlua0luZm8gZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAg
ICAgIERGRyBhbmQgRlRMIGNhbiBhbHNvIHJldHJpZXZlIGNhbGwgaW5mb3JtYXRpb24gZnJvbSB0
aGlzIENhbGxMaW5rSW5mby4KKyAgICAgICAgMi4gTExJbnQgdmFyYXJncyBjYWxscyBnZXQgdGhl
IHNhbWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIEJhc2VsaW5lLiBQcmV2aW91c2x5IGl0IGRv
ZXMgbm90IGhhdmUKKyAgICAgICAgICAgY2FsbCBJQy4KKyAgICAgICAgMy4gV2hlbiBKSVQgaXMg
ZGlzYWJsZWQsIHdlIGRpc2FibGUgcG9seW1vcnBoaWMgY2FsbCBJQyBzaW5jZSBpdCByZXF1aXJl
cyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSBv
bmx5IHVzZSBtb25vbW9ycGhpYyBvbmUsIHdoaWNoIGlzIHRoZSBzYW1lIHRvIHRoZSBvbGQgTExJ
bnRDYWxsTGlua0luZm8uCisgICAgICAgIDQuIENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uIGlz
IHNldCB1cCBvbmx5IGFmdGVyIEJhc2VsaW5lIEpJVC4gV2UgYWRqdXN0IGNhbGwgSUMgY29kZSBz
byB0aGF0CisgICAgICAgICAgIHdlIG5vIGxvbmdlciByZWx5IG9uIGRvbmVMb2NhdGlvbiB3aGVu
IHVzaW5nIERhdGFJQy4gVGhpcyBhbGxvd3MgdXMgdG8gc21vb3RobHkgdGllcmluZyB1cAorICAg
ICAgICAgICBmcm9tIExMSW50IHRvIEJhc2VsaW5lIEpJVCB3aGlsZSB1c2luZyB0aGUgc2FtZSBD
YWxsTGlua0luZm8uCisgICAgICAgICAgIFdlIHNldCB1cCBkb25lTG9jYXRpb24gaW4gQmFzZWxp
bmUgSklUIGp1c3QgYmVjYXVzZSBERkcgT1NSIGV4aXQgcmVxdWlyZXMgd2hlbiBleGl0aW5nIHRv
CisgICAgICAgICAgIEJhc2VsaW5lIEpJVCBjb2RlLgorICAgICAgICA1LiBXZSByZW1vdmUgQ2Fs
bExpbmtJbmZvIGZyb20gSklUIGNvbnN0YW50IHBvb2wsIGFuZCB3ZSBzdG9yZSBDYWxsTGlua0lu
Zm8gaW4gbWV0YWRhdGEgc28gdGhhdAorICAgICAgICAgICBMTEludCBhbmQgQmFzZWxpbmUgSklU
IHF1aWNrbHkgYWNjZXNzIHRvIHRoYXQgYW5kIGtlZXBpbmcgdW5saW5rZWQgQmFzZWxpbmUgSklU
IHdvcmtpbmcuCisgICAgICAgIDYuIFdlIGltcGxlbWVudCBMTEludCB2ZXJzaW9uIG9mIGNhbGwg
SUMgdGh1bmtzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiBKSVQgaXMgZGlzYWJs
ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlu
a0J1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OnNob3VsZER1bXBEaXNhc3NlbWJseUZvcik6IERl
bGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1l
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6
Y2FsbExpbmtJbmZvRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNsZWFyU3R1Yik6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp2aXNpdFdl
YWspOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjppbml0aWFsaXplRGF0YUlDKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
cmV2ZXJ0Q2FsbFRvU3R1Yik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aXNMaW5rZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnN0dWIgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpmb3JFYWNoRGVwZW5kZW50Q2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0U2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyU2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElD
U3RhdHVzTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxs
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJh
eVByb2ZpbGVQcmVkaWN0aW9ucyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9PcGNvZGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9SZXBhdGNoLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAuCisgICAgICAgIChKU0M6
OmxpbmtTbG93UGF0aFRvKToKKyAgICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseU93bmVyKToKKyAgICAgICAgKEpTQzo6bGlua01vbm9tb3JwaGljQ2Fs
bCk6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxs
KToKKyAgICAgICAgKEpTQzo6anNUb1dhc21JQ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjpsaW5r
VmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1JlcGF0Y2guaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oLgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtG
b3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0VmlydHVhbENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAg
ICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKToKKyAgICAg
ICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbyk6CisgICAgICAgIChK
U0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6
OkpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KToKKyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAg
KEpTQzo6dmlydHVhbFRodW5rRm9yUmVndWxhckNvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OnZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50X2xpbmtfY2FsbCk6CisgICAg
ICAgIChKU0M6OkxMSW50OjpsbGludF92aXJ0dWFsX2NhbGwpOgorICAgICAgICAoSlNDOjpMTElu
dDo6aGFuZGxlSG9zdENhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAgIChKU0M6OkxMSW50OjpM
TElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZh
bCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6IERlbGV0ZWQuCisgICAgICAg
ICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5j
cHA6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVhdGVKU0dhdGVUaHVuayk6CisgICAgICAgIChK
U0M6OkxMSW50OjpjcmVhdGVUYWlsQ2FsbEdhdGUpOgorICAgICAgICAoSlNDOjpMTEludDo6cmV0
dXJuTG9jYXRpb25UaHVuayk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3BlcmF0
b3IgQ2FsbExpbmtJbmZvKik6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAg
ICAgICAqIG9mZmxpbmVhc20vY2xvb3AucmI6CisgICAgICAgICogb2ZmbGluZWFzbS9pbnN0cnVj
dGlvbnMucmI6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9HYXRlLmg6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElMaW5r
Q2FsbCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGgpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVmlydHVhbENhbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKwogMjAyMS0xMS0xMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIFZNOjp3cml0ZUJhcnJpZXIoKSBhbmQgVk06Om11dGF0b3JGZW5j
ZSgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyYzRhNWM4Mjc3Y2E3
NzAxZDg0OWVmZjY0NjdiZDg4Nzk1OTAwMDguLmNjNDFmYzAzZDBhMDg2Y2M3N2NlNGU3ZDAwMmRl
MTdjODY0MzIwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY1OSw3
ICs2NTksNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIGJ5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0
ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKICAgICBieXRlY29kZS9KdW1wVGFibGUuaAot
ICAgIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKICAgICBieXRlY29kZS9MTEludFByb3Rv
dHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAogICAgIGJ5dGVjb2RlL0xhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmgKICAgICBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODljOWMxNzRiYjIyM2IzNmMzOTZiYWZjNDZm
ZTExNjZhNjgyMGY0My4uMzE1YjRmMGY5NmU0MTczN2YzN2IwMTE5ZjcwYzZiNjk5NzE0ODhhMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCQkwRjBD
QUVGQzFFQzREQTZCMDA5NzBEMTIgLyogSlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0FFRkExRUM0REE2MjAw
OTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBDQUVGRjFFQzREQTg4MDA5NzBEMTIgLyog
SGVhcEZpbmFsaXplckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjBDQUVGRTFFQzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNh
bGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYw
NDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBM
TEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMEYx
QTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1
c3RvbS5oICovOyB9OwogCQkwRjEyREUxMDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6
ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMkRF
MEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQg
LyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTg2LDcgKzE4NSw2IEBACiAJCTBG
MjRFNTQ0MTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BS
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJT
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIy
MTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLzsgfTsKIAkJMEYy
NEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NEIxN0VFMjc0
OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIx
NyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJh
bWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovOyB9OwpAQCAtMTg5Miw2ICsxODkwLDcgQEAKIAkJRTMzRjUwODcx
Qjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzNGNTA4NjFCODQ0
OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsK
IAkJRTM0MDBFQzEyMkExQ0M3QjAwOURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNDAwRUMw
MjJBMUNDNzgwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmggKi87IH07CiAJ
CUUzNDlBNzgxMjQ5MUYxNjEwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0OUE3ODAyNDkxRjE1QTAw
MUJBMzM2IC8qIERGR0NvZGVPcmlnaW5Qb29sLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM0RDFBRTUyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0
Y2hJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzREMUFFNDI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCAqLzsgfTsKIAkJ
RTM0RTY1NzUyMDY2OEVBQTAwRkI4MUFDIC8qIFBhcnNlSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8q
IFBhcnNlSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUUzNEVEQkY3MURCNUZGQzkwMERDODdBNSAvKiBGcmFtZVRyYWNlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEVEQkY2MURCNUZGQzEw
MERDODdBNSAvKiBGcmFtZVRyYWNlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMzRGOTMwRTIzMjJEODgyMDAyQjhEQjQgLyogSlNHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEY5
MzBDMjMyMkQ4ODEwMDJCOERCNCAvKiBKU0dlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTA2LDYgKzE5MDUsNyBAQAogCQlFMzVB
MEI5RDIyMEFEODdBMDBBQzQ0NzQgLyogRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVBMEI5QzIyMEFEODdBMDBB
QzQ0NzQgLyogRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1Q0ExNTQxREJDM0E1QzAwRjgzNTE2IC8qIERP
TUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM1Q0ExNTIxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNUNBMTU2MURC
QzNBNUYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUwMURCQzNBNTYwMEY4MzUxNiAvKiBE
T01KSVRBYnN0cmFjdEhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFMzVFMzYzRTI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTM2M0MyNzNEQzhD
NjAwREIyNENDIC8qIFJlcGF0Y2guaCAqLzsgfTsKIAkJRTM1RTg5RkQyNUM1MEY4NzAwNzFFRTFF
IC8qIEJpZ0ludDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNUU4OUZCMjVDNTBGODYwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1RTg5RkUy
NUM1MEY4NzAwNzFFRTFFIC8qIEJpZ1VpbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFODlGQzI1QzUwRjg3MDA3MUVFMUUgLyogQmln
VWludDY0QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMzYzN0VFOTIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2MzdFRTcyMzZF
NTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM5MSw3ICsyMzkxLDYgQEAKIAkJMEYwQ0FF
RkUxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwRmluYWxpemVyQ2FsbGJhY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVj
dEluZGV4TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXREaXJlY3RJ
bmRleE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzMxNUY2QjZC
NTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5r
SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMTEludENhbGxMaW5rSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEwRjFBMjFDNDIwQkYwMDAxQzA3
RDIgLyogQWlyQ3VzdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckN1
c3RvbS5oOyBwYXRoID0gYjMvYWlyL0FpckN1c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25GdXp6LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4
Y2VwdGlvbkZ1enouaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9u
RnV6ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ1NCw4ICsyNDUzLDYgQEAK
IAkJMEYyNEU1NDUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVy
YXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE9wZXJhdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3
IC8qIFRlbXBSZWdpc3RlclNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZW1wUmVnaXN0ZXJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyNEU1NDkx
N0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
NEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8q
IElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUNhbGxGcmFtZVNldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTIwNyw2ICs1MjA0LDcgQEAKIAkJRTM0MDBFQzAyMkEx
Q0M3ODAwOURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzQ5QTc3RjI0OTFGMTU5MDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ29kZU9yaWdpblBvb2wuY3BwOyBwYXRoID0gZGZnL0RGR0Nv
ZGVPcmlnaW5Qb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0OUE3ODAy
NDkxRjE1QTAwMUJBMzM2IC8qIERGR0NvZGVPcmlnaW5Qb29sLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0NvZGVPcmlnaW5Qb29sLmg7IHBhdGggPSBkZmcvREZHQ29kZU9yaWdpblBvb2wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0
Y2hJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2hJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEU2NTczMjA2NjhFOEQwMEZC
ODFBQyAvKiBQYXJzZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFy
c2VIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEU2NTc0MjA2NjhFOEUw
MEZCODFBQyAvKiBQYXJzZUhhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUGFyc2VIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0RURC
RjYxREI1RkZDMTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGcmFtZVRyYWNlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUyMjksNiArNTIyNyw4IEBACiAJCUUzNUNBMTUwMURCQzNBNTYwMEY4MzUxNiAvKiBET01K
SVRBYnN0cmFjdEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSklU
QWJzdHJhY3RIZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUNBMTUxMURC
QzNBNTYwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRE9NSklUSGVhcFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTM1Q0ExNTIxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1RTM2M0MyNzNEQzhDNjAwREIyNENDIC8qIFJl
cGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzVFMzYzRDI3M0RDOEM2MDBEQjI0Q0MgLyogUmVw
YXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBhdGNoLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1RTg5RkIyNUM1MEY4NjAwNzFFRTFF
IC8qIEJpZ0ludDY0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmln
SW50NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFODlGQzI1QzUw
Rjg3MDA3MUVFMUUgLyogQmlnVWludDY0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmlnVWludDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM2MzdFRTcyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlua1RpbWVDb25zdGFudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjQ1OCw4ICs2NDU4LDYgQEAKIAkJCQk2MjNBMzdFQjFCODdBN0JE
MDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAwMzMy
MzIgLyogUmVnaXN0ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIzMiAv
KiBSZWdpc3RlclNldC5oICovLAotCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBh
dGNoLmNwcCAqLywKLQkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICov
LAogCQkJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwICovLAogCQkJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuY3BwICovLApAQCAtODgxNSw3ICs4ODEzLDYgQEAKIAkJCQkwRkI1NDY3NjE0
RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQlFMzYz
N0VFODIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8sCiAJCQkJRTM2
MzdFRTcyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLywKLQkJCQkwRjBG
QzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLywKIAkJCQk1M0ZB
MkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcCAqLywKIAkJCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMTRG
NzlGNkUyMTZFQUQ1MDAwMDQ2RDM5IC8qIE1ldGFkYXRhVGFibGUuY3BwICovLApAQCAtODg2Miw2
ICs4ODU5LDkgQEAKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0
dXNlcy5oICovLAogCQkJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNw
YWNlLmNwcCAqLywKIAkJCQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVz
cGFjZS5oICovLAorCQkJCUUzNUUzNjNEMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmNwcCAq
LywKKwkJCQlFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICovLAorCQkJCUUz
NEQxQUU0MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oICovLAogCQkJCTg2NURB
MEM5MjVCODk2MkEwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwICovLAogCQkJ
CTg2NURBMEM3MjVCODk2MEMwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCAqLywK
IAkJCQk4NjVEQTBDNjI1Qjg5NTlFMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5j
cHAgKi8sCkBAIC05NzQ3LDYgKzk3NDcsNyBAQAogCQkJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1
MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0RERFMTk4
MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEz
NkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU5
RkE3QzUyNzNDOEIyNjAwNUQ5RTcwIC8qIERlZmVyR0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkM3MTJERjE3Q0Q4NzdDMDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVm
ZXJyZWRTb3VyY2VEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzQ2Mzg3NTFFNzBEREVDMDBG
MTJBQzEgLyogRGVmZXJyZWRXb3JrVGltZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzMjMsOCAr
MTAzMjQsNiBAQAogCQkJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVy
UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTkxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
QTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5REQ3RjUyM0MxQkJCNTAwOTA1RjEzIC8q
IEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUI3MENGREUxREI2OUU2NjAw
RUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDUyNiw3ICsx
MDUyNSw2IEBACiAJCQkJRTM2MzdFRTkyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3Rh
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTJFQTZCMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRl
cmFsUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERFOUEwOTFCRTdENjlFMDA1RDg5RDkg
LyogTExJbnRBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYwRkM0NUExNEJEMTVGNTAw
QjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTIwQ0U5
RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0
NjgwQ0ExNEJCQjE2QzAwQkZFMjcyIC8qIExMSW50Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjQ2ODBEMzE0QkJEMTY3MDBCRkUyNzIgLyogTExJbnREYXRhLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwNzI2LDcgKzEwNzI0LDggQEAKIAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJFNjkgLyog
UmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFQTE4MjM0MEI0MDBB
ODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTJGNTZCNzFFNEU4NEIyMDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2gu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUzNUUzNjNFMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNo
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzREMUFFNTI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRj
aElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFOUYzRkI5MjYxM0M3ODkwMDY5RTg5RiAv
KiBSZXNvdXJjZUV4aGF1c3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OUVCQ0I3MEU4QzZE
NEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNCNjQyRjI1
RDZGQjREMDAxQUREQjQgLyogUm9vdE1hcmtSZWFzb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTA3
ODQsNyArMTA3ODMsNiBAQAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQ
cm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5
NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJRkU5RkE3QzUyNzNDOEIyNjAwNUQ5RTcwIC8qIERlZmVyR0NJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8q
IFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3
QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKQEAgLTEx
MDUyLDYgKzExMDUwLDggQEAKIAkJCQlFMzI4MkJCQjFGRTkzMEFGMDBFREFGNzEgLyogWWFyckVy
cm9yQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNGRjlCQzcyMjM0NzQ5MTAwQjFBOUFCIC8q
IFlhcnJGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODY3MDRCODcxMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1M0JDNDNGMjZEMDEz
QTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0Yw
RkM5NTI2QTExQjRBMDA5OUZGQTAgLyogWWFyck1hdGNoaW5nQ29udGV4dEhvbGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVy
bi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggNzkzZjQ2
ZjdiYzU4ZTUwOGNkYTZjYjkwMTVhYTA5MmU4Yzk4NjBkOS4uYjY5NTU1N2FmZTYwZjE0NzUxMDA5
YjFiNTA1ZjU1MTMzNDA1YjkwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjcz
LDYgKzI3Myw3IEBAIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAogYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKIGJ5dGVjb2RlL1JlZHVjZVdo
aXRlc3BhY2UuY3BwCitieXRlY29kZS9SZXBhdGNoLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJy
YW5kU3RhdHVzLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAKIGJ5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmNwcApAQCAtNjc2LDcgKzY3Nyw2IEBAIGppdC9SZWcuY3BwCiBq
aXQvUmVnaXN0ZXJBdE9mZnNldC5jcHAKIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAKIGpp
dC9SZWdpc3RlclNldC5jcHAKLWppdC9SZXBhdGNoLmNwcAogaml0L1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5jcHAKIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKIGppdC9TbG93UGF0aENhbGwu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2Nh
dGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaApp
bmRleCBhNmNhNWM4MWM1MTA5NWY4MTk4ZDliODJkYjE0YTU4MWEyNWNlNjA5Li4wNzUwNGJhMDRl
NTliNmQxZGNhMjM1ODhiZWZiNTRkZjE5MTg1YTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKQEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogCi0jaWYgRU5BQkxFKEFTU0VNQkxFUikKLQog
bmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gY2xhc3MgTmVhckNhbGxNb2RlIDogdWludDhfdCB7IFJl
Z3VsYXIsIFRhaWwgfTsKQEAgLTI2OSw1ICsyNjcsMyBAQCBpbmxpbmUgQ29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkPHJlc3VsdFRhZz4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OmNvbnZlcnRp
YgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAppbmRl
eCAwNjI0MGU4NzQzNjM4NzNiOWRmMmNjOWYzN2YzODI5MThmZTdlMjllLi5mZjkzMDU4OWRiMjcx
MTgwZDA5OWUyMzU2Yzk5N2RjNTliMzU2ZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJE
aXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgotI2luY2x1ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKIAogI2lmIE9TKExJTlVYKQogI2lu
Y2x1ZGUgIlBlcmZMb2cuaCIKQEAgLTQzLDI5ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0Mgewogc2l6
ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbTGlua0J1ZmZl
cjo6bnVtYmVyT2ZQcm9maWxlc107CiBzaXplX3QgTGlua0J1ZmZlcjo6c19wcm9maWxlQ3VtbXVs
YXRpdmVMaW5rZWRDb3VudHNbTGlua0J1ZmZlcjo6bnVtYmVyT2ZQcm9maWxlc107CiAKLWJvb2wg
c2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlm
IChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlw
ZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpOwotfQotCi1ib29sIHNo
b3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUgbW9kZSkKLXsKLSAg
ICBpZiAoT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1v
ZGU6OkJCUU1vZGU6Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHko
KTsKLSAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HTW9kZToKLSAgICBjYXNlIFdh
c206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlOgotICAgICAgICByZXR1cm4g
T3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogTGlua0J1ZmZlcjo6Q29kZVJlZjxM
aW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1i
bHlJbXBsKCkKIHsKICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCmluZGV4IDVhM2YwMGYwNWM2ODU4Mjk1Nzcy
NjY3ZmMyMjM1NjdmNjhlOTJiODcuLjI4NWRmMGQxYTE4MDlkYjIwYjQ3OTRjZDMxMjA1OWVmYzZl
ZTAwZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5o
CkBAIC00MywxMiArNDMsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdhc20g
ewotZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgOiB1aW50OF90OwotfQotCi1jbGFzcyBDb2Rl
QmxvY2s7Ci0KIC8vIExpbmtCdWZmZXI6CiAvLwogLy8gVGhpcyBjbGFzcyBhc3Npc3RzIGluIGxp
bmtpbmcgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG1hY3JvIGFzc2VtYmxlciwgb25jZSBjb2RlIGdl
bmVyYXRpb24KQEAgLTQ0Niw4ICs0NDAsNiBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICAgICAgICAg
OiAobGlua0J1ZmZlclJlZmVyZW5jZSkuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5PHJl
c3VsdFB0clRhZz4oKSkKICNlbmRpZgogCi1ib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihD
b2RlQmxvY2sqKTsKLQogI2RlZmluZSBGSU5BTElaRV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtC
dWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgLi4uKSAgXAogICAgIEZJTkFMSVpFX0NPREVf
SUYoKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjb2RlQmxvY2spIHx8IE9wdGlvbnM6OmFzeW5j
RGlzYXNzZW1ibHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgX19WQV9B
UkdTX18pCiAKQEAgLTQ3Niw4ICs0NjgsNiBAQCBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihDb2RlQmxvY2sqKTsKICNkZWZpbmUgRklOQUxJWkVfUkVHRVhQX0NPREUobGlua0J1ZmZlclJl
ZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBkYXRhTG9nRkFyZ3VtZW50c0ZvckhlYWRpbmcpICBcCiAg
ICAgRklOQUxJWkVfQ09ERV9JRihKU0M6Ok9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBK
U0M6Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBSZWdFeHBEaXNh
c3NlbWJseSgpLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIGRhdGFMb2dGQXJn
dW1lbnRzRm9ySGVhZGluZykKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6
Q29tcGlsYXRpb25Nb2RlKTsKLQogI2RlZmluZSBGSU5BTElaRV9XQVNNX0NPREUobGlua0J1ZmZl
clJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCAuLi4pICBcCiAgICAgRklOQUxJWkVfQ09ERV9JRigo
SlNDOjpPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgSlNDOjpPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpLCBsaW5rQnVmZmVy
UmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIF9fVkFfQVJHU19fKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAK
aW5kZXggNWQ1Njc0MWVmZTY2NDI2ZWZjYTIwNTJhYzI1MDk4MzIyMDIzNzdkMC4uNzBkYjBkMDM5
ZWE3ZWQ2MTFjOGE2ZTVkODA4OTEzZjBhZDViZDU1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcApAQCAt
MjYsOCArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCIKIAorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRpc2Fz
c2VtYmxlci5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0NQdHJUYWcuaCIK
KyNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1By
aW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjMsNSArNjYsMjggQEAgQ1N0cmlu
ZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJseShNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8RGlzYXNzZW1ibHkKICAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwogfQogCitib29s
IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBp
ZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5
cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKTsKK30KKworYm9vbCBz
aG91bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIG1vZGUpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlOgorICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEJCUURpc2Fzc2VtYmx5
KCk7CisgICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGU6CisgICAgY2FzZSBX
YXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZToKKyAgICAgICAgcmV0dXJu
IE9wdGlvbnM6OmR1bXBPTUdEaXNhc3NlbWJseSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAppbmRleCA5MjU1OTE4YjFiYTE3NWExZjQ5ZGMzMDI1ZWM2ZmNhODg5Mzlk
MzY0Li4xZWEzMjQ1NDE1YWIwOGE0NWM3ZDNlNTk1OTYwYzQ0NWIxOWZmNzUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKQEAgLTU0LDYgKzU0LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3BhY2Ug
V2FzbSB7CitlbnVtIGNsYXNzIENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3Q7Cit9IC8vIG5hbWVz
cGFjZSBXYXNtCisKK2NsYXNzIENvZGVCbG9jazsKIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOwogCiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CkBAIC0zNzcs
NyArMzgyLDEwIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA6IHByaXZhdGUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyQmFzZSB7CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFy
KiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFM
b2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRhYmxlQWRkcmVz
cygpLCBkYXRhTG9jYXRpb24oKSwgbmFtZSwgb3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKG51bGxwdHIsIG51bGxw
dHIsIG5hbWUsIG91dCk7CiAgICAgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0IHsgZHVtcFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsgfQpAQCAtNTM3LDYgKzU0NSw5
IEBAIGlubGluZSBGdW5jdGlvblB0cjx0YWc+OjpGdW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8dGFnPiBwdHIpCiB7CiB9CiAKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENv
ZGVCbG9jayopOworYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6Q29tcGlsYXRp
b25Nb2RlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYmUyZThj
ODExZDZkZGQwYzE4NGJhNWVkNGQ5NTc5MzZmZDIyNThhMi4uMDEzODYwYjY2YzJiMTlhOGNiYjU5
NTNhNWQwZTQ0ZGQyNzdmYmQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0yNiw2ICsyNiw3IEBACiAKICAgICA6QmFzaWNCbG9ja0xv
Y2F0aW9uLAogICAgIDpCb3VuZExhYmVsLAorICAgIDpDYWxsTGlua0luZm8sCiAgICAgOkRlYnVn
SG9va1R5cGUsCiAgICAgOkVDTUFNb2RlLAogICAgIDpFcnJvclR5cGVXaXRoRXh0ZW5zaW9uLApA
QCAtNDQsNyArNDUsNiBAQAogICAgIDpKU1Njb3BlLAogICAgIDpKU1R5cGUsCiAgICAgOkpTVmFs
dWUsCi0gICAgOkxMSW50Q2FsbExpbmtJbmZvLAogICAgIDpSZXN1bHRUeXBlLAogICAgIDpPcGVy
YW5kVHlwZXMsCiAgICAgOlByaXZhdGVGaWVsZFB1dEtpbmQsCkBAIC04NDAsNyArODQwLDggQEAK
ICAgICAgICAgYXJndjogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAg
ICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86
IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg1Miw3ICs4NTMsOCBAQAog
ICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAg
IGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzog
Q2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODY1LDcgKzg2Nyw4IEBACiAg
ICAgICAgIGVjbWFNb2RlOiBFQ01BTW9kZSwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5m
bzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODc5LDYgKzg4Miw3IEBA
CiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAg
ICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAt
OTAwLDYgKzkwNCw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBt
ZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKICAgICB9LApAQCAtOTIxLDYgKzkyNiw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5r
SW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CkBAIC05MzMsNyArOTM5LDggQEAKICAgICAgICAgYXJn
djogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0lu
Zm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5m
bywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6
IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTk0Nyw2ICs5NTQsNyBAQAogICAgICAgICBmaXJz
dFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJ
bmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAog
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTEyNDksNyArMTI1Nyw4
IEBACiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgaXRlcmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlv
bk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCi0g
ICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5r
SW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwK
ICAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgICAgIG1vZGVNZXRh
ZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKQEAgLTEyNzIsNyArMTI4MSw4IEBACiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgaXRl
cmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCi0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlu
a0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgbmV4dFJlc3VsdFByb2ZpbGU6IFZhbHVl
UHJvZmlsZSwKICAgICAgICAgZG9uZU1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwK
ICAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKQEAgLTEzOTMsNiArMTQwMyw5IEBA
CiBvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pzXzQ0CiBvcCA6bGxpbnRfY2xvb3Bf
ZGlkX3JldHVybl9mcm9tX2pzXzQ1CiBvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pz
XzQ2CitvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pzXzQ3CitvcCA6bGxpbnRfY2xv
b3BfZGlkX3JldHVybl9mcm9tX2pzXzQ4CitvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9t
X2pzXzQ5CiAKIGVuZF9zZWN0aW9uIDpDTG9vcEhlbHBlcnMKIApAQCAtMTQxNSw2ICsxNDI4LDEw
IEBACiBvcCA6bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50ZXJuYWxfZnVuY3Rp
b25fY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZQor
b3AgOmxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF9jb25z
dHJ1Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUK
IG9wIDpjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUKIG9w
IDpjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUKIG9wIDpub3JtYWxfb3NyX2V4aXRfdHJh
bXBvbGluZQpAQCAtMTQyMyw2ICsxNDQwLDggQEAKIG9wIDpsbGludF9oYW5kbGVfdW5jYXVnaHRf
ZXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3Rf
cmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY2FsbF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgorb3Ag
Om9wX2NvbnN0cnVjdF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NhbGxfdmFyYXJn
c19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbgpAQCAtMTQzOCwx
NSArMTQ1NywxNSBAQAogb3AgOm9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbgogb3Ag
Om9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9pdGVyYXRvcl9u
ZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCi1vcCA6b3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlv
bgogb3AgOm9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2Fs
bF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF9ldmFsX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiAKIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGwKLW9wIDpqc190cmFtcG9s
aW5lX29wX3RhaWxfY2FsbAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0CitvcCA6anNf
dHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3MKK29wIDpqc190cmFtcG9saW5lX29wX2NvbnN0cnVj
dF92YXJhcmdzCiBvcCA6anNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0CiBvcCA6anNfdHJh
bXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3cK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKaW5kZXggNGY0N2M4YmNjZjhlNTc0OGFhOWIwZjM2
ZTZmMzYzMDVhZGMzMDAxMS4uMjcwY2Q2ZjFkMDJmNDRkNTNkYjNlNmFhNjNhZmZhMTVlMGMwOTI2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKQEAgLTE4MCw3ICsxODAsNyBAQCBwdHJk
aWZmX3Qgc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCB1bnNpZ25lZCBjaGVjawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFk
YXRhPgotTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1ldGFkYXRh
JiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQorQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9p
bnRJbmRleCkKIHsKICAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4KTsKICAgICByZXR1
cm4gbWV0YWRhdGEubV9jYWxsTGlua0luZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDNiODAzYjM4YTc4NjliNDkzODljMDc5MGFi
YzhiZWI4ZDQwYTU1OGEuLmExYWZjZjkzOGE1MWYyYmMxNzJmMGZkMjAyNzEzMmU2NzJlZWQ5N2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3Bw
CkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CiAKLSNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAK
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihPcGNvZGVJ
RCBvcGNvZGVJRCkKQEAgLTgyLDExICs4MSwxMyBAQCBDYWxsTGlua0luZm86On5DYWxsTGlua0lu
Zm8oKQogCiB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJTdHViKCkKIHsKKyNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghc3R1YigpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0dWItPmNsZWFy
Q2FsbE5vZGVzRm9yKHRoaXMpOwogICAgIG1fc3R1YiA9IG51bGxwdHI7CisjZW5kaWYKIH0KIAog
dm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0pCkBAIC0xMTMsMTkgKzExNCwxOSBAQCBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmRvbmVMb2Nh
dGlvbigpCiAgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwogfQogCi1zdGF0aWMgY29uc3RleHBy
IHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwotCiB2b2lkIENhbGxMaW5rSW5m
bzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
Y2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIShi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpICYgcG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7
CiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUpOwogCi0gICAg
aWYgKGlzRGF0YUlDKCkpIAorICAgIGlmIChpc0RhdGFJQygpKQogICAgICAgICB1LmRhdGFJQy5t
X21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKICAgICBlbHNlIHsKKyNpZiBF
TkFCTEUoSklUKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKHUuY29k
ZUlDLm1fY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2Rl
UHRyKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5t
X2NhbGxlZUxvY2F0aW9uLCBjYWxsZWUpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC0xMzUsOCAr
MTM2LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNhbGxlZSgpCiAgICAgbV9jYWxsZWVP
ckNvZGVCbG9jay5jbGVhcigpOwogICAgIGlmIChpc0RhdGFJQygpKQogICAgICAgICB1LmRhdGFJ
Qy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gbnVsbHB0cjsKLSAgICBlbHNlIGlmICgh
Y2xlYXJlZEJ5SmV0dGlzb24oKSkKKyAgICBlbHNlIGlmICghY2xlYXJlZEJ5SmV0dGlzb24oKSkg
eworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uLCBudWxscHRyKTsKKyNlbmRpZgorICAgIH0KIH0K
IAogSlNPYmplY3QqIENhbGxMaW5rSW5mbzo6Y2FsbGVlKCkKQEAgLTIyNCw2ICsyMjgsNyBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKICAgICAKICAgICBpZiAoaXNMaW5r
ZWQoKSkgewogICAgICAgICBpZiAoc3R1YigpKSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
ICAgIGlmICghc3R1YigpLT52aXNpdFdlYWsodm0pKSB7CiAgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygKQEAgLTIzNCw2ICsyMzksNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZN
JiB2bSkKICAgICAgICAgICAgICAgICB1bmxpbmsodm0pOwogICAgICAgICAgICAgICAgIG1fY2xl
YXJlZEJ5R0MgPSB0cnVlOwogICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIH0gZWxzZSBp
ZiAoIXZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSkpIHsKICAgICAg
ICAgICAgIGlmIChpc0RpcmVjdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKQEAgLTI4MCwxMyArMjg2LDE0IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSYgc2h1ZmZsZURhdGEpCiB7CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVu
aXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oc2h1ZmZsZURhdGEpOwogICAgIG1fZnJhbWVTaHVm
ZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywg
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lk
KCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKQEAgLTM0NSw3ICszNTIsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbAog
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6
Ok5vKTsKQEAgLTM1OCw3ICszNjUsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUgogICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKQEAg
LTM2Niw3ICszNzMsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmCiAKIHZvaWQgQ2FsbExpbmtJ
bmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBzZXRTbG93
UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2FsbCgpLmNvZGUoKSk7CiAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZvOjpyZWdUMik7
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KQEAgLTM3
NiwyMSArMzgzLDMxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mCiAgICAgaml0Lm1vdmUoY2Fs
bExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
KCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KKyNlbmRpZgogCi12b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3ZvaWQg
Q2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgQ2FsbFR5cGUgY2FsbFR5cGUs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1l
U2h1ZmZsZURhdGEpCiB7Ci0gICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENh
bGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKLSAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlu
a0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7Ci0gICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtl
ZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247Ci0gICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZv
LmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVTaHVmZmxlRGF0YSk7
CisgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KTsKKyAgICBtX2Nh
bGxUeXBlID0gY2FsbFR5cGU7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IEdQUkluZm86
OnJlZ1QyOworICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOworICAgIGlmIChmcmFtZVNodWZm
bGVEYXRhKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEg
cmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZy
YW1lU2h1ZmZsZURhdGEpOworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVl
PENhbGxGcmFtZVNodWZmbGVEYXRhPigqZnJhbWVTaHVmZmxlRGF0YSk7CiAgICAgfQotICAgIHNl
dFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5m
b0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29k
ZTxKU0VudHJ5UHRyVGFnPigpKTsKKyNlbmRpZgorICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJ
Qzo6WWVzKTsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2Fs
bCgpLmNvZGUoKSk7CisgICAgLy8gSWYgSklUIGlzIGRpc2FibGVkLCB3ZSBzaG91bGQgbm90IHN1
cHBvcnQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNhbGwgSUMuCisgICAgaWYgKCFPcHRpb25zOjp1
c2VKSVQoKSkKKyAgICAgICAgZGlzYWxsb3dTdHVicygpOwogfQogCisjaWYgRU5BQkxFKEpJVCkK
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CkBAIC00MDYsNyArNDIzLDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCkKICAgICB9KTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWls
Q2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogCkBAIC00NjIsNiAr
NDc5LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgdGFyZ2V0KTsKIH0KKyNlbmRp
ZgogCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CkBAIC00ODMsMTEgKzUw
MSwxNCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6cmV2ZXJ0Q2FsbFRvU3R1YigpCiAgICAgICAgIG1f
Y2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoSklU
KQogICAgICAgICBDQ2FsbEhlbHBlcnM6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRy
V2l0aFBhdGNoKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwgY2FsbGVlR1BSKCks
IG51bGxwdHIpOworI2VuZGlmCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKIHZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdT
dHViKQogewogICAgIGNsZWFyU3R1YigpOwpAQCAtNTA0LDcgKzUyNSw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHVi
KQogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1f
c3R1Yi0+Y29kZSgpLmNvZGUoKSkpOwogICAgIH0KIH0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKaW5kZXggZTVmNzdjZjM3YmYyNjZmNGI5YzkzYzUwY2Y5
OTZkMjFjNjY4Y2U0NS4uYjJkM2FmYTZjZjYwZDE1YmU3YTVkNDlkODYyY2M0NWNmOGI1OGE3NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaApAQCAt
MjgsMjUgKzI4LDI5IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKICNpbmNs
dWRlICJDYWxsTW9kZS5oIgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRh
Lmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAotI2lmIEVOQUJMRShKSVQpCi0KIGNsYXNzIENDYWxsSGVscGVyczsKK2NsYXNzIEV4ZWN1
dGFibGVCYXNlOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU0Z1bmN0aW9uOwor
Y2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU7CiBlbnVtIE9wY29kZUlEIDogdW5zaWdu
ZWQ7CiAKK3N0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIHN0cnVjdCBVbmxpbmtlZENhbGxM
aW5rSW5mbzsKIAogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOworCiAgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBO
b25lLAogICAgICAgICBDYWxsLApAQCAtNTksNiArNjMsOCBAQCBjbGFzcyBDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBE
aXJlY3RDb25zdHJ1Y3QsCiAgICAgICAgIERpcmVjdFRhaWxDYWxsCiAgICAgfTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7CiAgICAg
CiAgICAgc3RhdGljIENhbGxUeXBlIGNhbGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKTsKIApA
QCAtMTc0LDM1ICsxODAsNDMgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJh
d1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgcmV0dXJuIGlzVmFyYXJnc0Nh
bGxUeXBlKHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKSk7CiAgICAgfQogCi0gICAg
Ym9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YiB8fCBtX2NhbGxlZU9yQ29kZUJs
b2NrOyB9CisgICAgYm9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuIHN0dWIoKSB8fCBtX2Nh
bGxlZU9yQ29kZUJsb2NrOyB9CiAgICAgdm9pZCB1bmxpbmsoVk0mKTsKIAorI2lmIEVOQUJMRShK
SVQpCiAgICAgdm9pZCBzZXRVcENhbGwoQ2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWVH
UFIpCiAgICAgewogICAgICAgICBtX2NhbGxUeXBlID0gY2FsbFR5cGU7CiAgICAgICAgIG1fY2Fs
bGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhW
TSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUik7Ci0KICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVHUFI7IH0KKyNlbmRpZgorCisgICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgQ2Fs
bFR5cGUsIEJ5dGVjb2RlSW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKik7CiAgICAgCiAgICAg
ZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKICAgICAgICAgWWVzLAogICAgICAgICBO
bwogICAgIH07CiAKKyNpZiBFTkFCTEUoSklUKQogcHJpdmF0ZToKLSAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlz
VGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CiAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwg
R1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJl
cGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7Ci0gICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKTsKKyAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVt
aXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOwogICAgIHN0YXRpYyB2b2lkIGVtaXREYXRh
SUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwor
CisgICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworICAgIHZvaWQgc2V0RGlyZWN0Q2Fs
bFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CisjZW5kaWYKKwogICAg
IHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6
WWVzOyB9CkBAIC0yMTcsNyArMjMxLDYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgbV9kb25lTG9jYXRp
b24gPSBkb25lTG9jYXRpb247CiAgICAgfQogCi0gICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2Fs
bCgpOwogCiAgICAgYm9vbCBhbGxvd1N0dWJzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1N0dWJz
OyB9CiAKQEAgLTIzNyw3ICsyNTAsNiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgc2V0Q29kZUJsb2Nr
KFZNJiwgSlNDZWxsKiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKICAgICB2b2lkIGNsZWFyQ29kZUJs
b2NrKCk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaygpOwotICAgIHZvaWQgc2V0
RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CiAKICAg
ICB2b2lkIHNldExhc3RTZWVuQ2FsbGVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNPYmpl
Y3QqIGNhbGxlZSk7CiAgICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCk7CkBAIC0yNDcsMjIg
KzI1OSwxOCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgc2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0
aW9uKEV4ZWN1dGFibGVCYXNlKik7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKTsK
ICAgICAKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU+JiYpOworI2VuZGlmCiAgICAgdm9pZCBjbGVhclN0dWIoKTsKIAogICAg
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViKCkgY29uc3QKICAgICB7CisjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgcmV0dXJuIG1fc3R1Yi5nZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldFNsb3dTdHViKFJlZjxKSVRTdHViUm91dGluZT4mJiBuZXdTbG93U3R1YikKLSAgICB7Ci0g
ICAgICAgIG1fc2xvd1N0dWIgPSBXVEZNb3ZlKG5ld1Nsb3dTdHViKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGNsZWFyU2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7
CisjZWxzZQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgogICAgIH0KIAogICAgIGJv
b2wgc2Vlbk9uY2UoKQpAQCAtMzMwLDE5ICszMzgsMTcgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDog
cHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOwogICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdWludDMyX3Qq
IGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICB9Ci0jZW5kaWYK
LQogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVuc2lnbmVkKTsK
KyAgICB2b2lkIHVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICAg
ICAgICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1Bh
dGhDb3VudCgpCiAgICAgewpAQCAtMzY0LDEwICszNzAsMTIgQEAgY2xhc3MgQ2FsbExpbmtJbmZv
IDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fc2xvd1BhdGhDYWxsRGVzdGlu
YXRpb24pOwogICAgIH0KIAorI2lmIEVOQUJMRShKSVQpCiAgICAgR1BSUmVnIGNhbGxlZUdQUigp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9jYWxsZWVHUFI7CiAgICAgfQorI2VuZGlmCiAKICAg
ICB1aW50MzJfdCBzbG93UGF0aENvdW50KCkKICAgICB7CkBAIC0zODMsOSArMzkxLDExIEBAIGNs
YXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJ
bmZvPiB7CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzTGlua2VkKCkpIHsKLSAgICAgICAgICAg
IGlmIChzdHViKCkpCisgICAgICAgICAgICBpZiAoc3R1YigpKSB7CisjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgICAgICAgICBzdHViKCktPmZvckVhY2hEZXBlbmRlbnRDZWxsKGZ1bmN0b3IpOwot
ICAgICAgICAgICAgZWxzZSB7CisjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgZnVuY3RvcihtX2NhbGxlZU9yQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNEaXJlY3QoKSkKICAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihtX2xhc3RT
ZWVuQ2FsbGVlT3JFeGVjdXRhYmxlLmdldCgpKTsKQEAgLTM5NywyNiArNDA3LDM1IEBAIGNsYXNz
IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZv
PiB7CiAKICAgICB2b2lkIHZpc2l0V2VhayhWTSYpOwogCisjaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIHNldEZyYW1lU2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEmKTsKIAog
ICAgIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhKiBmcmFtZVNodWZmbGVEYXRhKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2ZyYW1lU2h1ZmZsZURhdGEuZ2V0KCk7CiAgICAgfQorI2VuZGlm
CiAKIHByaXZhdGU6CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBm
YXN0UGF0aFN0YXJ0KCk7CiAKKyAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVy
IG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxv
Y2F0ZWQgZm9yIGFyZ3VtZW50cy4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewog
ICAgICAgICBVbmlvblR5cGUoKSAKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgOiBkYXRh
SUMgeyBudWxscHRyLCBJbnZhbGlkR1BSUmVnIH0KKyNlbHNlCisgICAgICAgICAgICA6IGRhdGFJ
QyB7IG51bGxwdHIgfQorI2VuZGlmCiAgICAgICAgIHsgfQogICAgICAgICBzdHJ1Y3QgRGF0YUlD
IHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21v
bm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uOworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICBH
UFJSZWcgbV9jYWxsTGlua0luZm9HUFI7CisjZW5kaWYKICAgICAgICAgfSBkYXRhSUM7CiAKICAg
ICAgICAgc3RydWN0IHsKQEAgLTQyOSw5ICs0NDgsMTAgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDog
cHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAgIFdyaXRl
QmFycmllcjxKU0NlbGw+IG1fY2FsbGVlT3JDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9sYXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZTsKKyNpZiBFTkFCTEUoSklUKQogICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gbV9zdHViOwotICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gbV9zbG93U3R1YjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+IG1fZnJhbWVTaHVmZmxlRGF0YTsKKyNlbmRpZgogICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAgICAg
Ym9vbCBtX2hhc1NlZW5DbG9zdXJlIDogMTsKQEAgLTQ0MSw5ICs0NjEsMTAgQEAgY2xhc3MgQ2Fs
bExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsK
ICAgICBib29sIG1fY2xlYXJlZEJ5SmV0dGlzb24gOiAxOwogICAgIHVuc2lnbmVkIG1fY2FsbFR5
cGUgOiA0OyAvLyBDYWxsVHlwZQogICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDogMTsgLy8gVXNl
RGF0YUlDCisjaWYgRU5BQkxFKEpJVCkKICAgICBHUFJSZWcgbV9jYWxsZWVHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisjZW5kaWYKICAgICB1aW50MzJfdCBtX3Nsb3dQYXRoQ291bnQgeyAwIH07Ci0g
ICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9y
IHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBk
aXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMu
CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtNDUzLDExICs0NzQsNyBAQCBpbmxpbmUgQ29kZU9y
aWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KQogCiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8gewogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMg
Y2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KLSAgICBDYWxsTGlua0luZm86OkNh
bGxUeXBlIGNhbGxUeXBlOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGRvbmVMb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
IGZyYW1lU2h1ZmZsZURhdGE7CiB9OwogCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcAppbmRleCBmN2FmYjJiMGYyOGZkOWU1ZmZjNWMzNGI2YTNhODU2YWUzNzMw
MmY1Li5kYjIwMzMxZWE5OTBiOThjYjMzYTQyYzlmOWU0NjY3YjY5MWZlNzc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0lu
Zm8uaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CiAKQEAgLTYzLDM0ICs2Miw3IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCCiAgICAg
ICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgfQogI2VuZGlmCi0KLSAgICBhdXRvIGlu
c3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSk7Ci0gICAgT3Bjb2RlSUQgb3AgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsK
LQotICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87Ci0gICAgc3dpdGNoIChvcCkg
ewotICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9u
LT5hczxPcENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgICAgICBjYWxsTGlua0lu
Zm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxv
Y2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX3RhaWxfY2Fs
bDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcFRhaWxDYWxsPigp
Lm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0
cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9j
YWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDoK
LSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4o
KS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKLSAgICB9
Ci0gICAgCi0gICAgCi0gICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKGNhbGxMaW5rSW5mby0+bGFz
dFNlZW5DYWxsZWUoKSk7CisgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7CiB9CiAKIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKApAQCAtMTEwLDYgKzgyLDE3IEBA
IENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAg
cmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQo
bG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKICAgICB9CisgICAgaWYgKCFj
YWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigpKSB7CisgICAgICAgIGlmIChleGl0U2l0ZURhdGEu
dGFrZXNTbG93UGF0aCkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpLT5oYXNFeGl0U2l0ZShERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwg
QmFkQ29uc3RhbnRWYWx1ZSkpKSB7CisgICAgICAgICAgICAvLyBXZSBjb3VsZCBmb3JjZSB0aGlz
IHRvIGJlIGEgY2xvc3VyZSBjYWxsLCBidXQgaW5zdGVhZCB3ZSdsbCBqdXN0IGFzc3VtZSB0aGF0
IGl0CisgICAgICAgICAgICAvLyB0YWtlcyBzbG93IHBhdGguCisgICAgICAgICAgICByZXR1cm4g
dGFrZXNTbG93UGF0aCgpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgcmV0
dXJuIGNvbXB1dGVGb3IobG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBleGl0
U2l0ZURhdGEpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKaW5kZXggNzdjYWE4ZTU3ZTk0YWQ3MzJhODcwM2I3MTBmZDQ4MGY3MTgxM2FlNi4u
OWJhMmQ1MWY5MGVmZjBjNzJiOTBhOWQ5YTc3ZDk2YmI2NTZmNzI5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ0OSwxNCArNDQ5LDE3IEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YSh0aGlzKTsgXAogICAgIG5ldyAoJm1ldGFkYXRhKSBfX29wOjpNZXRhZGF0YSB7IGJ5
dGVjb2RlIH07IFwKIAotI2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKLQot
I2RlZmluZSBMSU5LKC4uLikgXAotICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18p
KTogeyBcCisjZGVmaW5lIExJTktfSU1QTCguLi4pIFwKICAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpIFwKICAgICAgICAgV1RGX0xBWllfSEFT
X1JFU1QoX19WQV9BUkdTX18pKHsgXAogICAgICAgICAgICAgV1RGX0xBWllfRk9SX0VBQ0hfVEVS
TShMSU5LX0ZJRUxELCAgV1RGX0xBWllfUkVTVF8oX19WQV9BUkdTX18pKSBcCiAgICAgICAgIH0p
IFwKKworI2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKKworI2RlZmluZSBM
SU5LKC4uLikgXAorICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKTogeyBcCisg
ICAgICAgIExJTktfSU1QTChfX1ZBX0FSR1NfXykgXAogICAgICAgICBicmVhazsgXAogICAgIH0K
IApAQCAtNDY1LDEwICs0NjgsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogICAgICAgICBtX2J5
dGVjb2RlQ29zdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKICAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgICAgICBMSU5LKE9wQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAg
IExJTksoT3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2Fs
bEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BDb25zdHJ1Y3RWYXJh
cmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0QnlWYWwsIHByb2ZpbGUpCiAgICAgICAg
IExJTksoT3BHZXRQcml2YXRlTmFtZSwgcHJvZmlsZSkKIApAQCAtNDk4LDExICs0OTcsNiBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blBy
b3BlcnR5KQogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQogCi0g
ICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHBy
b2ZpbGUpCi0gICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhP
cENvbnN0cnVjdCwgcHJvZmlsZSkKLQogICAgICAgICBMSU5LKE9wSW5CeVZhbCkKICAgICAgICAg
TElOSyhPcFB1dEJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlWYWxEaXJlY3QpCkBAIC01Mjcs
MTMgKzUyMSw2OCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wQ2F0
Y2gpCiAgICAgICAgIExJTksoT3BQcm9maWxlQ29udHJvbEZsb3cpCiAKKyAgICAgICAgY2FzZSBv
cF9jYWxsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsLCBwcm9maWxlKQorICAgICAg
ICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExp
bmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxw
dHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3Rh
aWxfY2FsbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGwsIHByb2ZpbGUpCisj
aWYgRU5BQkxFKEpJVCkKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVE
YXRhID0gQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxD
YWxsKGJ5dGVjb2RlLCBudW1QYXJhbWV0ZXJzKCkpOworICAgICAgICAgICAgbWV0YWRhdGEubV9j
YWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZv
cihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksICZzaHVmZmxlRGF0YSk7CisjZWxzZQor
ICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwg
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCks
IG51bGxwdHIpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsRXZh
bCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxp
emVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVj
dGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENv
bnN0cnVjdCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmlu
aXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBp
bnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Ci0gICAgICAgICAgICBJTklU
SUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgTElOS19JTVBMKE9w
SXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlh
bGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3Ry
dWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKLSAgICAgICAgICAgIElOSVRJQUxJ
WkVfTUVUQURBVEEoT3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBMSU5LX0lNUEwoT3BJdGVy
YXRvck5leHQpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXpl
RGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rp
b24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BD
YWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZv
LmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
LCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczogeworICAgICAgICAg
ICAgTElOS19JTVBMKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0
YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpj
YWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50czogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxGb3J3
YXJkQXJndW1lbnRzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0lu
Zm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAg
ICAgICBMSU5LX0lNUEwoT3BDb25zdHJ1Y3RWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAg
bWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNzgzLDIxICs4MzIsMTggQEAgdm9p
ZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJ
VENvZGU+IGppdENvZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9qaXRDb25z
dGFudFBvb2wuaXNFbXB0eSgpKTsKICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9
IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkpOwogICAg
ICAgICBqaXREYXRhLm1fc3R1YkluZm9zID0gRml4ZWRWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+
KGppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKLSAgICAgICAgaml0RGF0YS5t
X2NhbGxMaW5rSW5mb3MgPSBGaXhlZFZlY3RvcjxDYWxsTGlua0luZm8+KGppdENvZGUtPm1fdW5s
aW5rZWRDYWxscy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkQ2FsbExpbmtJ
bmZvIDogaml0Q29kZS0+bV91bmxpbmtlZENhbGxzKSB7CisgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2Vy
LCB1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEFTU0VS
VChjYWxsTGlua0luZm8pOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRp
b25zKHsgfSwgdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0
YW50UG9vbC5hdChpKTsKICAgICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgogICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5n
ZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50ZXIoKSk7Ci0gICAgICAg
ICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gaml0
Q29kZS0+bV91bmxpbmtlZENhbGxzW2luZGV4XTsKLSAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zW2luZGV4XTsKLSAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENh
bGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAg
ICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gJmNhbGxMaW5rSW5mbzsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogewogICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucG9pbnRlcigpKTsK
ICAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJ
bmZvID0gaml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvc1tpbmRleF07CkBAIC0xNTY3LDE1ICsx
NjEzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKLQotICAgIGZvckVhY2hMTEludENhbGxMaW5r
SW5mbyhbJl0oTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgewotICAgICAgICBpZiAo
Y2FsbExpbmtJbmZvLmlzTGlua2VkKCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZv
LmNhbGxlZSgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCAiQ2xlYXJpbmcgTExJbnQgY2FsbCBmcm9tICIsICp0aGlzKTsKLSAgICAgICAgICAgIGNh
bGxMaW5rSW5mby51bmxpbmsoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2FsbExpbmtJbmZv
Lmxhc3RTZWVuQ2FsbGVlKCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZvLmxhc3RT
ZWVuQ2FsbGVlKCkpKQotICAgICAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyTGFzdFNlZW5DYWxs
ZWUoKTsKLSAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xNTkzLDggKzE2MzAsNiBA
QCBDb2RlQmxvY2s6OkpJVERhdGEmIENvZGVCbG9jazo6ZW5zdXJlSklURGF0YVNsb3coY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJikKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNh
Y2hlcygpCiB7CiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3Mp
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8udmlzaXRXZWFrKHZtKCkpOwogICAgICAgICBmb3Ig
KGF1dG8mIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlckJhc2UgbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAgICAgICAg
ICAgICBzdHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CkBAIC0xNjEy
LDE5ICsxNjQ3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkK
ICAgICAgICAgfQogICAgIH0KICNlbmRpZgotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBpZiAo
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7Ci0gICAgICAgIC8vIFZlcmlmeSB3
ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxs
cy4KLSAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0
PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3Mp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKLSAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2VsbCopIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9Ci0KLSAgICB9Ci0jZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNjM0LDggKzE2NTYs
MTMgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIAog
ICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUlu
dGVycHJldGVkKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRl
ZChqaXRUeXBlKCkpKSB7CiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAg
ICAgICAgLy8gSWYgdGhlIENvZGVCbG9jayBpcyBERkcgb3IgRlRMLCBDYWxsTGlua0luZm8gaW4g
bWV0YWRhdGEgaXMgbm90IHJlbGF0ZWQuCisgICAgICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVD
YWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgICAg
ICBjYWxsTGlua0luZm8udmlzaXRXZWFrKHZtKTsKKyAgICAgICAgfSk7CisgICAgfQogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCkBAIC0xNzAwLDEyICsxNzI3LDEzIEBA
IHZvaWQgQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHZvaWQgQ29kZUJsb2NrOjpn
ZXRJQ1N0YXR1c01hcChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBJQ1N0YXR1c01hcCYgcmVz
dWx0KQogewogI2lmIEVOQUJMRShKSVQpCisgICAgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxM
aW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgcmVzdWx0
LmFkZChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFs
dWUuY2FsbExpbmtJbmZvID0gJmNhbGxMaW5rSW5mbzsKKyAgICB9KTsKICAgICBpZiAoSklUQ29k
ZTo6aXNKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0
RGF0YS5nZXQoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEt
Pm1fc3R1YkluZm9zKQogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1YkluZm8uY29kZU9y
aWdpbiwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gJnN0dWJJbmZvOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5r
SW5mb3MpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29kZU9yaWdp
bigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNhbGxMaW5r
SW5mbzsKICAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKQEAgLTE3NjAsMTUgKzE3ODgsMjIgQEAg
U3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotQ2FsbExpbmtJbmZvKiBDb2RlQmxv
Y2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBpbmRleCkK
K0NhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXggaW5kZXgpCiB7Ci0gICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDog
aml0RGF0YS0+bV9jYWxsTGlua0luZm9zKSB7Ci0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZv
LmNvZGVPcmlnaW4oKSA9PSBDb2RlT3JpZ2luKGluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gJmNhbGxMaW5rSW5mbzsKLSAgICAgICAgfQorICAgIGF1dG8mIGluc3RydWN0aW9uID0gaW5z
dHJ1Y3Rpb25zKCkuYXQoaW5kZXgpOworICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCkpIHsKKyNkZWZpbmUgQ0FTRShPcCkgXAorICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCisgICAg
ICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2FsbExp
bmtJbmZvOyBcCisgICAgICAgIGJyZWFrOworCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJ
TlRfQ0FMTF9MSU5LX0lORk8oQ0FTRSkKKworI3VuZGVmIENBU0UKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKICAgICB9CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRh
KiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjEzNSwxMyArMjE3MCw2
IEBAIHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBTaHJpbmtNb2RlIHNocmlua01vZGUpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2Rl
QmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJ
bmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwot
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCiB2b2lkIENvZGVC
bG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUs
IFBvbHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQogewogICAgIG5vdGljZUluY29taW5nQ2Fs
bChjYWxsZXJGcmFtZSk7CkBAIC0yMTUyLDEwICsyMTgwLDE2IEBAIHZvaWQgQ29kZUJsb2NrOjps
aW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1v
cnBoaWNDCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAordm9pZCBDb2RlQmxvY2s6OmxpbmtJ
bmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWlu
ZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOworICAgIG1faW5jb21p
bmdDYWxscy5wdXNoKGluY29taW5nKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29t
aW5nQ2FsbHMoKQogewotICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9
IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nTExJbnRDYWxs
cy5iZWdpbigpLT51bmxpbmsoKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkg
IT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4o
KS0+dW5saW5rKHZtKCkpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgSklURGF0YSogaml0RGF0YSA9
IG51bGxwdHI7CiAgICAgewpAQCAtMjE2MywyMCArMjE5NywxMiBAQCB2b2lkIENvZGVCbG9jazo6
dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgICAgIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCk7
CiAgICAgfQogICAgIGlmIChqaXREYXRhKSB7Ci0gICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2lu
Y29taW5nQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuZW5kKCkpCi0g
ICAgICAgICAgICBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkp
OwogICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVn
aW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKICAgICAg
ICAgICAgIGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGlu
ayh2bSgpKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxv
Y2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlu
a0luZm8qIGluY29taW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7
Ci0gICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIENvZGVCbG9j
ayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0
YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7
CkBAIC0yMzI5LDIyICsyMzU1LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgaWYg
KHZtLmhlYXAuY3VycmVudFRocmVhZElzRG9pbmdHQ1dvcmsoKSAmJiAhdm0uaGVhcC5pc01hcmtl
ZChvd25lckV4ZWN1dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKSVQp
CiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
ICAgIGlmIChKSVREYXRhKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKLSAgICAg
ICAgfQotI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKLSAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byogY2Fs
bExpbmtJbmZvIDogZGZnQ29tbW9uLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9CisjaWYgRU5B
QkxFKERGR19KSVQpCisgICAgICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBjYWxs
TGlua0luZm8gOiBkZmdDb21tb24tPm1fY2FsbExpbmtJbmZvcykKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOworICAgICAgICAgICAgfQog
I2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3JFYWNoTExJbnRPckJhc2Vs
aW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKIAogICAgIC8vIFRoaXMgYWNjb21wbGlz
aGVzICgyKS4KICAgICBvd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUodm0sIGFsdGVybmF0
aXZlKCksIGNvZGVUeXBlKCksIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKQEAgLTI4NDcsMTkgKzI4
NzMsMTMgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGUKIHsKICAgICBhdXRvIGluc3RydWN0aW9u
ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+b3Bjb2RlSUQoKSkgewotI2RlZmluZSBDQVNFMShPcCkgXAorI2RlZmluZSBDQVNFKE9w
KSBcCiAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKICAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlv
bi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2ZpbGU7CiAKLSNkZWZpbmUgQ0FT
RTIoT3ApIFwKLSAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAgICAgICByZXR1cm4gJmluc3Ry
dWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxMaW5rSW5mby5tX2FycmF5UHJv
ZmlsZTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRTEpCi0g
ICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ0FTRTIpCisgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNFKQogCi0jdW5kZWYgQ0FTRTEK
LSN1bmRlZiBDQVNFMgorI3VuZGVmIENBU0UKIAogICAgIGNhc2UgT3BHZXRCeUlkOjpvcGNvZGVJ
RDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKQEAgLTMwMjksMTcgKzMwNDksMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5
UHJvZmlsZVByZWRpY3Rpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2UKICAgICAg
ICAgfQogICAgIH0pOwogCi0jZGVmaW5lIFZJU0lUMShfX29wKSBcCisjZGVmaW5lIFZJU0lUKF9f
b3ApIFwKICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEp
IHsgcHJvY2VzcyhtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSk7IH0pOwogCi0jZGVmaW5lIFZJU0lU
MihfX29wKSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFk
YXRhKSB7IHByb2Nlc3MobWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUpOyB9
KTsKLQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoVklTSVQxKQotICAg
IEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKFZJU0lUMikKKyAgICBG
T1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUKQogCi0jdW5kZWYgVklTSVQx
Ci0jdW5kZWYgVklTSVQyCisjdW5kZWYgVklTSVQKIAogICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
T3BJdGVyYXRvck5leHQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsKICAgICAgICAgcHJvY2Vzcyht
ZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKaW5kZXggNjRmOWY1YWJjZmUyYWU3MDVkMWRhNjVhYTlmODMxOTdiOTZj
NmQzMS4uYjdhZWEyNjc3ZjVlOTQ5MDhhYjM1NWY5NmIwZDIzYzM3ODI0MjAxMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtNTQsNyArNTQsNiBAQAog
I2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSnVtcFRhYmxlLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRl
ICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIk1ldGFkYXRhVGFibGUuaCIK
ICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpAQCAtMjYxLDggKzI2MCw2IEBA
IGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPiBt
X2NhbGxMaW5rSW5mb3M7Ci0gICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8s
IFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAg
ICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBQYWNrZWRSYXdT
ZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5jb21pbmdQb2x5bW9ycGhpY0Nh
bGxzOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKQEAgLTI5
MSw3ICsyODgsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBU
aGlzIGlzIGEgc2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFyaWx5IGZvciBjb21waWxpbmcg
T1NSIGV4aXRzIGluIHRoZSBjYXNlCiAgICAgLy8gdGhhdCB0aGVyZSBoYWQgYmVlbiBpbmxpbmlu
Zy4gQ2hhbmNlcyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMsIHlvdSdyZSByZWFsbHkKICAg
ICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBv
ZiBjYWxsaW5nIHRoaXMuCi0gICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRl
Y29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOworICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJ
bmZvRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUlu
ZGV4KTsKICAgICAKICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKQEAgLTMw
OSwxNCArMzA2LDExIEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKICAgICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotI2lm
IEVOQUJMRShKSVQpCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVy
RnJhbWUsIENhbGxMaW5rSW5mbyopOworI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBsaW5rSW5j
b21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWND
YWxsTm9kZSopOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSAgICB2b2lkIGxpbmtJbmNvbWlu
Z0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKLQogICAg
IGNvbnN0IEluc3RydWN0aW9uKiBvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9u
KiBwYyk7CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNDUzLDcgKzQ0Nyw3IEBAIGNsYXNzIENvZGVCbG9jayA6
IHB1YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaFZhbHVlUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gdm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9y
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMTEludE9yQmFzZWxpbmVD
YWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYpOwogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBi
aW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiB1bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCk7CkBAIC05NTksNyArOTUzLDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgVk0qIG1fdm07CiAKICAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jh
d1BvaW50ZXIgeyBudWxscHRyIH07Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExp
bmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29t
aW5nTExJbnRDYWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgIFN0
cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJl
ZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCmluZGV4IDFkNTk0YWI4
MzUyODk3ZWM4YTc0NWVhMjQ5M2Y4ZDJkYTAxOGI5NjIuLjkyZGE5OWEwYmEyYWNjMWZjZGI2YTk3
MzVmY2RkZTIzZWZjOTMzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0lubGluZXMuaApAQCAtODYsNyArODYsNyBAQCB2b2lkIENvZGVCbG9jazo6
Zm9yRWFjaE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50
Q2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJiBmdW5jKQogewogICAg
IGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGZhMzJlOWI2NmJiN2M2MWZlYjMzOWY4MDUyOGMyZDM0NzFkODA2
OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0NQdHJUYWcuaCIKLSNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgi
Ci0jaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotc3RydWN0IEluc3RydWN0aW9uOwotCi1jbGFzcyBMTEludENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+IHsKLXB1YmxpYzoKLSAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50cHRyX3QgdW5saW5rZWRCaXQgPSAweDE7Ci0KLSAgICBMTEludENhbGxMaW5rSW5m
bygpID0gZGVmYXVsdDsKLSAgICAKLSAgICB+TExJbnRDYWxsTGlua0luZm8oKQotICAgIHsKLSAg
ICAgICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICB9Ci0gICAg
Ci0gICAgYm9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuICEobV9jYWxsZWVPckxhc3RTZWVu
Q2FsbGVlV2l0aExpbmtCaXQgJiB1bmxpbmtlZEJpdCk7IH0KLSAgICAKLQotICAgIHZvaWQgbGlu
ayhWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25M
aXN0KCkpCi0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVu
Q2FsbGVlV2l0aExpbmtCaXQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpOwotICAg
ICAgICB2bS53cml0ZUJhcnJpZXIob3duZXIsIGNhbGxlZSk7Ci0gICAgICAgIG1fbWFjaGluZUNv
ZGVUYXJnZXQgPSBjb2RlUHRyOwotICAgIH0KLQotICAgIHZvaWQgdW5saW5rKCkKLSAgICB7Ci0g
ICAgICAgIC8vIE1ha2UgbGluayBpbnZhbGlkYXRlZC4gSXQgd29ya3MgYmVjYXVzZSBMTEludCB0
ZXN0cyB0aGUgZ2l2ZW4gY2FsbGVlIHdpdGggdGhpcyBwb2ludGVyLiBCdXQgaXQgaXMgc3RpbGwg
dmFsaWQgYXMgbGFzdFNlZW5DYWxsZWUhCi0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxl
ZVdpdGhMaW5rQml0IHw9IHVubGlua2VkQml0OwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0
ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgIGlmIChp
c09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3Qq
IGNhbGxlZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWlzTGlua2VkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVj
dCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0KTsKLSAgICB9Ci0KLSAgICBK
U09iamVjdCogbGFzdFNlZW5DYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0
ICYgfnVubGlua2VkQml0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUo
KQotICAgIHsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1
bmxpbmtlZEJpdDsKLSAgICB9Ci0KLSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0g
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsg
dW5saW5rZWRCaXQgfTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
bV9tYWNoaW5lQ29kZVRhcmdldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCmluZGV4IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhi
Mjg1MjQ5MjFhYzgzOWJkMzYuLjFjYmM2NmY4NDk5NTQ5OTdlZjdjNTBkNDkzODQzMDJmMzVjNjI5
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTEyNiwxMSAr
MTI2LDE5IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVM
ZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwK
ICAgICBtYWNybyhPcEdldFByaXZhdGVOYW1lKSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAg
IG1hY3JvKE9wVGFpbENhbGwpIFwKKyAgICBtYWNybyhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8o
T3BDb25zdHJ1Y3QpIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9w
SXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8oT3BDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9w
VGFpbENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMp
IFwKICAgICBtYWNybyhPcENvbnN0cnVjdFZhcmFyZ3MpIFwKKworI2RlZmluZSBGT1JfRUFDSF9P
UENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkg
XAogICAgIG1hY3JvKE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKQEAgLTEz
OSw2ICsxNDcsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVy
YXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1h
Y3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENP
REVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5l
d0FycmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAj
ZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09CSkVDVF9BTExPQ0FUSU9OX1BST0ZJTEUobWFj
cm8pIFwKICAgICBtYWNybyhPcE5ld09iamVjdCkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09E
RV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BDYWxsKSBc
Ci0gICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBt
YWNybyhPcENvbnN0cnVjdCkgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCi0gICAgbWFj
cm8oT3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5B
UllfQVJJVEhfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wQWRkKSBcCiAgICAgbWFjcm8o
T3BNdWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBh
dGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZDljMmVkN2Q0OGU1YmEyNTZhMzM0NGRmMTY2ZGNhZmI3NWM2MWI4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guY3BwCkBA
IC0wLDAgKzEsMjAzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisK
KyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNhbGxGcmFt
ZVNodWZmbGVyLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1Nw
ZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVk
ZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgi
CisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCisjaW5jbHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKKyNp
bmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91
dGluZS5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkdldHRlclNldHRl
ckFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJQ1N0YXRzLmgiCisjaW5jbHVkZSAiSW5saW5lQWNj
ZXNzLmgiCisjaW5jbHVkZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSklULmgiCisjaW5jbHVkZSAiSklU
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TW9kdWxlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
Ik1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vz
cy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVk
ZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZN
JiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3sKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRy
eVB0clRhZz4oKSk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQ
YXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yKQoreworICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdl
dENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Cit9
CisjZW5kaWYKKworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5m
by5jYWxsTW9kZSgpKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0
dWFsVGh1bmspOworfQorCitzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCog
Y2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAvLyBFYWNoIFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1
bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVyLgorICAgIHJldHVy
biBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShjYWxsZWUpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorfQorCit2b2lk
IGxpbmtNb25vbW9ycGhpY0NhbGwoCisgICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAor
ICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyKQoreworICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CisKKyAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIC8v
IE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwor
ICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisg
ICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKKyAgICBDb2RlQmxv
Y2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIC8v
IFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisg
ICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxl
ZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFz
Q2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKKyAgICBBU1NFUlQob3duZXIpOworCisgICAgQVNT
RVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldE1vbm9t
b3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICBjYWxsTGlua0lu
Zm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOworCisgICAgaWYgKHNob3Vs
ZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQorICAgICAgICBkYXRhTG9nKCJM
aW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlu
a0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2sp
LCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOworCisgICAgaWYgKGNhbGxlZUNv
ZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxl
ckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKGNhbGxM
aW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0lu
Zm8uYWxsb3dTdHVicygpKSB7CisgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0lu
Zm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsK
K30KKworc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVS
ZWYpCit7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7CisjaWYgRU5BQkxFKEpJ
VCkKKyAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29kZUJsb2NrKCk7CisgICAgICAgIGlmICgh
Y2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpCisgICAgICAgICAgICBjYWxsTGlua0lu
Zm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpIHsKKyAgICAgICAgICAgIGxp
bmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOworCisgICAgICAgICAgICBp
ZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8ucmV2
ZXJ0Q2FsbFRvU3R1YigpOworICAgICAgICB9CisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNh
bGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2FjaGUgYm90aCBmb3IgZGF0
YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCisgICAgfQorICAgIGNhbGxMaW5rSW5mby5jbGVhclNl
ZW4oKTsKKyAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7CisgICAgaWYgKGNhbGxMaW5rSW5m
by5pc09uTGlzdCgpKQorICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Cit9CisKK3ZvaWQg
dW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQoreworICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5r
SW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CisgICAgCisgICAgcmV2ZXJ0Q2Fs
bCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElMaW5rQ2FsbCgpLnJldGFnZ2VkPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPigpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
LCBKU09iamVjdCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAo
IWNhbGxlZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGtpbmQgIT0gQ29kZUZv
ckNhbGwpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rp
b24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgY2FsbGVlKSkKKyAg
ICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlwb2ludCgpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0odm0pOworICAgIFVOVVNFRF9QQVJBTShraW5kKTsKKyAgICBVTlVTRURf
UEFSQU0oY2FsbGVlKTsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYgRU5B
QkxFKEpJVCkKKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdPcGVy
YXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlv
bikKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX09QRVJBVElPTl9XSVRIX1ZBTElEQVRJT04o
b3BlcmF0aW9uKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0
YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRy
VGFnPiBjYWxsKQoreworICAgIEpTQ19SRVRVUk5fUkVUQUdHRURfQ0FMTF9UQVJHRVRfV0lUSF9W
QUxJREFUSU9OKGNhbGwpOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiByZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCisgICAg
ICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKHN0dWJJbmZvLm1fc2xvd09w
ZXJhdGlvbik7CisgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsID0g
c3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbjsKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAg
ICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7CisgICAgICAg
IEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVh
ZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICAgICAgcmV0dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRp
b24oY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsodGh1
bmspLmNhbGxUYXJnZXQoKSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29kZUJs
b2NrKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICByZXR1cm4gcmV0YWdDYWxsVGFy
Z2V0V2l0aFZhbGlkYXRpb24oY2FsbCk7Cit9CisKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hD
YWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJU
YWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
Cit7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkZUTEpJVCkgeworICAgICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Cisg
ICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1bmtzOworICAgICAgICBGdW5j
dGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxs
VGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAgYXV0byBzbG93UGF0aFRodW5r
ID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1
dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgRlRMOjpT
bG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHNsb3dQ
YXRoVGh1bmspOworICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVu
Y3Rpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rp
b25QdHI8SklUVGh1bmtQdHJUYWc+KHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5
KS5jb2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlIC8vIEVOQUJMRShGVExf
SklUKQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBuZXdDYWxsZWVGdW5j
dGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOworfQorCitzdGF0aWMgdm9pZCByZXBh
dGNoU2xvd1BhdGhDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
Cit7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgc3R1YkluZm8u
bV9zbG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRy
VGFnPigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb24sIG5ld0NhbGxl
ZUZ1bmN0aW9uKTsKK30KKworZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CisgICAgR2l2ZVVwT25D
YWNoZSwKKyAgICBSZXRyeUNhY2hlTGF0ZXIsCisgICAgQXR0ZW1wdFRvQ2FjaGUKK307CisKK3N0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFZNJiB2bSwgSlNDZWxsKiBjZWxs
KQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKKwor
ICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3RydWN0dXJlLT50eXBlSW5mbygpOworICAgIGlmICh0
eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAvLyBGbGF0dGVuaW5nIGNv
dWxkIGhhdmUgY2hhbmdlZCB0aGUgb2Zmc2V0LCBzbyByZXR1cm4gZWFybHkgZm9yIGFub3RoZXIg
dHJ5LgorICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0p
OworICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgIH0KKyAgICAKKyAgICBpZiAo
IXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKK30KKworc3Rh
dGljIGJvb2wgZm9yY2VJQ0ZhaWx1cmUoSlNHbG9iYWxPYmplY3QqKQoreworICAgIHJldHVybiBP
cHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lk
IGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKFZNJiB2bSwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCYgcmVzdWx0KQoreworICAgIGlmIChyZXN1bHQuc2hvdWxkUmVzZXRTdHViQW5kRmlyZVdh
dGNocG9pbnRzKCkpIHsKKyAgICAgICAgcmVzdWx0LmZpcmVXYXRjaHBvaW50cyh2bSk7CisKKyAg
ICAgICAgeworICAgICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAgICAgc3R1YkluZm8ucmVzZXQobG9ja2VyLCBj
b2RlQmxvY2spOworICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2lu
ZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlk
OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgIGNhc2UgR2V0
QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJ
ZERpcmVjdDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsK
KyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtp
bmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lQnlJZE9wdGltaXplOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdl
dEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkOwor
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXM7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6CisgICAgICAg
IHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGly
ZWN0OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZERpcmVjdDsKKyAgICBjYXNlIEdl
dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWM7
CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZDsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFs
T2JqZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAg
Ly8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICAgICAg
aWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAg
ICAgY29uc3QgYm9vbCBpc1ByaXZhdGUgPSBraW5kID09IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUg
fHwga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDsKKworICAgICAgICBSZWZQdHI8
QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2Vs
bCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVU
eXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZUNlbGwKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFy
cmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwp
KSkgeworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nh
c3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rp
b24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVu
Z3RoKGxvY2tlcik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBJ
bmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8p
KSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoLCBwcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgeworICAg
ICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3ZlcnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5k
bGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2FkISBHdWFyZGluZworICAgICAgICAgICAg
ICAgIC8vIHRoaXMgd2l0aCBzdWNoIGEgY2hlY2sgZW5hYmxlcyB1cyB0byBhZGQgYW4gSUMgY2Fz
ZSBmb3IgdGhhdCBsb2FkIGlmIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50
cy0+b3ZlcnJvZGVUaGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEaXJlY3RBcmd1bWVudHNM
ZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNjb3BlZEFyZ3Vt
ZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxTY29wZWRBcmd1bWVudHMqPih2bSwgYmFz
ZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgLy8gRGl0dG8uCisgICAgICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2NvcGVk
QXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSAmJiBiYXNlQ2VsbC0+aW5o
ZXJpdHM8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+KHZtKSAmJiAhc2xvdC5pc1Vuc2V0KCkpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvIG1vZHVsZU5hbWVzcGFjZVNsb3QgPSBzbG90Lm1vZHVsZU5h
bWVzcGFjZVNsb3QoKSkKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gTW9kdWxlTmFtZXNwYWNl
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwganNDYXN0PEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oYmFzZUNlbGwpLCBtb2R1bGVOYW1lc3BhY2VTbG90LT5l
bnZpcm9ubWVudCwgU2NvcGVPZmZzZXQobW9kdWxlTmFtZXNwYWNlU2xvdC0+c2NvcGVPZmZzZXQp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFuZXdDYXNlKSB7CisgICAgICAg
ICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgICAgIGJvb2wgbG9h
ZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBl
KCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQ
cml2YXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0
KCk7CisgICAgICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAg
ICAgICAgICAgICAgc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAg
ICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJh
c2VDZWxsKTsKKyAgICAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICAgICAgLy8gT3B0aW1pemUgc2Vs
ZiBhY2Nlc3MuCisgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVU
eXBlOjpVbnNldAorICAgICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisg
ICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQorICAgICAgICAg
ICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1
Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYm
ICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFy
dFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4g
cHJvdG90eXBlQWNjZXNzQ2hhaW47CisKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
CisKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpID09
IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgIC8vIFRvIGNhY2hlIHNlbGYgY3VzdG9tcywg
d2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMgYmVjYXVzZSB3ZQorICAgICAgICAgICAgICAg
IC8vIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2Ug
Y2FjaGUgdGhlCisgICAgICAgICAgICAgICAgLy8gY29uc3RhbnQgZnVuY3Rpb24gcG9pbnRlci4K
KworICAgICAgICAgICAgICAgIGlmICghcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmpl
Y3QsIHNsb3Quc2xvdEJhc2UoKSwgc2xvdC5zbG90QmFzZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwganNDYXN0PEpT
T2JqZWN0Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsgLy8gV2UgbWF5IGhhdmUgY2hhbmdlZCBwcm9wZXJ0eSBvZmZzZXRzLgorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSAmJiBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAg
ICAgICAgICAgICAgICAvLyBJZiBhIGtpbmQgaXMgR2V0QnlLaW5kOjpCeUlkRGlyZWN0IG9yIEdl
dEJ5S2luZDo6UHJpdmF0ZU5hbWUsIHdlIGRvIG5vdCBuZWVkIHRvIGludmVzdGlnYXRlIHByb3Rv
dHlwZSBjaGFpbnMgZnVydGhlci4KKyAgICAgICAgICAgICAgICAvLyBDYWNoZWFiaWxpdHkganVz
dCBkZXBlbmRzIG9uIHRoZSBoZWFkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBpZiAoa2lu
ZCAhPSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3QgJiYgIWlzUHJpdmF0ZSkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxP
YmplY3QsIGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0
YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisg
ICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkgb2Zmc2V0cyBtYXkgaGF2ZSBj
aGFuZ2VkIGR1ZSB0byBmbGF0dGVuaW5nLiBXZSdsbCBjYWNoZSBsYXRlci4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVBy
b3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwg
cHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5n
ZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZvciBmYXN0ZXIgYWNjZXNzZXMuCisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIGBpZmAgc2hvdWxkIGJlIGluc2lk
ZSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eUJsYWguCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjE1Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9w
ZXJ0eU1pc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkg
PT0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
dG90eXBlUHJvcGVydHlIaXRDdXN0b20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSwgc2xv
dC5hdHRyaWJ1dGVzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTRnVu
Y3Rpb24qIGdldHRlciA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZUdldHRlcigpKQorICAgICAgICAgICAgICAgIGdldHRlciA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5j
dGlvbio+KHZtLCBzbG90LmdldHRlclNldHRlcigpLT5nZXR0ZXIoKSk7CisKKyAgICAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOworICAg
ICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LmRvbUF0dHJpYnV0
ZSgpKQorICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSA9IHNsb3QuZG9tQXR0cmlidXRlKCk7
CisKKyAgICAgICAgICAgIGlmIChraW5kID09IEdldEJ5S2luZDo6VHJ5QnlJZCkgeworICAgICAg
ICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBB
Y2Nlc3NDYXNlOjpMb2FkOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgp
KQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgICAgICAgICAg
ICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXRHZXR0ZXI7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwg
Y29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRp
b25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3Zl
KHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFsb2FkVGFy
Z2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjYW5F
bWl0SW50cmluc2ljR2V0dGVyKHN0dWJJbmZvLCBnZXR0ZXIsIHN0cnVjdHVyZSkpCisgICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwg
Y29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHN0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBnZXR0ZXIsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc1ByaXZhdGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNsb3QuaXNVbnNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaXNQcm94eSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJv
eHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkxvYWQs
IHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQsIGlzUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHBy
b3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzbG90Lmlz
Q2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHNs
b3QuaXNVbnNldCgpID8gQWNjZXNzQ2FzZTo6TWlzcyA6IEFjY2Vzc0Nhc2U6OkxvYWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZN
b3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICAg
ICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNj
ZXNzb3IpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9t
QWNjZXNzb3JHZXR0ZXI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZUdldHRlcjsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpcyAmJiB0eXBl
ID09IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyICYmIGRvbUF0dHJpYnV0ZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCisgICAg
ICAgICAgICAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KHNsb3QuY3VzdG9t
R2V0dGVyKCkpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSAmJiBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5zbG90
QmFzZSgpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlBZGRB
Y2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1
ZSkpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUs
IFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVt
cCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpC
eUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKKyAgICAgICAg
ICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6
OkJ5SWREaXJlY3Q6CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlk
OgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6UHJp
dmF0ZU5hbWU6CisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVC
bG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBH
aXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hHZXRCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtp
bmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwor
ICAgIAorICAgIGlmICh0cnlDYWNoZUdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNl
VmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2Fj
aGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBw
cm9wcmlhdGVHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKK30KKworCitzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5kZXguaXNJ
bnQzMigpKQorICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0Owor
CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIEpTQ2VsbCogYmFzZSA9
IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGU7CisgICAgICAgIGlmIChiYXNlLT50eXBlKCkgPT0gRGlyZWN0QXJndW1lbnRzVHlw
ZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRGlyZWN0QXJn
dW1lbnRzTG9hZDsKKyAgICAgICAgZWxzZSBpZiAoYmFzZS0+dHlwZSgpID09IFNjb3BlZEFyZ3Vt
ZW50c1R5cGUpCisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFNj
b3BlZEFyZ3VtZW50c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTdHJp
bmdUeXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTdHJp
bmdMb2FkOworICAgICAgICBlbHNlIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0p
LT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNs
YXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBU
eXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlJbnQ4TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZM
b2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQxNkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVJbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRM
b2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGlt
aXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAg
ICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAg
ICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJT
aGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZElu
dDMyTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91Ymxl
U2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRE
b3VibGVMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250
aWd1b3VzU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRDb250aWd1b3VzTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VMb2FkOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0dWJJ
bmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1v
ZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
YWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29t
ZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRo
SnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAg
ICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJs
b2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZl
VXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheUdldEJ5
VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
U1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheUdldEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBiYXNlLCBpbmRleCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uR2V0QnlWYWxHZW5l
cmljKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlh
dGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5
S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBzd2l0Y2ggKHB1dEJ5S2lu
ZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2lu
ZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNT
dHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3Q7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Cisg
ICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNl
dFByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgewor
ICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZh
dGVGaWVsZEdlbmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
U2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYzsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQg
Y29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBh
cHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAm
c2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIHN3aXRj
aCAocHV0QnlLaW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRj
aCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoK
KyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VS
VChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6
CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBo
YXBweQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJl
c3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJv
cGVydHlOYW1lLnVpZCgpKTsKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICAg
ICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYm
ICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byBkbyBzb21ldGhpbmcg
c21hcnRlciBoZXJlLi4uCisgICAgICAgIGlmIChpc0NvcHlPbldyaXRlKG9sZFN0cnVjdHVyZS0+
aW5kZXhpbmdNb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgIC8vIFdlIGNhbid0IGVuZCB1cCBzdG9yaW5nIHRvIGEgQ29XIG9uIHRoZSBwcm90b3R5cGUg
c2luY2UgaXQgc2hvdWxkbid0IG93biBwcm9wZXJ0aWVzLgorICAgICAgICBBU1NFUlQoIWlzQ29w
eU9uV3JpdGUoc2xvdC5iYXNlKCktPmluZGV4aW5nTW9kZSgpKSk7CisKKyAgICAgICAgaWYgKCFv
bGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNl
VmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgYm9vbCBpc1Byb3h5ID0gZmFsc2U7CisgICAgICAg
IGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAg
ICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsK
KyAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxsOworICAgICAgICAgICAgaXNQcm94eSA9
IHRydWU7CisKKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IGNhY2hlIFJlcGxhY2Ug
YW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHkuIFdlIGRvbid0CisgICAgICAgICAgICAv
LyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2JhbCBvYmplY3RzIHdpbGwgbmV2ZXIgc2hh
cmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgICAgICAvLyBpbiBvdXIgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGJvb2wgaXNDYWNoZWFibGVQcm94eSA9IChzbG90Lmlz
Q2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGlu
Z1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKQor
ICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKTsKKyAgICAgICAgICAg
IGlmICghaXNDYWNoZWFibGVQcm94eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1Byb3h5ICYmIChwdXRLaW5kID09IFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCB8fCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVj
dFByaXZhdGVGaWVsZERlZmluZSkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAoc2xv
dC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgeworICAgICAg
ICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0
eSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0IGhlbHBzIGNhdGNoIGJ1Z3MgaWYg
d2UgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBkaXNhYmxlIGNhY2hpbmcKKyAgICAgICAgICAgICAg
ICAvLyB3aGVuIHdlIHRyYW5zaXRpb24gdGhlbiBzdG9yZSB0byBhbiBleGlzdGluZyBwcm9wZXJ0
eS4gVGhpcyBpcyBjb21tb24gYW1vbmcKKyAgICAgICAgICAgICAgICAvLyBwYXRocyB0aGF0IHJl
aWZ5IGxhenkgcHJvcGVydGllcy4gSWYgd2UgcmVpZnkgYSBsYXp5IHByb3BlcnR5IGFuZCBmb3Jn
ZXQKKyAgICAgICAgICAgICAgICAvLyB0byBkaXNhYmxlIGNhY2hpbmcsIHdlIG1heSBjb21lIGRv
d24gdGhpcyBwYXRoLiBUaGUgUmVwbGFjZSBJQyBkb2VzIG5vdAorICAgICAgICAgICAgICAgIC8v
IGtub3cgaG93IHRvIG1vZGVsIHRoZXNlIHR5cGVzIG9mIHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAo
b3IgYW55IHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gZm9yIHRoYXQg
bWF0dGVyKS4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSh2bSkgPT0gb2xkU3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgIG9s
ZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNo
ZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgICAgICYmIElubGlu
ZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1
Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICAg
ICAmJiAhaXNQcm94eSkgeworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxp
bmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxm
UGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBi
YXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihz
bG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6UmVwbGFjZSwgcHJvcGVydHlO
YW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0KCksIGlzUHJveHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoIWlzUHJveHkpOworICAgICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKKworICAgICAgICAgICAgICAgIGlm
ICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvbGQgc3RydWN0dXJl
IGlzIGRpY3Rpb25hcnksIGl0IG1lYW5zIHRoYXQgdGhpcyBpcyBvbmUtb24tb25lIGJldHdlZW4g
YW4gb2JqZWN0IGFuZCBhIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlz
IE5ld1Byb3BlcnR5IG9wZXJhdGlvbiwgZ2VuZXJhdGluZyBJQyBmb3IgdGhpcyBkb2VzIG5vdCBv
ZmZlciBhbnkgYmVuZWZpdCBiZWNhdXNlIHRoaXMgdHJhbnNpdGlvbiBuZXZlciBoYXBwZW5zIGFn
YWluLgorICAgICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpLCBvZmZzZXQpOworICAgICAg
ICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNj
ZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBKU09iamVjdDo6cHV0IGlzIG92ZXJyaWRk
ZW4gYnkgVXNlck9iamVjdCwgVXNlck9iamVjdDo6cHV0IHBlcmZvcm1zIHNpZGUtZWZmZWN0IG9u
IEpTT2JqZWN0OjpwdXQsIGFuZCBpdCBuZWdsZWN0cyB0byBtYXJrIHRoZSBQdXRQcm9wZXJ0eVNs
b3QgYXMgbm9uLWNhY2hhZWJsZSwKKyAgICAgICAgICAgICAgICAvLyB0aGVuIGFyYml0cmFyeSBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbnMgY2FuIGhhcHBlbiBkdXJpbmcgdGhlIHB1dCBvcGVyYXRpb24s
IGFuZCB0aGlzIGdlbmVyYXRlcyB3cm9uZyB0cmFuc2l0aW9uIGluZm9ybWF0aW9uIGhlcmUgYXMg
aWYgb2xkU3RydWN0dXJlIC0+IG5ld1N0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAvLyBJbiBy
ZWFsaXR5LCB0aGUgdHJhbnNpdGlvbiBpcyBvbGRTdHJ1Y3R1cmUgLT4gc29tZXRoaW5nIHVua25v
d24gc3RydWN0dXJlcyAtPiBiYXNlVmFsdWUncyBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAg
Ly8gVG8gZ3VhcmQgYWdhaW5zdCB0aGUgZW1iZWRkZXIncyBwb3RlbnRpYWxseSBpbmNvcnJlY3Qg
VXNlck9iamVjdDo6cHV0IGltcGxlbWVudGF0aW9uLCB3ZSBzaG91bGQgY2hlY2sgZm9yIHRoaXMg
Y29uZGl0aW9uIGFuZCBpZiBmb3VuZCwgYW5kIGdpdmUgdXAgb24gY2FjaGluZyB0aGUgcHV0Lgor
ICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkg
PT0gbmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUodm0pICE9IG5ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJl
LT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Cisg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
ICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGlu
ZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQ
cm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQ
b2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIG51
bGxwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFp
bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3Rv
dHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0
cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
ZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnQuaXNQcml2YXRl
TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgbmV3U3Ry
dWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlVHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShw
cm90b3R5cGVBY2Nlc3NDaGFpbiksIHN0dWJJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNl
dHRlcigpKSB7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Cisg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0Owor
ICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNj
ZXNzQ2hhaW47CisKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBp
ZiB3ZSdyZSBhIHNlbGYgY3VzdG9tLCBzaW5jZSB3ZSBtdXN0IGRpc2FsbG93IGRpY3Rpb25hcmll
cworICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBpbmZvcm1lZCBpZiB0
aGUgY3VzdG9tIGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNoZSB0aGUgY29uc3RhbnQKKyAgICAgICAg
ICAgICAgICAvLyBmdW5jdGlvbiBwb2ludGVyLgorICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVT
dGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNs
b3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgIGlmIChz
bG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hl
U3RhdHVzLT51c2VzUG9seVByb3RvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5
cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2Jq
ZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Rv
dHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQu
aW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNDdXN0b21BY2Nlc3NvcigpID8gQWNjZXNzQ2FzZTo6Q3Vz
dG9tQWNjZXNzb3JTZXR0ZXIgOiBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlciwgb2xkU3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgIGludmFsaWRPZmZzZXQs
IGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHksIHNs
b3QuY3VzdG9tU2V0dGVyKCkucmV0YWdnZWQ8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KCksIHNsb3Qu
YmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3QuYmFzZSgpIDogbnVsbHB0cik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzbG90LmlzQ2FjaGVhYmxlU2V0dGVy
KCkpOworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3Rv
dHlwZUFjY2Vzc0NoYWluOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkg
IT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBw
cmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNo
ZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9i
amVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJvdG90eXBlQWNjZXNz
Q2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKSktPmdl
dCh2bSwgaWRlbnQuaW1wbCgpLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpIHx8ICEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCEoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCku
YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5
cGVBY2Nlc3NDaGFpbiksIGlzUHJveHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAg
CisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3Qo
KSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsK
KworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisKKyAgICAgICAg
ICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVy
biByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxh
dGVyOworfQorCit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBw
dXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgCisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlh
dGVHZW5lcmljUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30KKwor
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFs
dWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCkK
K3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgSlNDZWxsKiBiYXNl
ID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUg
YWNjZXNzVHlwZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSkt
PnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xh
c3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5
cGVJbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQx
NlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWlu
dDE2OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlw
ZWRBcnJheVVpbnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhN
RTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCisgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisg
ICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1Vp
bnQ2NDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFz
azsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAgICAgICAgY2Fz
ZSBJbnQzMlNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkSW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRG91YmxlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWREb3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9i
amVjdC0+dm0oKSk7CisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9j
a2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRy
LCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikp
OworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNz
SW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVl
ZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQu
c2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQor
Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9k
ZSkKK3sKKyAgICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9
PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykpOworfQorCitzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlk
ZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5
S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9i
YWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmpl
Y3QpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgQVNTRVJU
KG9sZFN0cnVjdHVyZSk7CisgICAgICAgIGlmICghYmFzZVZhbHVlLmlzT2JqZWN0KCkgfHwgIW9s
ZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG9sZFN0cnVjdHVy
ZS0+aXNQcm94eSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAg
ICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlRGVsZXRlKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKworICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCkt
PnN0cnVjdHVyZSgpLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBqc0Nhc3Q8SlNPYmplY3QqPihiYXNl
VmFsdWUpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CisgICAgICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisg
ICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworCisgICAgICAgIGlmIChzbG90Lmlz
RGVsZXRlSGl0KCkpIHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IGlu
dmFsaWRPZmZzZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3Vy
cmVudGx5KG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpLCBuZXdPZmZzZXQpOworICAg
ICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkgfHwgbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdP
ZmZzZXQgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VS
VChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3Bl
cnR5RGVsZXRpb24pOworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3Qo
KSk7CisgICAgICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChuZXdPZmZzZXQpKTsKKyAgICAg
ICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVEZWxldGUodm0sIGNvZGVCbG9jaywg
cHJvcGVydHlOYW1lLCBuZXdPZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzbG90LmlzTm9uY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAg
IGlmIChlY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworCisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0ZU5vbkNvbmZpZ3VyYWJsZSwgcHJvcGVydHlOYW1l
LCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJs
b2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVNaXNzLCBwcm9wZXJ0eU5hbWUsIGludmFsaWRPZmZzZXQs
IG9sZFN0cnVjdHVyZSwgeyB9LCBudWxscHRyKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5m
by5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGVjbWFNb2Rl
LCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQu
Z2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
LmNvZGUoKSk7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhK
dW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8s
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5l
ZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwor
fQorCit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kLCBF
Q01BTW9kZSBlY21hTW9kZSkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYg
KHRyeUNhY2hlRGVsZXRlQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QsIGJhc2VWYWx1
ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLCBraW5kLCBlY21hTW9kZSkg
PT0gR2l2ZVVwT25DYWNoZSkgeworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFj
ZVdpdGhHZW5lcmljLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKGdsb2JhbE9iamVjdC0+dm0o
KSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICAg
ICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQorICAgICAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlkR2VuZXJpYyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxHZW5lcmljKTsKKyAgICB9Cit9CisKK2lu
bGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0lu
QnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgSW5CeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZTsKKyAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbklu
QnlWYWxPcHRpbWl6ZTsKKyAgICBjYXNlIEluQnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQor
eworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6CisgICAgICAg
IHJldHVybiBvcGVyYXRpb25JbkJ5SWRHZW5lcmljOworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5VmFs
OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeVZhbEdlbmVyaWM7CisgICAgY2FzZSBJbkJ5
S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZUdlbmVyaWM7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKKyAgICBib29sIHdhc0ZvdW5kLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtp
bmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAg
ICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIGlmICghYmFzZS0+c3RydWN0dXJl
KHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8ICghd2FzRm91bmQgJiYgIWJh
c2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGVGb3JBYnNlbmNl
KCkpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAg
ICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7Cisg
ICAgICAgIAorICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFj
Y2Vzc0NoYWluOworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7CisgICAgICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICAgICAgSW5saW5lQ2FjaGVBY3Rp
b24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgICAgICBpZiAoYWN0
aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisK
KyAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAm
JiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJh
c2UoKSA9PSBiYXNlCisgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCisg
ICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAg
ICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7
CisgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29k
ZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9
IGJhc2UpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOworICAgICAgICAgICAgICAgIGlm
ICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAg
ICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVh
dGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFw
cm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJl
KHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0
aW9uKCkub2Zmc2V0KCkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBjYWNo
ZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1Bv
bHlQcm90bykgeworICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVBy
b3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOworICAg
ICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAg
Y29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgaWRl
bnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2Us
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkp
OworCisgICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRl
KAorICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhp
dCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCA/IHNsb3QuY2Fj
aGVkT2Zmc2V0KCkgOiBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RG
TW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZv
LmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6
OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlm
IChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdC5jb2RlKCkpOworICAgICAgICAgICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCisg
ICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNo
ZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBib29sIHdhc0ZvdW5kLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtp
bmQga2luZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxz
ZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKHRyeUNhY2hl
SW5CeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB3
YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZU9iamVjdC0+Y2xh
c3NJbmZvKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3Bl
cnR5TmFtZS51aWQoKSkpKTsKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oa2luZCkpOworICAgIH0K
K30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVj
dCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElELnVpZCgpKTsKKworICAgIHsK
KyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
aywgdm0pOworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKworICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBh
Y3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBB
dHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgYm9v
bCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRB
Y2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2Fz
ZTo6SW5NaXNzLCBicmFuZElELCBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIHsgfSwgeyB9KTsK
KworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShu
ZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Cisg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVy
biByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxh
dGVyOworfQorCit2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBD
YWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIGJvb2wgd2FzRm91bmQsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CisKKyAgICBpZiAodHJ5Q2FjaGVIYXNQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHdhc0ZvdW5kLCBzdHViSW5mbykgPT0g
R2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRHZW5lcmljKTsKK30KKworc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQ2hlY2tQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNl
LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAg
aWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVj
dHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9y
Q2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisg
ICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkg
PSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kQWRkQWNj
ZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7
CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVD
aGVja1ByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElELCBzdHJ1Y3R1cmUpOworCisg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nh
c2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6Q2hlY2tQcml2YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAs
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOworCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50
c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwor
CisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBS
ZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCog
YmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlQ2hlY2tQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNh
Y2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZVNldFByaXZhdGVCcmFuZCgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsCisgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7Cisg
ICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ss
IHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChvbGRT
dHJ1Y3R1cmUpOworCisgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICBJbmxpbmVDYWNo
ZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKKyAgICAgICAgaWYgKGFj
dGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisgICAg
ICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6c2V0QnJh
bmRUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVy
ZSwgYnJhbmRJRC51aWQoKSk7CisgICAgICAgIGlmICghbmV3U3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
QVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAg
ICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktp
bmQ6OlNldEJyYW5kKTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7
CisgICAgICAgIAorICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICBSZWY8
QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVNldFByaXZhdGVCcmFuZCh2
bSwgY29kZUJsb2NrLCBicmFuZElELCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CisKKyAg
ICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2Fz
ZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAsIG9s
ZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZp
cmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2Nr
LCByZXN1bHQpOworICAgIAorICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBH
aXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hTZXRQcml2
YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVh
YmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYg
KHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2Jq
ZWN0LCBvbGRTdHJ1Y3R1cmUsICBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkK
KyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRHZW5lcmljKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlSW5zdGFuY2VPZigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlw
ZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgYm9vbCB3YXNGb3VuZCkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQ7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQodmFsdWVWYWx1ZS5pc0Nl
bGwoKSk7IC8vIHNob3VsZENvbnNpZGVyQ2FjaGluZyByZWplY3RzIG5vbi1jZWxscy4KKyAgICAK
KyAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAgICAgIAorICAgICAgICBKU0Nl
bGwqIHZhbHVlID0gdmFsdWVWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB2YWx1ZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+
IG5ld0Nhc2U7CisgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpT
T2JqZWN0Kj4odm0sIHByb3RvdHlwZVZhbHVlKTsKKyAgICAgICAgaWYgKHByb3RvdHlwZSkgewor
ICAgICAgICAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHZhbHVlKSkgewor
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5jZU9mQWNjZXNzQ2FzZTo6Y3JlYXRlKAor
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9m
TWlzcywgc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICAg
ICAgICAgICAgICBwcm90b3R5cGUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJ1Y3R1cmUt
PnByb3RvdHlwZVF1ZXJpZXNBcmVDYWNoZWFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUZWFjaCB0aGlzIHRvIGRvIHBvbHkgcHJvdG8uCisgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTY2MworICAgICAgICAgICAg
ICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgd2FzRm91bmQg
PyBwcm90b3R5cGUgOiBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9m
KAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSwgcHJvdG90eXBlLCB3YXNGb3VuZCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFu
Y2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6Oklu
c3RhbmNlT2ZIaXQgOiBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBwcm90b3R5cGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCFuZXdDYXNlKQorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwg
Y29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJpYywgQ2FjaGVhYmxlSWRlbnRp
ZmllcigpKTsKKyAgICAgICAgCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5zdGFuY2VPZkFk
ZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIoKSkpOworICAg
ICAgICAKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIFdURk1v
dmUobmV3Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21l
Q29kZSgpKSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZSZXBsYWNl
V2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIoKSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVC
bG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygp
ID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoSW5z
dGFuY2VPZigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgYm9vbCB3YXNGb3VuZCkKK3sKKyAgICBTdXBl
clNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgaWYgKHRyeUNhY2hl
SW5zdGFuY2VPZihnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgdmFsdWVWYWx1ZSwgcHJvdG90eXBl
VmFsdWUsIHN0dWJJbmZvLCB3YXNGb3VuZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9m
R2VuZXJpYyk7Cit9CisKK3ZvaWQgbGlua0RpcmVjdENhbGwoCisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikK
K3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOworICAgIAorICAgIENvZGVCbG9j
ayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIFZNJiB2
bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5m
by5pc0xpbmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJD
b2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9jaykpOwor
ICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKKyAgICAg
ICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVC
bG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2Fs
bGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKKworICAg
IGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KGNvZGVQdHIpKTsKKworICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCisgICAgICAg
IGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0lu
Zm8pOworfQorCit2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY2Fs
bGVyQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0lu
Zm8pOworfQorCitzdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIENvZGVCbG9jayog
Y2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworCisgICAgZGF0YUxv
Z0xuSWYoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jayksCisgICAgICAg
ICJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxv
Y2ssIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCkpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVh
bENhbGwoY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkpOworICAgIHJldmVydENhbGwodm0sIGNhbGxM
aW5rSW5mbywgdmlydHVhbFRodW5rKTsKKyAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5Vmly
dHVhbCgpOworfQorCituYW1lc3BhY2Ugeworc3RydWN0IENhbGxUb0NvZGVQdHIgeworICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyOworfTsKK30gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBs
aW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3
VmFyaWFudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8uYWxsb3dTdHVicygp
KTsKKworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1l
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgLy8gRHVyaW5nIGV4
ZWN1dGlvbiBvZiBsaW5rUG9seW1vcnBoaWNDYWxsLCB3ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3
ZSBuZXZlciBkbyBHQy4KKyAgICAvLyBHQyBqZXR0aXNvbnMgQ29kZUJsb2NrcywgY2hhbmdlcyBD
YWxsTGlua0luZm8gZXRjLiBhbmQgYnJlYWtzIGFzc3VtcHRpb24gZG9uZSBiZWZvcmUgYW5kIGFm
dGVyIHRoaXMgY2FsbC4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUodm0p
OworICAgIAorICAgIGlmICghbmV3VmFyaWFudCkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2
bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBj
YWxsaW5nCisgICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEg
Y2VsbC4KKyAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKKworICAg
IENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwor
ICAgIGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUt
PmNhbGxlZSgpLmFzQ2VsbCgpKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRv
bid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNz
ZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkg
OiBjYWxsZXJDb2RlQmxvY2s7CisgICAgQVNTRVJUKG93bmVyKTsKKworICAgIENhbGxWYXJpYW50
TGlzdCBsaXN0OworICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNh
bGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOworICAg
IGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCisg
ICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3QgeyBDYWxsVmFyaWFudChvbGRDYWxsZWUpIH07
CisgICAgCisgICAgbGlzdCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFu
dCk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNsb3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtl
cyBzZW5zZSB0byB0cmVhdCBhbGwgb2YgdGhlbSBhcyBjbG9zdXJlIGNhbGxzLgorICAgIC8vIFRo
aXMgbWFrZXMgc3dpdGNoaW5nIG9uIGNhbGxlZSBjaGVhcGVyLiBJdCBhbHNvIHByb2R1Y2VzIHBy
b2ZpbGluZyB0aGF0J3MgZWFzaWVyIG9uIHRoZSBERkc7CisgICAgLy8gdGhlIERGRyBkb2Vzbid0
IHJlYWxseSB3YW50IHRvIGRlYWwgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5v
bi1jbG9zdXJlIGNhbGxlZXMuCisgICAgYm9vbCBpc0Nsb3N1cmVDYWxsID0gZmFsc2U7CisgICAg
Zm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgIHsKKyAgICAgICAgaWYgKHZhcmlhbnQu
aXNDbG9zdXJlQ2FsbCgpKSB7CisgICAgICAgICAgICBsaXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50
TGlzdChsaXN0KTsKKyAgICAgICAgICAgIGlzQ2xvc3VyZUNhbGwgPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGlzQ2xvc3VyZUNhbGwp
CisgICAgICAgIGNhbGxMaW5rSW5mby5zZXRIYXNTZWVuQ2xvc3VyZSgpOworICAgIAorICAgIFZl
Y3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7CisgICAgVmVjdG9yPGludDY0X3Q+
IGNhc2VWYWx1ZXM7CisgICAgCisgICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUu
CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUo
KSAmJiAhdmFyaWFudC5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAg
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxlKCk7Cisg
ICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBo
YW5kbGUgYSBjYWxsZWUsIGVpdGhlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBDb2RlQmxvY2sg
b3IgYmVjYXVzZSBhcml0eSBtaXNtYXRjaCwKKyAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0
J3MgYmV0dGVyIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEgdmlydHVhbCBjYWxsLgorICAg
ICAgICAgICAgaWYgKCFjb2RlQmxvY2sgfHwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSkgfHwgY2FsbExpbmtJbmZvLmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgbGlua1Zp
cnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQ2NF90IG5ld0Nh
c2VWYWx1ZSA9IDA7CisgICAgICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgICAgICBu
ZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgp
KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIElu
dGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCisgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MzExCisgICAgICAgICAgICBpZiAo
IW5ld0Nhc2VWYWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkK
KyAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1
bmN0aW9uKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUg
PSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICAgICAgaWYg
KGNhc2VWYWx1ZXMuY29udGFpbnMobmV3Q2FzZVZhbHVlKSkgeworICAgICAgICAgICAgICAgIGRh
dGFMb2coIkVSUk9SOiBBdHRlbXB0IHRvIGFkZCBkdXBsaWNhdGUgY2FzZSB2YWx1ZS5cbiIpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4aXN0aW5nIGNhc2UgdmFsdWVzOiAiKTsKKyAgICAg
ICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgICAgICAgICAgZm9yIChhdXRv
JiB2YWx1ZSA6IGNhc2VWYWx1ZXMpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEs
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIkF0dGVtcHRpbmcgdG8gYWRkOiAiLCBuZXdDYXNlVmFsdWUsICJcbiIpOworICAg
ICAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhbnQgbGlzdDogIiwgbGlzdER1bXAoY2FsbENhc2Vz
KSwgIlxuIik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9s
eW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50LCBjb2RlQmxvY2spKTsKKyAgICAgICAgY2FzZVZhbHVl
cy5hcHBlbmQobmV3Q2FzZVZhbHVlKTsKKyAgICB9CisgICAgQVNTRVJUKGNhbGxDYXNlcy5zaXpl
KCkgPT0gY2FzZVZhbHVlcy5zaXplKCkpOworCisgICAgLy8gSWYgd2UgYXJlIG92ZXIgdGhlIGxp
bWl0LCBqdXN0IHVzZSBhIG5vcm1hbCB2aXJ0dWFsIGNhbGwuCisgICAgdW5zaWduZWQgbWF4UG9s
eW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplOworICAgIGlmIChpc1dlYkFzc2VtYmx5KQorICAg
ICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JXZWJBc3NlbWJseVRvSlMoKTsKKyAgICBlbHNl
IGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjp0b3BUaWVySklUKCkp
CisgICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1h
eFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZvclRvcFRpZXIoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBv
bHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSgpOworCisgICAgLy8gV2UgdXNlIGxpc3Quc2l6
ZSgpIGluc3RlYWQgb2YgY2FsbENhc2VzLnNpemUoKSBiZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZh
cmlhbnQgc2l6ZSBmb3Igbm93LgorICAgIGlmIChsaXN0LnNpemUoKSA+IG1heFBvbHltb3JwaGlj
Q2FsbFZhcmlhbnRMaXN0U2l6ZSkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZy
YW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9y
PENhbGxUb0NvZGVQdHI+IGNhbGxzKGNhbGxDYXNlcy5zaXplKCkpOworICAgIFVuaXF1ZUFycmF5
PHVpbnQzMl90PiBmYXN0Q291bnRzOworCisgICAgaWYgKCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxl
ckNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkgeworICAgICAg
ICBmYXN0Q291bnRzID0gbWFrZVVuaXF1ZUFycmF5PHVpbnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgp
KTsKKyAgICAgICAgbWVtc2V0KGZhc3RDb3VudHMuZ2V0KCksIDAsIGNhbGxDYXNlcy5zaXplKCkg
KiBzaXplb2YodWludDMyX3QpKTsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9
IGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKTsKKworICAgIGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlu
a0luZm8uaXNEYXRhSUMoKTsKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChjYWxsZXJDb2RlQmxv
Y2spOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZm
bGVyOworICAgIGlmIChjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKSB7CisgICAgICAg
IEFTU0VSVChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKTsKKyAgICAgICAgZnJhbWVTaHVmZmxl
ciA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8u
ZnJhbWVTaHVmZmxlRGF0YSgpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAvLyBX
ZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBh
bmQgd2UgY2FuCisgICAgICAgIC8vIHVzZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1
eXMgdXMuCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgpOworI2Vu
ZGlmCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKKyAgICB9CisK
KyAgICBHUFJSZWcgY29tcGFyaXNvblZhbHVlR1BSOworICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7
CisgICAgICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICAgICAgY29tcGFyaXNvblZhbHVl
R1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoY2FsbGVlR1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0g
Y2FsbGVlR1BSOworCisgICAgR1BSUmVnIGZhc3RDb3VudHNCYXNlR1BSOworICAgIGlmIChmcmFt
ZVNodWZmbGVyKQorICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFj
cXVpcmVHUFIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPQorICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29t
cGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgfQorICAgIHN0dWJKaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3Vu
dHNCYXNlR1BSKTsKKworICAgIGlmICghZnJhbWVTaHVmZmxlciAmJiBjYWxsTGlua0luZm8uaXNU
YWlsQ2FsbCgpKSB7CisgICAgICAgIC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQ
UiBpcyBub3QgYSBjYWxsZWUgc2F2ZSByZWdpc3RlciBpbiB0aGUgc2xvdyBwYXRoLgorICAgICAg
ICBBU1NFUlQoIWNhbGxlckNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5maW5kKGNh
bGxlZUdQUikpOworICAgICAgICBzdHViSml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAg
ICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIGlmIChpc0Ns
b3N1cmVDYWxsKSB7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBh
bmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkKKyAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzbG93UGF0aC5hcHBl
bmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSKSk7CisjZWxzZQorICAgICAgICAv
LyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxs
LgorI2VuZGlmCisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9y
IEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChzdHViSml0LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7CisKKyAgICAgICAg
c3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rp
b246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIGNvbXBhcmlzb25WYWx1ZUdQUik7
CisgICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2Fs
bEhlbHBlcnM6Olplcm8sIGNvbXBhcmlzb25WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhjb21wYXJpc29uVmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBjb21w
YXJpc29uVmFsdWVHUFIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJnN0dWJKaXQpOwor
ICAgIH0KKworICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BS
LCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7CisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBkb25lOworICAgIHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkg
eworICAgICAgICBzaXplX3QgY2FzZUluZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOwor
ICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5k
ZXhdLnZhcmlhbnQoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyOworICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZv
ckNhbGwoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlD
Q29kZVB0cih2bSwgY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpLCB2YXJpYW50LmZ1
bmN0aW9uKCkpOworICAgICAgICAgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgICAgIGNv
ZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+
YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7CisgICAgICAg
ICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29k
ZUZvckNhbGwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZmFzdENvdW50cykg
eworICAgICAgICAgICAgc3R1YkppdC5hZGQzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigxKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoZmFzdENvdW50c0Jhc2VHUFIsIGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgbmVlZHNEb25lSnVtcCA9IGZhbHNlOworICAgICAgICBp
ZiAoZnJhbWVTaHVmZmxlcikgeworICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1Ykpp
dCwgZnJhbWVTaHVmZmxlci0+c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAg
ICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwor
ICAgICAgICB9IGVsc2UgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAg
ICAgIHN0dWJKaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgY2FsbHNb
Y2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChpc0RhdGFJQykKKyAgICAgICAgICAgICAgICBjYWxsc1tjYXNl
SW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2Fs
bCgpOworICAgICAgICAgICAgICAgIG5lZWRzRG9uZUp1bXAgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7
CisgICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRGF0
YUlDKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICBiaW5hcnlT
d2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKKworICAgIGlmIChmcmFtZVNodWZm
bGVyKSB7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKKyAg
ICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOworICAg
ICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVl
UmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKKyNlbHNl
CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdz
KEdQUkluZm86OnJlZ1QwKSk7CisjZW5kaWYKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFy
ZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxl
ZUdQUiwgR1BSSW5mbzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
R1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgfQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIDEuIElmIGl0IGlzIG5vdCBEYXRhSUMsIGxpbmtS
ZWdpc3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbi4KKyAgICAvLyAyLiBJZiBp
dCBpcyB0YWlsLWNhbGwsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2Nh
dGlvbiBmb3Igc2xvdy1jYWxsIGNhc2UuCisgICAgLy8gVGh1cyB3ZSBuZWVkIHRvIHB1dCBpdCBm
b3IgdGhlIHNsb3ctcGF0aCBjYWxsLgorICAgIGlmICghaXNEYXRhSUMpIHsKKyAgICAgICAgc3R1
YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxv
Y2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwor
ICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86
OnJlZ1Q0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoaXNEYXRhSUMpOworICAgICAg
ICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAgc3R1YkppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bS5nZXRDVElTdHViKEpJVDo6cmV0dXJu
RnJvbUJhc2VsaW5lR2VuZXJhdG9yKS5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygp
KSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAocGF0
Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2
bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsK
KyAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7CisjaWYgQ1BV
KEFSTV9USFVNQjIpCisgICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1cmVz
IHByb3BlciBsaW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRv
IGFuIGFkZHJlc3MKKyAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBi
dXQgYSBub3JtYWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90dG9t
IGJpdC4KKyAgICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxh
Z1NldChDQ2FsbEhlbHBlcnM6OkNhbGw6OlRhaWwpOworICAgICAgICB2b2lkKiB0YXJnZXQgPSBp
c1RhaWxDYWxsID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRv
Q29kZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRk
cmVzcyh0YXJnZXQpKSk7CisjZWxzZQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0Nv
ZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2Rl
UHRyKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIWRvbmUuZW1wdHkoKSkgeworICAgICAg
ICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxs
TGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOworICAgIH0KKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQ
b2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgCisgICAgYXV0byBz
dHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisg
ICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAorICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICAgICAiUG9seW1vcnBo
aWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKKyAgICAg
ICAgICAgICAgICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2Fs
bGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVjdXRh
YmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2Fz
ZXMpKS5kYXRhKCkpLAorICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUo
KSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCisgICAgICAgIFdURk1vdmUoZmFzdENvdW50cykp
KTsKKworICAgIC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQt
Yml0cywgYnV0IHN0aWxsCisgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24t
Y2VsbCBjYWxsZWUgd2lsbCBhbHdheXMKKyAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKKyAg
ICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKworICAgIC8vIElmIHRoZXJlIGhhZCBi
ZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFz
IHRoZSBHQyBydW5zIGFuZCBzZWVzCisgICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFj
ay4KKyAgICBjYWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5lKSk7CisgICAg
CisgICAgLy8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMgYSBjYWxsIGNhY2hlIGFw
YXJ0IGZyb20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwKKyAgICAvLyBzdHViLgor
ICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJl
bW92ZSgpOworfQorCit2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCit7CisgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKGtpbmQpKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5S2lu
ZDo6QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgIGNhc2UgR2V0
QnlLaW5kOjpUcnlCeUlkOgorICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgIGNh
c2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVz
ZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0
ZU5hbWU6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RV
c2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCit7CisgICAgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUg
PSBkZWNsdHlwZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAg
ICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1
bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6
IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0
KGNvZGVCbG9jaywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQor
ICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2Ug
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RH
ZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWMg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVG
aWVsZE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJp
YyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZp
ZWxkT3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVz
ZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJ
bmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHJlc2V0RGVsQnkoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtp
bmQpCit7CisgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQorICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSk7CisgICAgZWxzZQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOworICAgIElubGluZUFjY2Vz
czo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvKTsKK30KKwordm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0lu
QnlGdW5jdGlvbihraW5kKSk7CisgICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCisgICAg
ICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbyk7CisgICAgZWxzZQorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3Zv
aWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUp
OworICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKK30KKwordm9pZCByZXNldENoZWNrUHJpdmF0
ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
Cit9CisKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAg
ICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkz
YTAzNjUzMjZhYmZiZWRlZTA1NzU4OWM0NTQwOWIyZWIzNjU4OTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oCkBAIC0wLDAgKzEsODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRl
ICJDYWxsVmFyaWFudC5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCitlbnVtIGNsYXNzIEdldEJ5S2luZCB7Cisg
ICAgQnlJZCwKKyAgICBCeVZhbCwKKyAgICBUcnlCeUlkLAorICAgIEJ5SWRXaXRoVGhpcywKKyAg
ICBCeUlkRGlyZWN0LAorICAgIFByaXZhdGVOYW1lLAorICAgIFByaXZhdGVOYW1lQnlJZCwKK307
CisKK2VudW0gY2xhc3MgUHV0QnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKwor
ZW51bSBjbGFzcyBEZWxCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwKK307CisKK2VudW0g
Y2xhc3MgSW5CeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCisgICAgUHJpdmF0ZU5hbWUK
K307CisKK3ZvaWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2
b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENh
Y2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgR2V0QnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHV0S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmpl
Y3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVy
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwg
UHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIERlbGV0ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlk
ZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7Cit2b2lk
IHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgYm9vbCB3YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hDaGVj
a1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVwYXRjaFNldFBy
aXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3RydWN0
dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVw
YXRjaEluc3RhbmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIHZhbHVl
LCBKU1ZhbHVlIHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsK
K3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYs
IENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIENhbGxMaW5rSW5m
byYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2
b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwordm9pZCB1bmxpbmtD
YWxsKFZNJiwgQ2FsbExpbmtJbmZvJik7Cit2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7Cit2b2lk
IHJlc2V0R2V0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwor
dm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5k
KTsKK3ZvaWQgcmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5
S2luZCk7Cit2b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIElu
QnlLaW5kKTsKK3ZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJik7Cit2b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9j
ayosIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCwgSlNPYmplY3QqIGNhbGxlZSk7CisKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJl
ZmU3YjFiMzM3NjRiZGY0MmIyZTRmMDJkNGRmMGNkOWU4MWM0OWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApAQCAtMCww
ICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVwYXRjaC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CisKKyAgICBpZiAoY2FsbExpbmtJ
bmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICBhdXRv
IGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIGNhbGxlZSk7CisgICAgICAgIEFTU0VSVChjYWxs
RGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7CisKKyAgICAgICAgaWYgKGNhbGxEYXRh
LnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2ZSkgeworICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOworICAgICAgICAgICAgY2FsbGVl
RnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLmVuY29k
ZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0
KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIERp
c2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAg
ICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgICAgICAgICAgTExJbnQ6OmdldEhvc3RD
YWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxs
TW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkp
OworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6
OlR5cGU6Ok5vbmUpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICB9CisKKyAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29u
c3RydWN0KTsKKworICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEodm0s
IGNhbGxlZSk7CisgICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlw
ZTo6SlMpOworCisgICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6
TmF0aXZlKSB7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxl
ZUZyYW1lKTsKKyAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUp
KTsKKyAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRh
Lm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxs
ZWVGcmFtZSk7CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBv
aW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEtlZXBUaGVGcmFtZSkpOworICAgIH0KKworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUg
PT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVl
KSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNf
SU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
KQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1l
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgUkVMRUFTRV9BU1NF
UlQoIWNhbGxMaW5rSW5mby0+aXNEaXJlY3QoKSk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFs
dWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBKU0NlbGwq
IGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAg
ICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CisgICAgICAgIGlmIChhdXRvKiBpbnRlcm5h
bEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFz
VmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKKworICAgICAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRTZWVuKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlua01v
bm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGlu
dGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOworCisgICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJn
ZXQgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJ
bmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBU
aGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1Zh
bHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBz
Y29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBu
dWxscHRyOworICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAg
IGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKKyAgICAgICAg
aWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9p
bnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2Vw
dGlvbiA9IFsmXSAoKSB7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENU
SVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAg
aWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5
KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1
Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgICAgICAgICByZXR1cm4gaGFu
ZGxlVGhyb3dFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIENvZGVCbG9jayoqIGNv
ZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7CisgICAgICAg
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFi
bGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisK
KyAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Nsb3Q7CisgICAgICAgIEFTU0VSVChjb2Rl
QmxvY2spOworCisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBpZiAoY2Fs
bGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJn
cygpKQorICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOworICAg
IH0KKworICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFNlZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwo
dm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0
cik7CisKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENh
bGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdB
WVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9
IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1
ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOworICAgIGNhbGxlZUFz
RnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgeworICAgICAgICBpZiAoanNEeW5hbWljQ2Fz
dDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUlu
dGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgQVNTRVJUKCEh
Y29kZVB0cik7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxs
TW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkp
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5k
bGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxs
TGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTU2NvcGUqIHNjb3BlID0g
ZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJs
ZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVj
dXRhYmxlKTsKKworICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsK
KyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQq
PihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIWlzQ2FsbChraW5k
KSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFs
T2JqZWN0LCBmdW5jdGlvbikpOworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0
aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0g
Y2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBmdW5jdGlvbkV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVuY3Rp
b24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisgICAgfQorICAgIC8v
IEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDMzOQorICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJs
ZS0+ZW50cnlwb2ludEZvcigKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5m
by0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhl
RnJhbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCAwZDE5ZTI3OTA1
NmU1ZjM3ZTc3MWM1YzQ5YTJkYjBlNmMyZDg0OGQ3Li5hYzU3MTI3YmNmODkwNzJiZTAzODQxNmRh
MTM5YjQxZjE2NGFlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKQEAgLTQwMyw3ICs0MDMsNiBAQCB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVuc2lnbmVkIG51bUJpbmFyeUFy
aXRoUHJvZmlsZXMsCiAKICNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZBcnJheVByb2ZpbGVz
ICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKICAgICAgICAgRk9SX0VBQ0hfT1BD
T0RFX1dJVEhfQVJSQVlfUFJPRklMRShDT1VOVCkKLSAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ09VTlQpCiAjdW5kZWYgQ09VTlQKICAgICAgICAgbnVt
YmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck5l
eHQ+KCk7CiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1F
bnRyaWVzPE9wR2V0QnlJZD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggNDAzOTRhOTQzOTkyOTkzZjU0NWEyYWM2MmNm
NmVkYzA5ZGY1NTVmYS4uMWM1OTA0MmUwZDBjMzgxMWIzYzliZTIxNThjZGM1NGMwMWRiYjgxYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOwogCiB0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWdu
ZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5s
aW5rZWRMTEludENhbGxMaW5rSW5mbzsKIAogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
IHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IDVjNzIwNThkY2YyMTk2MGRjZjg1M2UwYTky
YzI3ZTg5YTJkNTZiZWUuLjVlMzJkMmQyNGYxYjNlZDg3MGMzMzBmMmVmMjNkODVlNGVjZTQ4Mzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAg
LTMxNSw2ICszMTUsMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIGxsaW50
X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1
bmN0aW9uX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9u
X2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbGlua19jYWxsX3RyYW1wb2xp
bmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxs
aW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFs
X3RhaWxfY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9yZXR1
cm5fdmFsdWU6CiAgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgogICAg
IGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgpA
QCAtMzI1LDYgKzMyOSw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBvcF9p
dGVyYXRvcl9uZXh0X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xv
Y2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNl
IG9wX2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnc19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19y
ZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVy
bl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CkBAIC0z
MzUsNyArMzQxLDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBv
cGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2NvbnN0
cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fc2xv
d19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgotICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKICAgICBj
YXNlIG9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9w
X3RhaWxfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgpAQCAtMzQzLDggKzM0OCw5
IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xv
Z3VlOgogICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CiAgICAgY2FzZSBq
c190cmFtcG9saW5lX29wX2NhbGw6Ci0gICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2Fs
bDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJh
bXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0
cnVjdF92YXJhcmdzOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0Ogog
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgogICAgIGNhc2UganNfdHJh
bXBvbGluZV9vcF9jYWxsX3Nsb3c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggYjQ1MWNkYjYxZjdhMTFiMzMw
MmMxODVjNjZiZmYxN2E5ZmRiZTA5Zi4uZTcyMmY5ZWJkYWNjODkzNjkwNjU2ZDViNjNlOWY2MjQ0
NDYxNWY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sq
IGJhc2VsaW5lQ28KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJ
T04ob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGlu
ZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRf
UkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KTsKKyAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJn
czoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29u
c3RydWN0X3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVU
VVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDogewogICAgICAgICAgICAg
aWYgKGNhbGxJbnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX2dldF9ieV9pZCkKQEAgLTIwMSwx
MCArMjAxLDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
Y2FsbGVyUmV0dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxs
VmFyYXJnczoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6
IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAg
ICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IG51bGxwdHI7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9sb2Nr
KTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGNhbGxCeXRlY29k
ZUluZGV4KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxM
aW5rSW5mbyk7Ci0KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmRvbmVM
b2NhdGlvbigpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOTU2ZDY5NDBlN2QyMGI4MjAyZjI1NTNlYzVmZTcwYjdl
OGU5ZTYwYS4uZTYxZjg5NGJlMTA4Y2NiZmExMmRiMjA4OTI5ZWNkZTJjM2RmMGYyNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCkBAIC04NDcsMTAgKzg0NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxs
U2l0ZUluZGV4KGNhbGxTaXRlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW5mby0+ZW1p
dERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBpbmZvLT5l
bWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZd
ewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pKTsK
IAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwo
KTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwpA
QCAtODkyLDcgKzg5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUpCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNU
YWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgc2NvcGVkTGFtYmRh
PHZvaWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsK
ICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsK
ICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICB9
IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZhc3RQYXRoKG1faml0LCBjYWxs
ZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8p
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAppbmRleCAwZmU3YTc5MDkxNWE3MjRmNGUxZmZiZDk2YmExNGU3YTg1Y2I4Yzc5Li43NzA3
M2YzNGFmYmZkZjk1ZmU1ODI1YTNjODk4OWMzMjIzZGRhYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTkzOCwxMCArOTM4
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAg
ICAgICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAKLSAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKQEAgLTk4MSw3
ICs5ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAg
IAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwp
IHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIHNjb3BlZExhbWJkYTx2
b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTg5LDcgKzk4OSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsK
ICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBh
dGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGUxYzgy
ZGY4ODM0MTQ5MTk4NGIwOTgzODFiODBkNWVhMzY3MmQ2ZWIuLjAxOGEyZjg1OGY0MjExZDM4N2I0
MmI2OTJlMjViNTE4NjFiZTRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKQEAgLTEwNDAzLDEwICsxMDQwMywxMCBAQCBJR05PUkVfQ0xBTkdf
V0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5i
aXRzKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmly
dHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkp
OwotICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZh
c3RQYXRoKGppdCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0
RGlyZWN0VGFpbENhbGxGYXN0UGF0aChqaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShz
aHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihq
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRh
aWxDYWxsKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDU1OSwxMCArMTA1NTksMTAgQEAg
SUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRDYWxsTGlua0luZm8oY29k
ZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0
byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRM
YW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAgICAg
IHNsb3dQYXRoLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0
ID0gaml0LmxhYmVsKCk7CkBAIC0xMDkwMiwxMCArMTA5MDIsMTAgQEAgSUdOT1JFX0NMQU5HX1dB
Uk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBj
YWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsm
XSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihb
Jl17CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUg
PSBqaXQuanVtcCgpOwpAQCAtMTExODMsMTAgKzExMTgzLDEwIEBAIElHTk9SRV9DTEFOR19XQVJO
SU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2Fs
bExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0g
eworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZd
ewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0g
aml0Lmp1bXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAppbmRleCBjOGNiYmVlMDZiZjdkNjY2MmMxOWE0YTRhOGExOGMyMWNlZmQzZjcyLi5lNjQ1
ODUzMWViYzkwNGRlNWRkMDRjZTNhYmE1M2M1YmQzYzcwYjBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC03NDUsMTggKzc0NSwxOCBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVySW1wbChHUAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyog
aW5mbykKIHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6
cmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0s
IGluZm8pOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIEdQUkluZm86
OnJlZ1QyLCBpbmZvLT5jYWxsTW9kZSgpKTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0lu
Zm8qIGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1v
dmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIENhbGxNb2Rl
IGNhbGxNb2RlKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgIG1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2Fs
bCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKICAgICAgICAg
bGlua0J1ZmZlci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFzayhbPSwgJnZtXSAoKSB7Ci0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZp
cnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgKmluZm8pOwotICAgICAgICAgICAgaW5m
by0+c2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxU
aHVuaykpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTW9kZSk7CiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2Rl
KCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAppbmRleCA2NWRkOGVkZWY3NDc5OTZkNWY2ZDhmMTkyNDZlNmFkOTMz
NmQ0NzM4Li5hNDRhYTVjZjk1NGYyYzE2NTQ3OWVjMmRjZDkyM2Q1ZmY0ZjNkMWY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTE3NTIsNyArMTc1
Miw3IEBAIGNsYXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBDYWxsTGlua0luZm8qKTsKLSAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdH
bG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2Fs
bFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBD
YWxsTW9kZSk7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAg
ICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKaW5kZXggMTU4OTYwM2YxNDljMjc2YzM1OWU3YmIy
NmQ2NGY0ZDg1NzI3ZjE1MC4uMzAwM2IwNzM1MDE4OGU1ZjczZmNjOTY3MjBkNmE5ZTc0MWY4YmNi
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCkBAIC02
Miw3ICs2Miw2IEBAIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CiAKICAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKICAgICAgICAgR2xvYmFsT2JqZWN0LAotICAgICAgICBDYWxsTGlua0lu
Zm8sCiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAogICAgICAgICBGdW5jdGlvbkRlY2wsCiAg
ICAgICAgIEZ1bmN0aW9uRXhwciwKQEAgLTkzLDcgKzkyLDYgQEAgY2xhc3MgQmFzZWxpbmVKSVRD
b2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIH5C
YXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKICAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0Nv
ZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgp
OyB9CiAKLSAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgIEZp
eGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CiAgICAgRml4
ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsK
ICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAK
aW5kZXggY2YxNWNlMTk5ZWQzNzZhZjE1MGU4ODdmM2VlZDAyZmExNWRjN2IyYS4uNTAyZjlhMDcy
MWRmMWUzMTA3OGY2OTlhM2NlZWRmNTI5Nzg5MjFiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgogCkBA
IC04Miw2ICs4MywzNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqCiAgICAgfQogfQogCitDYWxs
RnJhbWVTaHVmZmxlRGF0YSBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6Y3JlYXRlRm9yQmFzZWxpbmVP
ckxMSW50VGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIHVuc2lnbmVkIG51bVBh
cmFtZXRlcnMpCit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCB9OworI2VuZGlmCisgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZs
ZURhdGE7CisgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsK
KyAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbnVtUGFyYW1ldGVyczsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXI7CisjZW5kaWYKKyAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBi
eXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0
ZXIpOworICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7CisgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKAorICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKKyAgICAgICAgICAgICAgICBEYXRh
Rm9ybWF0SlMpOworICAgIH0KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHNodWZmbGVEYXRhLmNh
bGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFG
b3JtYXRKUyk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHNodWZmbGVEYXRhLmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5w
YXlsb2FkR1BSKCkpOworI2VuZGlmCisgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CisgICAgc2h1ZmZsZURhdGEuc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gc2h1
ZmZsZURhdGE7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
aAppbmRleCAzMzY1N2UzM2E2NGYzNzgxZjQzMDk5OGMxMzMzNzFhMWFhNjRiNzVhLi4wYmMxOWI5
OWQ2MWU0YmNiYjcxOWVhOWZjYzFiYzhjMzdmYmZlYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCkBAIC0zMiw2ICszMiw4IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgT3BUYWlsQ2FsbDsKKwogc3RydWN0IENhbGxGcmFt
ZVNodWZmbGVEYXRhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAg
LTQwLDYgKzQyLDggQEAgc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhIHsKICAgICAgICAgYXJn
cy5zaHJpbmtUb0ZpdCgpOwogICAgIH0KIAorICAgIHN0YXRpYyBDYWxsRnJhbWVTaHVmZmxlRGF0
YSBjcmVhdGVGb3JCYXNlbGluZU9yTExJbnRUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiwgdW5z
aWduZWQgbnVtUGFyYW1ldGVycyk7CisKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsK
ICAgICB1bnNpZ25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBh
c3NlZEFyZ3MgeyBVSU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDky
OTQyNDYwNzM0MDA5MTFiNmMzNTdjNzhhNGEwYzZhNzRlOWFhZDQuLjI4YWU2Zjc3MGRkYWNkNzFj
NmYxODJjOWQxNzlmZDFjY2ViOGRmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAg
LTEwMSwxMiArMTAxLDkgQEAgc3RkOjp0dXBsZTxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxpbmsKICAgICByZXR1cm4gc3Rk
Ojp0dXBsZSB7IHN0dWJJbmZvLCBzdHViSW5mb0luZGV4IH07CiB9CiAKLXN0ZDo6dHVwbGU8VW5s
aW5rZWRDYWxsTGlua0luZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBKSVQ6OmFkZFVu
bGlua2VkQ2FsbExpbmtJbmZvKCkKK1VubGlua2VkQ2FsbExpbmtJbmZvKiBKSVQ6OmFkZFVubGlu
a2VkQ2FsbExpbmtJbmZvKCkKIHsKLSAgICB2b2lkKiB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4
ID0gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1fdW5saW5rZWRD
YWxscy5zaXplKCkpKTsKLSAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9ICZtX3VubGlu
a2VkQ2FsbHMuYWxsb2MoKTsKLSAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0luZGV4ID0gYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxs
TGlua0luZm8sIHVubGlua2VkQ2FsbExpbmtJbmZvSW5kZXgpOwotICAgIHJldHVybiBzdGQ6OnR1
cGxlIHsgaW5mbywgY2FsbExpbmtJbmZvSW5kZXggfTsKKyAgICByZXR1cm4gJm1fdW5saW5rZWRD
YWxscy5hbGxvYygpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xMDEwLDcgKzEwMDcs
NiBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBG
aXhlZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4obV91bmxpbmtlZENhbGxzLnNpemUoKSk7
CiAgICAgaWYgKG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzLnNpemUoKSkKICAgICAgICAgc3Rk
Ojptb3ZlKG1fdW5saW5rZWRDYWxscy5iZWdpbigpLCBtX3VubGlua2VkQ2FsbHMuZW5kKCksIG1f
aml0Q29kZS0+bV91bmxpbmtlZENhbGxzLmJlZ2luKCkpOwotICAgIG1faml0Q29kZS0+bV9ldmFs
Q2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CiAgICAgbV9qaXRD
b2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gRml4ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbz4obV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpOwogICAgIGlmIChtX2ppdENvZGUt
Pm1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKQogICAgICAgICBzdGQ6Om1vdmUobV91bmxpbmtl
ZFN0dWJJbmZvcy5iZWdpbigpLCBtX3VubGlua2VkU3R1YkluZm9zLmVuZCgpLCBtX2ppdENvZGUt
Pm1fdW5saW5rZWRTdHViSW5mb3MuYmVnaW4oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRl
eCBkZTJjNWNlNzcwYmJkNTkzYjdhZTVmZDFhNjUyNjczODk0M2RkOWExLi42N2I0M2Q4ZmEzMGI3
MmNiZDQ5NDQ2MjI4YzY0Mjk2NGYzZDMzNTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAg
LTE1Myw3ICsxNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0
aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247CiAg
ICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKLSAgICAg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9
OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0
ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBAIC0y
OTQsMTYgKzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZf
dDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7
CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmKTsKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAg
ICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisgICAgICAg
ICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBV
bmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC03
MDYsNiArNzA1LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4K
ICAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+Kiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5j
dGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmV0dXJuRnJvbUJhc2VsaW5lR2Vu
ZXJhdG9yKFZNJik7CisKKyAgICBwcml2YXRlOgogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgICAgICAvLyBUaHVuayBnZW5lcmF0b3JzLgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcihWTSYpOwpAQCAtNzIxLDcgKzcyNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2No
ZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihW
TSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZN
Jik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BHZXRG
cm9tU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCkBAIC05NTgsNyArOTYwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBhZGRUb0Nv
bnN0YW50UG9vbChKSVRDb25zdGFudFBvb2w6OlR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRy
KTsKICAgICAgICAgc3RkOjp0dXBsZTxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudD4gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwotICAg
ICAgICBzdGQ6OnR1cGxlPFVubGlua2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudD4gYWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsKKyAgICAgICAgVW5saW5rZWRDYWxs
TGlua0luZm8qIGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CiAKICAgICAgICAgSW50ZXJwcmV0
ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTEwMjksNyArMTAzMSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIFZlY3RvcjxKSVRDb25zdGFudFBvb2w6OlZhbHVlPiBtX2NvbnN0YW50UG9v
bDsKICAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0
YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07Ci0gICAgICAgIEJh
ZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CiAgICAgICAgIFNlZ21lbnRlZFZl
Y3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwogICAgICAgICBTZWdt
ZW50ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZv
czsKICAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCAwOTE5OTE1ODQ2OGMw
ZmUxMDJiNWRmYmZhMmJlNGZlMTczMTk3ZTJiLi41NzE5NjEyMTU2MGEzYTI5YWUzZDIwNzExM2M2
MGRjZTYwODBkNjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTU5
LDE3ICs1OSwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1
ZUdQUiAocmV0dXJuVmFsdWVHUFIyL3JldHVyblZhbHVlR1BSIG9uIDMyLWJpdCkuCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUpTUik7Ci0KLSNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKLSAgICByZXQoKTsKLSNlbHNlCi0gICAgZW1pdE5ha2VkTmVhckp1bXAodm0oKS5n
ZXRDVElTdHViKG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKS5jb2RlKCkpOwotI2VuZGlmCisgICAg
ZW1pdE5ha2VkTmVhckp1bXAodm0oKS5nZXRDVElTdHViKHJldHVybkZyb21CYXNlbGluZUdlbmVy
YXRvcikuY29kZSgpKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihWTSYpCit7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKKworICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFz
ZWxpbmU6IG9wX3JldF9oYW5kbGVyIik7Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9p
ZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKQEAgLTg0LDcgKzg4
LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKK0pJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIHVuc2lnbmVkIGNoZWNr
cG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwogICAgIGludCBhcmdDb3VudElu
Y2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hl
Y2twb2ludCk7CkBAIC05Nyw3ICsxMDEsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHRtcEpTUik7CiAgICAgICAgIEp1
bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbCh0bXBKU1IpOwogICAgICAgICBsb2FkMzIoQWRkcmVz
cyh0bXBKU1IucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCB0bXBH
UFIpOwotICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBPcENhbGw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwg
T3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZz
ZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAg
ICB9CiAKQEAgLTExMCw3ICsxMTQsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNv
ZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92
YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9w
OjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRl
Y29kZS5tX2FyZ3VtZW50czsKQEAgLTE2MCw3ICsxNjQsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZgogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDUsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdU
Mik7Ci0gICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9m
ZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
Q2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBy
ZWdUMyk7CiAgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdU
Mik7CiAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZz
ZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKQEAgLTIwMyw2NCArMjA3LDM5
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNh
bGwsIHJlZ1QwKTsKLQogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7
CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lz
dGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkVmFsdWUoQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxlZUpTUik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92
bSwgaW5mbyk7CisgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ2FsbEV2YWw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOworICAg
IGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGNhbGxMaW5r
SW5mb0dQUiwgQ2FsbE1vZGU6OlJlZ3VsYXIpOwogICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQ
dXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29s
IEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1
bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8s
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNh
bGxMaW5rSW5mb0NvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRh
aWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKLSAgICBz
aHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxl
RGF0YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3Rl
ciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotI2VuZGlmCi0gICAgc2h1ZmZsZURhdGEt
Pm51bUxvY2FscyA9Ci0gICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXpl
KGJ5dGVjb2RlLm1fYXJnYyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2Rl
Lm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KLSAgICAgICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgICAgICB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2Fy
Z3YsCi0gICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKLSAgICB9Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2Fs
bGVlSlNSLnBheWxvYWRHUFIoKSwgRGF0YUZvcm1hdEpTKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxs
ZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOwotI2VuZGlmCi0gICAgc2h1
ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotCiAgICAgY29uc3RleHByIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKLSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJ
bmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNS
LnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURhdGEgfTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVGFpbENhbGw6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOworICAgIEp1bXBMaXN0IHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNh
bGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQo
KT4oWyZdeworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YSA9IENhbGxG
cmFtZVNodWZmbGVEYXRhOjpjcmVhdGVGb3JCYXNlbGluZU9yTExJbnRUYWlsQ2FsbChieXRlY29k
ZSwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKKyAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIgc2h1ZmZsZXIgeyAqdGhpcywgc2h1ZmZsZURhdGEgfTsKICAgICAgICAgc2h1
ZmZsZXIubG9ja0dQUihjYWxsTGlua0luZm9HUFIpOwogICAgICAgICBzaHVmZmxlci5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKLSAgICB9KTsKKyAgICB9KSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGhzKTsKIAotICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwotICAgIGluZm8tPmZyYW1l
U2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKLQogICAgIGF1dG8gZG9uZUxvY2F0
aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTI4OCwxNyArMjY3LDE0
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiAgICAgKi8KIAogICAgIFVubGlua2VkQ2FsbExp
bmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGlu
Zm9Db25zdGFudCA9IFVJTlRfTUFYOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
IHsKLSAgICAgICAgc3RkOjp0aWUoaW5mbywgaW5mb0NvbnN0YW50KSA9IGFkZFVubGlua2VkQ2Fs
bExpbmtJbmZvKCk7CisgICAgICAgIGluZm8gPSBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwog
ICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OwotICAgICAgICBp
bmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOwogICAg
ICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9J
bmRleCk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0
aW9uSW5mbygpKTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29u
c3RhbnQ7CiAgICAgfQotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3Rh
bnQpOworICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlKTsKIAogICAgIC8vIFNQIGhvbGRz
IG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENv
dW50IGluaXRpYWxpemVkLgogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CkBAIC0zMTYsMTYgKzI5MiwxNiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChjYWxsZWVK
U1IpKTsKICNlbmRpZgogCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywg
Y2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2Fs
bChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwotICAgIGxvYWRD
b25zdGFudChpbmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExp
bmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5m
b0dQUiwgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxs
TGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3co
Y2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVM
b2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKQEAgLTM0NCwxNSArMzIwLDE2IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVk
KQogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9w
X2NhbGxfZXZhbCk7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7Ci0gICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZDYWxsTGlua0luZm8oKSwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKQEAgLTM2Niw3ICszNDMsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQog
CiAgICAgcmVzZXRTUCgpOwogCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY4NDQ1ODc4MDNjMjYxOGM2ODAzOTgz
NmNlZTZjN2IzNGZkMmMzMDQuLjJmZTIzYzQ5ZmQwZjk0MDkxZjY4NjA1Yjc1N2FlMmNlMzIyMDE0
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMzcwLDIx
ICszNzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCi17Ci0gICAg
Q0NhbGxIZWxwZXJzIGppdDsKLQotICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwotICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgaml0LmVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElU
aHVuayk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAiQmFzZWxpbmU6IG9wX3JldF9oYW5kbGVyIik7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0KIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAwZTJkN2QwOGNmYjc1ZjMyNzFkMDYy
YjA5NmFiYjBjMzVjN2YxYTg1Li42YmNlNzRhYjgyYzU1N2QwMDg1MTUwNzg1MWEwNGU0ZTE0NjMw
YzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAg
LTYwLDcgKzYwLDcgQEAKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgotI2luY2x1ZGUgIlJl
cGF0Y2guaCIKKyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5oIgogI2luY2x1ZGUgIlNoYWRvd0No
aWNrZW4uaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlN1cGVy
U2FtcGxlci5oIgpAQCAtMTQ0NiwxODYgKzE0NDYsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uQ2FsbEV2YWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGds
bwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotc3RhdGljIFNsb3dQ
YXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8pCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGNhbGxlZUZyYW1lLT5z
ZXRDb2RlQmxvY2sobnVsbHB0cik7Ci0KLSAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0
Q2FsbERhdGEodm0sIGNhbGxlZSk7Ci0gICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENh
bGxEYXRhOjpUeXBlOjpKUyk7Ci0KLSAgICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERh
dGE6OlR5cGU6Ok5hdGl2ZSkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbGVlRnJhbWUpOwotICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxl
ZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVy
blZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2Jh
bE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxs
b3dHQzsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICB2
bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAg
ICAgICAgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVG
cmFtZSA6IEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIEFTU0VSVChj
YWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKLSAgICAgICAgdGhyb3dFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZ2xvYmFs
T2JqZWN0LCBjYWxsZWUpKTsKLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAg
ICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZv
ckNvbnN0cnVjdCk7Ci0KLSAgICBhdXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1Y3REYXRh
KHZtLCBjYWxsZWUpOwotICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgIT0gQ2FsbERhdGE6
OlR5cGU6OkpTKTsKLQotICAgIGlmIChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5
cGU6Ok5hdGl2ZSkgewotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsZWVGcmFtZSk7Ci0gICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2Fs
bGVlKSk7Ci0gICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0
RGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwg
Y2FsbGVlRnJhbWUpOwotICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBl
OjpOb25lKTsKLSAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVO
b3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwotICAgIHJldHVybiBl
bmNvZGVSZXN1bHQoCi0gICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRh
YmxlQWRkcmVzcygpLAotICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBT
bG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykpCiB7Ci0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxs
TGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxM
aW5rSW5mby0+aXNEaXJlY3QoKSk7Ci0gICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0g
Y2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7Ci0gICAgSlNDZWxsKiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYg
KCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkgewotICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5j
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVl
KSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNv
ZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7Ci0KLSAgICAgICAgICAgIGlmICgh
Y2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0U2VlbigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmtNb25vbW9y
cGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5h
bEZ1bmN0aW9uLCBjb2RlUHRyKTsKLQotICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0ID0g
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
aGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwg
Y2FsbExpbmtJbmZvKSk7Ci0gICAgfQotCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNTY29wZSogc2NvcGUg
PSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0
cjsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAgICBjb2Rl
UHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7Ci0gICAgICAgIGlmICgh
Y29kZVB0cikKLSAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9y
KGtpbmQsIE11c3RDaGVja0FyaXR5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpOwotCi0gICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24g
PSBbJl0gKCkgewotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHVi
KHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpT
RW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwotICAgICAgICB9OwotCi0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNh
bm5vdENvbnN0cnVjdCkgewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNh
bGxlZSkpOwotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUt
PmFkZHJlc3NPZkNvZGVCbG9jaygpOwotICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBh
cmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2lu
ZCwgKmNvZGVCbG9ja1Nsb3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9ICpjb2Rl
QmxvY2tTbG90OwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgICAgICBBcml0eUNo
ZWNrTW9kZSBhcml0eTsKLSAgICAgICAgaWYgKGNhbGxlZUZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkgfHwgY2FsbExpbmtJbmZvLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGFyaXR5ID0g
TXVzdENoZWNrQXJpdHk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlD
aGVja05vdFJlcXVpcmVkOwotICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5l
bnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKLSAgICB9Ci0KLSAgICBpZiAoIWNhbGxMaW5rSW5m
by0+c2Vlbk9uY2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7Ci0gICAgZWxz
ZQotICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwotCi0gICAgcmV0dXJuIGVuY29kZVJl
c3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJh
bWUgOiBLZWVwVGhlRnJhbWUpKTsKLX0KLQotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0
dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZy
YW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5k
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLQot
ICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1
ZUNhbGxlZSgpOwotICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxs
ZWVBc1ZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewot
ICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFz
VmFsdWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQp
OwotICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZy
YW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKLSAgICB9Ci0gICAgCi0gICAgSlNG
dW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25D
ZWxsKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOwot
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsK
LSAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0g
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgYXV0byBoYW5k
bGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1Rhcmdl
dCA9IHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFpc0Nh
bGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9y
KGdsb2JhbE9iamVjdCwgZnVuY3Rpb24pKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJv
d0V4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2Nr
U2xvdCA9IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgZnVuY3Rp
b25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0s
IGZ1bmN0aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOwotICAgIH0K
LSAgICAvLyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4
ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoCi0gICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5KS5l
eGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
TGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDog
S2VlcFRoZUZyYW1lKSk7CisgICAgcmV0dXJuIGxpbmtGb3IoY2FsbGVlRnJhbWUsIGdsb2JhbE9i
amVjdCwgY2FsbExpbmtJbmZvKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSog
Y2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDhkNTFjZGE0ZTJhMjFhOTIxNzliNTE1Zjk4NGFmMmM2
OGQ2ZGZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MDIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVwYXRjaC5oIgotCi0jaWYg
RU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgotI2luY2x1ZGUgIkNDYWxs
SGVscGVycy5oIgotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0j
aW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKLSNpbmNsdWRlICJET01KSVRHZXR0ZXJTZXR0
ZXIuaCIKLSNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJFeGVjdXRhYmxl
QmFzZUlubGluZXMuaCIKLSNpbmNsdWRlICJGVExUaHVua3MuaCIKLSNpbmNsdWRlICJGdWxsQ29k
ZU9yaWdpbi5oIgotI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklDU3RhdHMuaCIKLSNpbmNs
dWRlICJJbmxpbmVBY2Nlc3MuaCIKLSNpbmNsdWRlICJJbnN0YW5jZU9mQWNjZXNzQ2FzZS5oIgot
I2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJKSVQuaCIK
LSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseS5o
IgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIlBv
bHltb3JwaGljQWNjZXNzLmgiCi0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCi0jaW5jbHVk
ZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQu
aCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1Yklu
Zm8uaCIKLSNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKLSNpbmNsdWRlICJUaHVua0dlbmVyYXRv
cnMuaCIKLSNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKLXsKLSAgICBKU0NfUkVUVVJOX1JFVEFH
R0VEX09QRVJBVElPTl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9uKTsKLX0KLQotc3RhdGljIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24o
Q29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsKQotewotICAgIEpTQ19SRVRV
Uk5fUkVUQUdHRURfQ0FMTF9UQVJHRVRfV0lUSF9WQUxJREFUSU9OKGNhbGwpOwotfQotCi1zdGF0
aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldp
dGhWYWxpZGF0aW9uKHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7Ci0gICAgQ29kZUxvY2F0aW9u
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2Nh
dGlvbjsKLSNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6RlRMSklUKSB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFn
PiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+
KGNhbGwpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRo
dW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgcmV0
dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0bFRodW5r
cy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7Ci0gICAgfQot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKLSNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKLSAgICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oY2FsbCk7Ci19
Ci0KLXZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBD
b2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCi17Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0g
ICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewotICAgICAg
ICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3Mg
PSAqdm0uZnRsVGh1bmtzOwotICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFy
Z2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxs
KTsKLSAgICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRh
YmxlQWRkcmVzcygpKTsKLSAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtz
LmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOwotICAgICAgICBrZXkgPSBr
ZXkud2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOwotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHRodW5r
cy5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbHNlIC8vIEVOQUJMRShGVExfSklUKQotICAgIFVOVVNFRF9QQVJBTShjb2Rl
QmxvY2spOwotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbChjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJU
YWc+KCkpOwotfQotCi1zdGF0aWMgdm9pZCByZXBhdGNoU2xvd1BhdGhDYWxsKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCi17Ci0gICAgaWYgKGNvZGVCbG9jay0+dXNl
RGF0YUlDKCkpIHsKLSAgICAgICAgc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uID0gbmV3Q2FsbGVl
RnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLm1f
c2xvd1BhdGhDYWxsTG9jYXRpb24sIG5ld0NhbGxlZUZ1bmN0aW9uKTsKLX0KLQotZW51bSBJbmxp
bmVDYWNoZUFjdGlvbiB7Ci0gICAgR2l2ZVVwT25DYWNoZSwKLSAgICBSZXRyeUNhY2hlTGF0ZXIs
Ci0gICAgQXR0ZW1wdFRvQ2FjaGUKLX07Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rp
b25Gb3JDZWxsKFZNJiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLQotICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3Ry
dWN0dXJlLT50eXBlSW5mbygpOwotICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAvLyBGbGF0dGVuaW5nIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgb2Zmc2V0
LCBzbyByZXR1cm4gZWFybHkgZm9yIGFub3RoZXIgdHJ5LgotICAgICAgICBhc09iamVjdChjZWxs
KS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwotICAgICAgICByZXR1cm4gUmV0cnlDYWNo
ZUxhdGVyOwotICAgIH0KLSAgICAKLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIHJl
dHVybiBBdHRlbXB0VG9DYWNoZTsKLX0KLQotc3RhdGljIGJvb2wgZm9yY2VJQ0ZhaWx1cmUoSlNH
bG9iYWxPYmplY3QqKQotewotICAgIHJldHVybiBPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpOwot
fQotCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1
YklmTmVlZGVkKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCYgcmVzdWx0KQotewotICAgIGlmIChy
ZXN1bHQuc2hvdWxkUmVzZXRTdHViQW5kRmlyZVdhdGNocG9pbnRzKCkpIHsKLSAgICAgICAgcmVz
dWx0LmZpcmVXYXRjaHBvaW50cyh2bSk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR0NTYWZl
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAg
ICAgICAgc3R1YkluZm8ucmVzZXQobG9ja2VyLCBjb2RlQmxvY2spOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2lu
ZCkgewotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBjYXNlIEdl
dEJ5S2luZDo6VHJ5QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgIGNhc2UgR2V0
QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZE9wdGltaXplOwotICAgIH0KLSAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQp
Ci17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0
aFRoaXM6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXM7Ci0gICAgY2Fz
ZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlk
OwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uR2V0QnlJZERpcmVjdDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJl
dHVybiBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWM7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWU7Ci0gICAgY2Fz
ZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lQnlJZDsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZh
bHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewot
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAgICBp
ZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFj
Y2VzcyBmb3IgaW1tZWRpYXRlcy4KLSAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgSlNDZWxsKiBiYXNlQ2Vs
bCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgY29uc3QgYm9vbCBpc1ByaXZhdGUgPSBr
aW5kID09IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUgfHwga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lQnlJZDsKLQotICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLQotICAg
ICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgewotICAg
ICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
c3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAg
ICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAgICAg
JiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewotCi0gICAgICAgICAgICAgICAgICAg
IGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFw
cHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpV
bnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3Ry
aW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJv
b2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5n
dGgoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rp
b24oa2luZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xl
bmd0aChsb2NrZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNj
ZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJn
dW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdl
cmUgb3ZlcnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0
eSBsb2FkISBHdWFyZGluZwotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2l0aCBzdWNoIGEgY2hl
Y2sgZW5hYmxlcyB1cyB0byBhZGQgYW4gSUMgY2FzZSBmb3IgdGhhdCBsb2FkIGlmIG5lZWRlZC4K
LSAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBBY2Nlc3NDYXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWlj
Q2FzdDxTY29wZWRBcmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRGl0dG8uCi0gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdz
KCkpCi0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwcm9wZXJ0eU5h
bWUuaXNTeW1ib2woKSAmJiBiYXNlQ2VsbC0+aW5oZXJpdHM8SlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q+KHZtKSAmJiAhc2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIG1vZHVs
ZU5hbWVzcGFjZVNsb3QgPSBzbG90Lm1vZHVsZU5hbWVzcGFjZVNsb3QoKSkKLSAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2Rl
QmxvY2ssIHByb3BlcnR5TmFtZSwganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oYmFz
ZUNlbGwpLCBtb2R1bGVOYW1lc3BhY2VTbG90LT5lbnZpcm9ubWVudCwgU2NvcGVPZmZzZXQobW9k
dWxlTmFtZXNwYWNlU2xvdC0+c2NvcGVPZmZzZXQpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKCFuZXdDYXNlKSB7Ci0gICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUo
KSAmJiAhc2xvdC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0KLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVy
ZSh2bSk7Ci0KLSAgICAgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwot
ICAgICAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5
cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nh
c3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgYmFzZUNl
bGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlID0gYmFz
ZUNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94
eSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9u
IGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKLSAgICAgICAgICAgIGlmIChh
Y3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsK
LQotICAgICAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgICAgICAgICBpZiAo
c3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAg
ICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90
QmFzZSgpID09IGJhc2VWYWx1ZQotICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRT
ZXQoKQotICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKQotICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0g
ICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxm
UGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHBy
b3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNl
bWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemlu
Z0dldEJ5RnVuY3Rpb24oa2luZCkpOwotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0
R2V0QnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0KLSAg
ICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxp
ZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChzbG90Lmlz
Q3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAg
ICAgIC8vIFRvIGNhY2hlIHNlbGYgY3VzdG9tcywgd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJp
ZXMgYmVjYXVzZSB3ZQotICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYg
dGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlCi0gICAgICAgICAgICAgICAg
Ly8gY29uc3RhbnQgZnVuY3Rpb24gcG9pbnRlci4KLQotICAgICAgICAgICAgICAgIGlmICghcHJl
cGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIHNsb3Quc2xvdEJhc2UoKSwgc2xvdC5z
bG90QmFzZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNs
b3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5o
YXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGlj
dGlvbmFyeVN0cnVjdHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsgLy8gV2UgbWF5IGhhdmUgY2hh
bmdlZCBwcm9wZXJ0eSBvZmZzZXRzLgotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmIChzbG90LmlzVW5zZXQoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBhIGtpbmQg
aXMgR2V0QnlLaW5kOjpCeUlkRGlyZWN0IG9yIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUsIHdlIGRv
IG5vdCBuZWVkIHRvIGludmVzdGlnYXRlIHByb3RvdHlwZSBjaGFpbnMgZnVydGhlci4KLSAgICAg
ICAgICAgICAgICAvLyBDYWNoZWFiaWxpdHkganVzdCBkZXBlbmRzIG9uIHRoZSBoZWFkIHN0cnVj
dHVyZS4KLSAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Qg
JiYgIWlzUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0g
cHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNo
ZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUHJvcGVydHkgb2Zmc2V0cyBtYXkgaGF2ZSBjaGFuZ2VkIGR1ZSB0byBmbGF0dGVuaW5nLiBX
ZSdsbCBjYWNoZSBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShn
bG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RC
YXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkg
PT0gb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZv
ciBmYXN0ZXIgYWNjZXNzZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nl
c3NDaGFpbiA9IG51bGxwdHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBN
YXliZSB0aGlzIGBpZmAgc2hvdWxkIGJlIGluc2lkZSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9w
ZXJ0eUJsYWguCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjE1Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUudWlkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgh
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0
LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGdldHRlciA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAg
IGdldHRlciA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBzbG90LmdldHRlclNldHRl
cigpLT5nZXR0ZXIoKSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOwotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFi
bGVDdXN0b20oKSAmJiBzbG90LmRvbUF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgIGRvbUF0
dHJpYnV0ZSA9IHNsb3QuZG9tQXR0cmlidXRlKCk7Ci0KLSAgICAgICAgICAgIGlmIChraW5kID09
IEdldEJ5S2luZDo6VHJ5QnlJZCkgewotICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vz
c1R5cGUgdHlwZTsKLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6TWlzczsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2Fj
aGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpH
ZXRHZXR0ZXI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFBy
b3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHks
IHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBJ
bnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKHN0dWJJbmZv
LCBnZXR0ZXIsIHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBnZXR0ZXIsIFdURk1v
dmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIGlmIChpc1ByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXNsb3QuaXNVbnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wg
aXNQcm94eSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZt
LCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkxvYWQsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1
Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIGlzUHJveHksIHNs
b3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90Lmlz
VW5zZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNVbnNldCgpID8gQWNjZXNzQ2FzZTo6
TWlzcyA6IEFjY2Vzc0Nhc2U6OkxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJv
eHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzQ2Fz
ZTo6QWNjZXNzVHlwZSB0eXBlOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6
OkdldHRlcjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNl
OjpDdXN0b21WYWx1ZUdldHRlcjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBH
ZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpcyAmJiB0eXBlID09IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vz
c29yR2V0dGVyICYmIGRvbUF0dHJpYnV0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90Lndh
dGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gRnVuY3Rpb25QdHI8Q3Vz
dG9tQWNjZXNzb3JQdHJUYWc+KHNsb3QuY3VzdG9tR2V0dGVyKCkpIDogbnVsbHB0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LnNsb3RC
YXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFp
bikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xhc3NJ
bmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgp
KSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0
dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNN
QU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAg
ICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVs
bCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Qu
c2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsK
LSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgICAgICAgICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlk
OgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgICAgICAgICBj
YXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICAgICAgICAgIElubGluZUFj
Y2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6Ci0g
ICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgICAgICAgICAg
SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJldHVy
biByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxh
dGVyOwotfQotCi12b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIAotICAgIGlmICh0cnlDYWNoZUdldEJ5
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKGtpbmQp
KTsKLX0KLQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheUdldEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQotewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgIGlmICghaW5kZXguaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwotCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZt
KCkpOwotCi0gICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLQotICAg
ICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChiYXNl
LT50eXBlKCkgPT0gRGlyZWN0QXJndW1lbnRzVHlwZSkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkRGlyZWN0QXJndW1lbnRzTG9hZDsKLSAgICAgICAgZWxzZSBp
ZiAoYmFzZS0+dHlwZSgpID09IFNjb3BlZEFyZ3VtZW50c1R5cGUpCi0gICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFNjb3BlZEFyZ3VtZW50c0xvYWQ7Ci0gICAgICAg
IGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTdHJpbmdUeXBlKQotICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOwotICAgICAgICBlbHNlIGlmIChp
c1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKLSAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4TG9hZDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgotICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9h
ZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xh
bXBlZDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBUeXBlSW50MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKLSAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6Ci0gICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWlu
dDMyTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZs
b2F0MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50
NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlw
ZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7Ci0gICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hh
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyTG9hZDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVMb2FkOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzTG9hZDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6Ci0g
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3Jh
Z2VMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOwotCi0g
ICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09y
TnVsbCh2bSksIElkZW50aWZpZXIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2Rl
KCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1
YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIHJldHVybiBy
ZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVy
OwotfQotCi12b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAodHJ5Q2FjaGVBcnJheUdl
dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8pID09
IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKLX0KLQotc3RhdGljIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25z
dCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0
S2luZCkKLXsKLSAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpC
eUlkOiB7Ci0gICAgICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgICAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OwotICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0
cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVBy
aXZhdGVGaWVsZFN0cmljdDsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGRTZXQ6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7
Ci0gICAgICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERp
cmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7Ci0gICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOwotICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7
Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5l
cmljOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWM7Ci0gICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFs
U2V0UHJpdmF0ZUZpZWxkR2VuZXJpYzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgfQotICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1
bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwg
UHV0S2luZCBwdXRLaW5kKQotewotICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7Ci0gICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgICAgICBjYXNl
IFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7
Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwot
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZToKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0Ogot
ICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6Ci0gICAgICAg
IHN3aXRjaCAocHV0S2luZCkgewotICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAg
ICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5p
c1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2lu
ZCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICB7Ci0g
ICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ss
IGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2Jh
bE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAm
JiAhc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHRyeSB0byBkbyBzb21ldGhpbmcgc21hcnRlciBoZXJlLi4uCi0gICAgICAgIGlm
IChpc0NvcHlPbldyaXRlKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIC8vIFdlIGNhbid0IGVuZCB1cCBzdG9y
aW5nIHRvIGEgQ29XIG9uIHRoZSBwcm90b3R5cGUgc2luY2UgaXQgc2hvdWxkbid0IG93biBwcm9w
ZXJ0aWVzLgotICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc2xvdC5iYXNlKCktPmluZGV4
aW5nTW9kZSgpKSk7Ci0KLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0g
ICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0KLSAgICAgICAg
Ym9vbCBpc1Byb3h5ID0gZmFsc2U7Ci0gICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1
cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxK
U1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJh
c2VDZWxsOwotICAgICAgICAgICAgaXNQcm94eSA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFdl
IGN1cnJlbnRseSBvbmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpT
UHJveHkuIFdlIGRvbid0Ci0gICAgICAgICAgICAvLyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNl
IGdsb2JhbCBvYmplY3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3RydWN0dXJlCi0gICAg
ICAgICAgICAvLyBpbiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgICAgIGJv
b2wgaXNDYWNoZWFibGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBl
KCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KQotICAgICAgICAgICAgICAg
IHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKQotICAgICAgICAgICAgICAgIHx8IHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKTsKLSAgICAgICAgICAgIGlmICghaXNDYWNoZWFibGVQcm94eSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChpc1Byb3h5ICYmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNl
dCB8fCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkpCi0gICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBSZWZQdHI8QWNjZXNzQ2Fz
ZT4gbmV3Q2FzZTsKLQotICAgICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNs
b3QuaXNDYWNoZWFibGVQdXQoKSkgewotICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1
dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIC8vIFRo
aXMgYXNzZXJ0IGhlbHBzIGNhdGNoIGJ1Z3MgaWYgd2UgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBk
aXNhYmxlIGNhY2hpbmcKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHRyYW5zaXRpb24gdGhl
biBzdG9yZSB0byBhbiBleGlzdGluZyBwcm9wZXJ0eS4gVGhpcyBpcyBjb21tb24gYW1vbmcKLSAg
ICAgICAgICAgICAgICAvLyBwYXRocyB0aGF0IHJlaWZ5IGxhenkgcHJvcGVydGllcy4gSWYgd2Ug
cmVpZnkgYSBsYXp5IHByb3BlcnR5IGFuZCBmb3JnZXQKLSAgICAgICAgICAgICAgICAvLyB0byBk
aXNhYmxlIGNhY2hpbmcsIHdlIG1heSBjb21lIGRvd24gdGhpcyBwYXRoLiBUaGUgUmVwbGFjZSBJ
QyBkb2VzIG5vdAotICAgICAgICAgICAgICAgIC8vIGtub3cgaG93IHRvIG1vZGVsIHRoZXNlIHR5
cGVzIG9mIHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAob3IgYW55IHN0cnVjdHVyZQotICAgICAgICAg
ICAgICAgIC8vIHRyYW5zaXRpb24gZm9yIHRoYXQgbWF0dGVyKS4KLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gb2xkU3Ry
dWN0dXJlKTsKLQotICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0
Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJv
cGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKQotICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgewotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5l
ID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBz
dHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2Nr
ZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6UmVwbGFjZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBv
bGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIGlzUHJveHkpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWlzUHJveHkpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1By
b3BlcnR5KTsKLQotICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBvbGQgc3RydWN0dXJlIGlzIGRpY3Rpb25hcnksIGl0IG1lYW5zIHRo
YXQgdGhpcyBpcyBvbmUtb24tb25lIGJldHdlZW4gYW4gb2JqZWN0IGFuZCBhIHN0cnVjdHVyZS4K
LSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIE5ld1Byb3BlcnR5IG9wZXJhdGlvbiwgZ2Vu
ZXJhdGluZyBJQyBmb3IgdGhpcyBkb2VzIG5vdCBvZmZlciBhbnkgYmVuZWZpdCBiZWNhdXNlIHRo
aXMgdHJhbnNpdGlvbiBuZXZlciBoYXBwZW5zIGFnYWluLgotICAgICAgICAgICAgICAgIGlmIChv
bGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwotCi0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0
cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6Ok5vbmUpLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJl
IHx8ICFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAv
LyBJZiBKU09iamVjdDo6cHV0IGlzIG92ZXJyaWRkZW4gYnkgVXNlck9iamVjdCwgVXNlck9iamVj
dDo6cHV0IHBlcmZvcm1zIHNpZGUtZWZmZWN0IG9uIEpTT2JqZWN0OjpwdXQsIGFuZCBpdCBuZWds
ZWN0cyB0byBtYXJrIHRoZSBQdXRQcm9wZXJ0eVNsb3QgYXMgbm9uLWNhY2hhZWJsZSwKLSAgICAg
ICAgICAgICAgICAvLyB0aGVuIGFyYml0cmFyeSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgY2FuIGhh
cHBlbiBkdXJpbmcgdGhlIHB1dCBvcGVyYXRpb24sIGFuZCB0aGlzIGdlbmVyYXRlcyB3cm9uZyB0
cmFuc2l0aW9uIGluZm9ybWF0aW9uIGhlcmUgYXMgaWYgb2xkU3RydWN0dXJlIC0+IG5ld1N0cnVj
dHVyZS4KLSAgICAgICAgICAgICAgICAvLyBJbiByZWFsaXR5LCB0aGUgdHJhbnNpdGlvbiBpcyBv
bGRTdHJ1Y3R1cmUgLT4gc29tZXRoaW5nIHVua25vd24gc3RydWN0dXJlcyAtPiBiYXNlVmFsdWUn
cyBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gVG8gZ3VhcmQgYWdhaW5zdCB0aGUgZW1i
ZWRkZXIncyBwb3RlbnRpYWxseSBpbmNvcnJlY3QgVXNlck9iamVjdDo6cHV0IGltcGxlbWVudGF0
aW9uLCB3ZSBzaG91bGQgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uIGFuZCBpZiBmb3VuZCwgYW5k
IGdpdmUgdXAgb24gY2FjaGluZyB0aGUgcHV0LgotICAgICAgICAgICAgICAgIEFTU0VSVChiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gbmV3U3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pICE9IG5ld1N0cnVj
dHVyZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0
dXJlKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3ND
aGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgICAgIGlmIChwdXRLaW5k
ID09IFB1dEtpbmQ6Ok5vdERpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hl
U3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBu
dWxscHRyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3Jl
YXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5U2V0dGVyTWlzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChwdXRL
aW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkgewotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaWRlbnQuaXNQcml2YXRlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCBj
b2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlVHJhbnNpdGlvbih2
bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIHN0dWJJ
bmZvKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxl
Q3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7Ci0gICAgICAgICAgICBpZiAo
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0KLSAgICAgICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZSBhIHNlbGYgY3VzdG9tLCBzaW5j
ZSB3ZSBtdXN0IGRpc2FsbG93IGRpY3Rpb25hcmllcwotICAgICAgICAgICAgICAgIC8vIGJlY2F1
c2Ugd2UgbmVlZCB0byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9tIGdvZXMgYXdheSBzaW5jZSB3
ZSBjYWNoZSB0aGUgY29uc3RhbnQKLSAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBwb2ludGVy
LgotICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNo
aW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLQotICAgICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0Fj
Y2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNl
dCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xk
U3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNDdXN0
b21BY2Nlc3NvcigpID8gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXIgOiBBY2Nlc3ND
YXNlOjpDdXN0b21WYWx1ZVNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90
b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHksIHNsb3QuY3VzdG9tU2V0dGVyKCkucmV0YWdnZWQ8
Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KCksIHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Qu
YmFzZSgpIDogbnVsbHB0cik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IEFTU0VSVChzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpOwotICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2Jh
bE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rp
b25hcnkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9B
Y2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0ID0gcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZt
LCBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKSktPmdldCh2bSwgaWRlbnQuaW1wbCgpLCBhdHRyaWJ1
dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQp
IHx8ICEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vz
c0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJl
LCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY29u
ZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkFjY2Vzc29yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9u
U2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQs
IGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRC
eUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZv
LmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0
cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJv
cGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBs
YWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2Uo
KSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0LmNvZGUoKSk7Ci0KLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNv
ZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkg
PyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hQdXRC
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkK
LXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAg
Ci0gICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQs
IHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihzbG90
LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCkKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0Nl
bGwoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIWluZGV4Lmlz
SW50MzIoKSkKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsK
LQotICAgIHsKLSAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotCi0g
ICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGlz
VHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsK
LSAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3Jh
Z2VUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgotICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgotICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3Rv
cmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50OENs
YW1wZWQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVJbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6Ci0gICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9y
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlVaW50MzJTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VHlwZUZsb2F0MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAv
IEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2
NDoKLSAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5k
ZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKLSAgICAgICAgICAgIHN3aXRjaCAoaW5k
ZXhpbmdTaGFwZSkgewotICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6Ci0gICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0
b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheVN0b3Jh
Z2VTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZEFycmF5U3RvcmFnZVN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgIHJlc3Vs
dCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2Vu
ZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJl
cGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIo
KSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZp
cmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2Nr
LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0
S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKLXsKLSAgICBpZiAodHJ5Q2FjaGVBcnJh
eVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8s
IHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYykpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17
Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQgcmVzdWx0OwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAg
IGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgIGlm
ICghYmFzZVZhbHVlLmlzT2JqZWN0KCkgfHwgIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpIHx8IG9sZFN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlRGVs
ZXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBpZiAo
YmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAg
ICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5oYXNCZWVuRmxhdHRl
bmVkQmVmb3JlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgICAgICBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsdWUpLT5mbGF0dGVuRGljdGlvbmFyeU9i
amVjdCh2bSk7Ci0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotCi0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBu
ZXdDYXNlOwotCi0gICAgICAgIGlmIChzbG90LmlzRGVsZXRlSGl0KCkpIHsKLSAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0
aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLnVpZCgpLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgIGlm
ICghbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgfHwgbmV3U3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdPZmZzZXQgPT0gc2xvdC5jYWNoZWRPZmZzZXQo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xk
U3RydWN0dXJlKTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25L
aW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOwotICAgICAgICAgICAg
QVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNW
YWxpZE9mZnNldChuZXdPZmZzZXQpKTsKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGVEZWxldGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBuZXdPZmZzZXQsIG9s
ZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzTm9u
Y29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChlY21hTW9kZS5pc1N0cmljdCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0
ZU5vbkNvbmZpZ3VyYWJsZSwgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1
cmUsIHsgfSwgbnVsbHB0cik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVNaXNz
LCBwcm9wZXJ0eU5hbWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwgeyB9LCBudWxscHRy
KTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGVjbWFNb2RlLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3
Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAg
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
aXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9j
aywgcmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZl
VXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hEZWxldGVCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRl
UHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKLXsKLSAgICBT
dXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwotCi0gICAgaWYgKHRyeUNhY2hlRGVsZXRlQnkoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIHNsb3QsIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIHN0dWJJbmZvLCBraW5kLCBlY21hTW9kZSkgPT0gR2l2ZVVwT25DYWNoZSkgewotICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhHZW5lcmljLCBiYXNlVmFsdWUuY2xh
c3NJbmZvT3JOdWxsKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHByb3BlcnR5TmFtZS51aWQoKSkpKTsKLSAgICAgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpC
eUlkKQotICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBvcGVyYXRpb25EZWxldGVCeUlkR2VuZXJpYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRl
QnlWYWxHZW5lcmljKTsKLSAgICB9Ci19Ci0KLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQot
ewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6Ci0gICAgICAg
IHJldHVybiBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBjYXNlIEluQnlLaW5kOjpCeVZh
bDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBjYXNlIElu
QnlLaW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJp
Y0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAg
IGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5SWRHZW5l
cmljOwotICAgIGNhc2UgSW5CeUtpbmQ6OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
SW5CeVZhbEdlbmVyaWM7Ci0gICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAg
IHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFtZUdlbmVyaWM7Ci0gICAgfQotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUluQnkoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwKLSAgICBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKLXsKLSAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0g
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFt
ZS51aWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGds
b2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpIHx8ICghd2FzRm91bmQgJiYgIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGVGb3JBYnNlbmNlKCkpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAod2FzRm91bmQpIHsKLSAgICAgICAg
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICh3YXNGb3VuZCkg
ewotICAgICAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2
bSwgYmFzZSk7Ci0gICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAgICAgICAgIC8vIE9wdGltaXplIHNl
bGYgYWNjZXNzLgotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQot
ICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCi0gICAgICAgICAgICAg
ICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVy
ZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGlmIChn
ZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJh
c2UsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgIGlmIChjYWNo
ZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNl
c1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9
IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBl
QWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHBy
b3BlcnR5TmFtZS51aWQoKSkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBu
dWxscHRyOwotICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZt
LCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlk
ZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkg
fHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNh
Y2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmICghY2Fj
aGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAg
IHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShn
bG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNl
PiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgcHJv
cGVydHlOYW1lLCB3YXNGb3VuZCA/IHNsb3QuY2FjaGVkT2Zmc2V0KCkgOiBpbnZhbGlkT2Zmc2V0
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikp
OwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdU
Rk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUo
KSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7Ci0K
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAg
aWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCi0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJ
bkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwg
c3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0LnNo
b3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQot
dm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKLXsKLSAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotCi0gICAgaWYgKHRyeUNhY2hlSW5CeShnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8sIGtp
bmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxh
Y2VXaXRoR2VuZXJpYywgYmFzZU9iamVjdC0+Y2xhc3NJbmZvKGdsb2JhbE9iamVjdC0+dm0oKSks
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKLSAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVy
aWNJbkJ5RnVuY3Rpb24oa2luZCkpOwotICAgIH0KLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17
Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBicmFuZElELnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJ
Q0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsK
LQotICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBi
YXNlKTsKLSAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAg
IHJldHVybiBhY3Rpb247Ci0KLSAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0g
ICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICBSZWY8QWNjZXNzQ2Fz
ZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/
IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBicmFuZElELCBpbnZhbGlk
T2Zmc2V0LCBzdHJ1Y3R1cmUsIHsgfSwgeyB9KTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5m
by5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2Rl
OjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJl
c3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkluUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNl
UHJvcGVydHkpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7
Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNv
ZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkg
PyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hIYXNQ
cml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQs
IGJvb2wgd2FzRm91bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBTdXBl
clNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0KLSAgICBpZiAodHJ5Q2Fj
aGVIYXNQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJy
YW5kSUQsIHdhc0ZvdW5kLCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRHZW5lcmljKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQ2hl
Y2tQcml2YXRlQnJhbmQoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5k
SUQsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAg
ICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQo
KSk7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9i
amVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICAgICAgSW5saW5l
Q2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlm
IChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwot
Ci0gICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVDaGVja1ByaXZhdGVCcmFuZCh2bSwgY29kZUJs
b2NrLCBicmFuZElELCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFk
ZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0
cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6Q2hl
Y2tQcml2YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBz
dHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRH
aXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQg
cmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotCi0gICAgaWYgKHRyeUNhY2hl
Q2hlY2tQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJy
YW5kSUQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2Vu
ZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVNldFByaXZhdGVC
cmFuZCgKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIGJyYW5kSUQsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewot
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2
bSwgYnJhbmRJRC51aWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgaWYgKGZvcmNlSUNG
YWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICAgICAgCi0gICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOwotCi0gICAgICAgIGlmIChv
bGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKLQotICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JD
ZWxsKHZtLCBiYXNlKTsKLSAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAg
ICAgICAgICAgIHJldHVybiBhY3Rpb247Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6c2V0QnJhbmRUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3Ry
dWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgYnJhbmRJRC51aWQoKSk7Ci0gICAgICAg
IGlmICghbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LSAgICAgICAgaWYgKG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlv
dXNJRCgpID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRy
YW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlNldEJyYW5kKTsKLSAgICAgICAgQVNT
RVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgICAgIAotICAgICAgICBib29sIGlz
QmFzZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRl
QnJhbmRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNC
YXNlUHJvcGVydHkpKTsKLQotICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OmNyZWF0ZVNldFByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElELCBvbGRT
dHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3Ry
aWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQu
Z2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQ
cml2YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1Yklm
TmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIAotICAgIHJldHVy
biByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxh
dGVyOwotfQotCi12b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOwotCi0gICAgaWYgKHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsICBicmFuZElE
LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRHZW5lcmljKTsK
LX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5zdGFuY2VPZigKLSAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sCi0gICAgYm9vbCB3YXNGb3VuZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgCi0gICAg
UkVMRUFTRV9BU1NFUlQodmFsdWVWYWx1ZS5pc0NlbGwoKSk7IC8vIHNob3VsZENvbnNpZGVyQ2Fj
aGluZyByZWplY3RzIG5vbi1jZWxscy4KLSAgICAKLSAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xv
YmFsT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgewot
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCB2bSk7Ci0gICAgICAgIAotICAgICAgICBKU0NlbGwqIHZhbHVlID0gdmFsdWVWYWx1ZS5hc0Nl
bGwoKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS0+c3RydWN0dXJlKHZt
KTsKLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0gICAgICAgIEpTT2JqZWN0
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3RvdHlwZVZhbHVl
KTsKLSAgICAgICAgaWYgKHByb3RvdHlwZSkgewotICAgICAgICAgICAgaWYgKCFqc0R5bmFtaWND
YXN0PEpTT2JqZWN0Kj4odm0sIHZhbHVlKSkgewotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJ
bnN0YW5jZU9mQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlzcywgc3RydWN0dXJlLCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpLAotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdHJ1Y3R1cmUtPnByb3RvdHlwZVF1ZXJpZXNBcmVDYWNoZWFi
bGUoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUZWFjaCB0aGlzIHRvIGRvIHBvbHkg
cHJvdG8uCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4NTY2MwotICAgICAgICAgICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmco
Z2xvYmFsT2JqZWN0LCB2YWx1ZSwgd2FzRm91bmQgPyBwcm90b3R5cGUgOiBudWxscHRyKTsKLSAg
ICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9mKAotICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvdG90eXBlLCB3YXNGb3VuZCk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZIaXQgOiBBY2Nlc3NDYXNlOjpJ
bnN0YW5jZU9mTWlzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBwcm90b3R5cGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFuZXdDYXNlKQotICAgICAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0
YW5jZU9mR2VuZXJpYywgQ2FjaGVhYmxlSWRlbnRpZmllcigpKTsKLSAgICAgICAgCi0gICAgICAg
IExPR19JQygoSUNFdmVudDo6SW5zdGFuY2VPZkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIElkZW50aWZpZXIoKSkpOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gc3R1
YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01B
TW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIFdURk1vdmUobmV3Q2FzZSkpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0df
SUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIElkZW50aWZpZXIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkp
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICAKLSAgICBy
ZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2Fj
aGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoSW5zdGFuY2VPZigKLSAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVl
LCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0g
ICAgYm9vbCB3YXNGb3VuZCkKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7Ci0gICAgaWYgKHRyeUNhY2hlSW5zdGFuY2VPZihnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgdmFsdWVWYWx1ZSwgcHJvdG90eXBlVmFsdWUsIHN0dWJJbmZvLCB3YXNGb3VuZCkg
PT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKLXsKLSAgICBjYWxs
TGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxh
dGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93
UGF0aFRvKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcikKLXsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2bS5n
ZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwot
fQotCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRh
Zz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAg
IGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2Fs
bExpbmtJbmZvLnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2
aXJ0dWFsVGh1bmspKTsKLX0KLQotc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25lcihKU0Nl
bGwqIGNhbGxlZSkKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgLy8gRWFjaCBXZWJB
c3NlbWJseS5JbnN0YW5jZSBzaGFyZXMgdGhlIHN0dWJzIGZyb20gdGhlaXIgV2ViQXNzZW1ibHku
TW9kdWxlLCB3aGljaCBhcmUgdGhlcmVmb3JlIHRoZSBhcHByb3ByaWF0ZSBvd25lci4KLSAgICBy
ZXR1cm4ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjYWxsZWUpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oY2FsbGVlKTsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLX0KLQot
dm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKAotICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywKLSAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gY29kZVB0cikKLXsKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwotCi0g
ICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAg
ICAvLyBPdXIgY2FsbGVyIG11c3QgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNhbGxp
bmcKLSAgICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBjZWxs
LgotICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOwotCi0gICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAg
ICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2Nr
LgotICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1lLT5j
YWxsZWUoKS5hc0NlbGwoKSkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUo
KS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKG93bmVyKTsKLQotICAg
IEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRN
b25vbW9ycGhpY0NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7Ci0gICAgY2FsbExp
bmtJbmZvLnNldExhc3RTZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKLQotICAgIGlmIChz
aG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKLSAgICAgICAgZGF0YUxv
ZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2Fs
bExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJs
b2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKLQotICAgIGlmIChjYWxs
ZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChj
YWxsZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7Ci0KLSAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNp
YWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJz
KCkpIHsKLSAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLX0KLQotdm9pZCBsaW5rRGlyZWN0
Q2FsbCgKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0
dWIoKSk7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotCi0gICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAg
IAotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5m
by5zZXRDb2RlQmxvY2sodm0sIGNhbGxlckNvZGVCbG9jaywganNDYXN0PEZ1bmN0aW9uQ29kZUJs
b2NrKj4oY2FsbGVlQ29kZUJsb2NrKSk7Ci0gICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihjYWxsZXJDb2RlQmxvY2spKQotICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwg
RnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigp
KSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0
ICIsIGNvZGVQdHIsICJcbiIpOwotCi0gICAgY2FsbExpbmtJbmZvLnNldERpcmVjdENhbGxUYXJn
ZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOwotCi0gICAgaWYg
KGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdD
YWxsKGNhbGxGcmFtZSwgJmNhbGxMaW5rSW5mbyk7Ci19Ci0KLXZvaWQgbGlua1Nsb3dGb3IoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2Rl
QmxvY2soKTsKLSAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAg
bGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJldmVydENh
bGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewotICAgIGlmIChjYWxsTGlua0lu
Zm8uaXNEaXJlY3QoKSkgewotICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsK
LSAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkKLSAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby5pbml0aWFsaXplRGlyZWN0Q2FsbCgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpIHsKLSAgICAgICAg
ICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwotCi0gICAgICAg
ICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKLSAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxMaW5rSW5mby5j
bGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2FjaGUgYm90aCBm
b3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCi0gICAgfQotICAgIGNhbGxMaW5rSW5mby5j
bGVhclNlZW4oKTsKLSAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7Ci0gICAgY2FsbExpbmtJ
bmZvLmNsZWFyU2xvd1N0dWIoKTsKLSAgICBpZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCi0g
ICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKLX0KLQotdm9pZCB1bmxpbmtDYWxsKFZNJiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2lu
dGVyKCZjYWxsTGlua0luZm8pKTsKLSAgICAKLSAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0lu
Zm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KCkpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihWTSYg
dm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsK
LSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwot
ICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygp
OwotCi0gICAgZGF0YUxvZ0xuSWYoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVC
bG9jayksCi0gICAgICAgICJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCBGdWxsQ29kZU9yaWdp
bihjYWxsZXJDb2RlQmxvY2ssIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCkpKTsKLQotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0g
dmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIHJldmVydENhbGwodm0sIGNh
bGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIo
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOwotICAgIGNh
bGxMaW5rSW5mby5zZXRDbGVhcmVkQnlWaXJ0dWFsKCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1zdHJ1
Y3QgQ2FsbFRvQ29kZVB0ciB7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Ci19OwotfSAvLyBhbm5v
bnltb3VzIG5hbWVzcGFjZQotCi12b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBDYWxsVmFyaWFudCBuZXdWYXJpYW50KQotewotICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7Ci0KLSAgICAvLyBEdXJpbmcgZXhlY3V0aW9uIG9mIGxpbmtQb2x5bW9ycGhpY0NhbGws
IHdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IHdlIG5ldmVyIGRvIEdDLgotICAgIC8vIEdDIGpldHRp
c29ucyBDb2RlQmxvY2tzLCBjaGFuZ2VzIENhbGxMaW5rSW5mbyBldGMuIGFuZCBicmVha3MgYXNz
dW1wdGlvbiBkb25lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBjYWxsLgotICAgIERlZmVyR0NGb3JB
V2hpbGUgZGVmZXJHQ0ZvckFXaGlsZSh2bSk7Ci0gICAgCi0gICAgaWYgKCFuZXdWYXJpYW50KSB7
Ci0gICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBPdXIgY2FsbGVyIG11c3QgYmUgaGF2ZSBh
IGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcKLSAgICAvLyB0aGlzIGZyb20gV2FzbSwg
d2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+
Y2FsbGVlKCkuaXNDZWxsKCkpOwotCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBj
YWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgYm9vbCBpc1dlYkFzc2VtYmx5ID0gaXNXZWJB
c3NlbWJseU1vZHVsZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpOwotCi0gICAgLy8g
V2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9jay4KLSAg
ICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKLSAgICBBU1NFUlQo
b3duZXIpOwotCi0gICAgQ2FsbFZhcmlhbnRMaXN0IGxpc3Q7Ci0gICAgaWYgKFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lKiBzdHViID0gY2FsbExpbmtJbmZvLnN0dWIoKSkKLSAgICAgICAgbGlz
dCA9IHN0dWItPnZhcmlhbnRzKCk7Ci0gICAgZWxzZSBpZiAoSlNPYmplY3QqIG9sZENhbGxlZSA9
IGNhbGxMaW5rSW5mby5jYWxsZWUoKSkKLSAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdCB7
IENhbGxWYXJpYW50KG9sZENhbGxlZSkgfTsKLSAgICAKLSAgICBsaXN0ID0gdmFyaWFudExpc3RX
aXRoVmFyaWFudChsaXN0LCBuZXdWYXJpYW50KTsKLQotICAgIC8vIElmIHRoZXJlIGFyZSBhbnkg
Y2xvc3VyZSBjYWxscyB0aGVuIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IGFsbCBvZiB0aGVtIGFz
IGNsb3N1cmUgY2FsbHMuCi0gICAgLy8gVGhpcyBtYWtlcyBzd2l0Y2hpbmcgb24gY2FsbGVlIGNo
ZWFwZXIuIEl0IGFsc28gcHJvZHVjZXMgcHJvZmlsaW5nIHRoYXQncyBlYXNpZXIgb24gdGhlIERG
RzsKLSAgICAvLyB0aGUgREZHIGRvZXNuJ3QgcmVhbGx5IHdhbnQgdG8gZGVhbCB3aXRoIGEgY29t
YmluYXRpb24gb2YgY2xvc3VyZSBhbmQgbm9uLWNsb3N1cmUgY2FsbGVlcy4KLSAgICBib29sIGlz
Q2xvc3VyZUNhbGwgPSBmYWxzZTsKLSAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0
KSAgewotICAgICAgICBpZiAodmFyaWFudC5pc0Nsb3N1cmVDYWxsKCkpIHsKLSAgICAgICAgICAg
IGxpc3QgPSBkZXNwZWNpZmllZFZhcmlhbnRMaXN0KGxpc3QpOwotICAgICAgICAgICAgaXNDbG9z
dXJlQ2FsbCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBpZiAoaXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgY2FsbExpbmtJbmZvLnNldEhhc1Nl
ZW5DbG9zdXJlKCk7Ci0gICAgCi0gICAgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+IGNhbGxD
YXNlczsKLSAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlczsKLSAgICAKLSAgICAvLyBGaWd1
cmUgb3V0IHdoYXQgb3VyIGNhc2VzIGFyZS4KLSAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQg
OiBsaXN0KSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAg
ICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpICYmICF2YXJpYW50LmV4ZWN1dGFibGUoKS0+aXNI
b3N0RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSB2YXJpYW50LmV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwotICAg
ICAgICAgICAgLy8gSWYgd2UgY2Fubm90IGhhbmRsZSBhIGNhbGxlZSwgZWl0aGVyIGJlY2F1c2Ug
d2UgZG9uJ3QgaGF2ZSBhIENvZGVCbG9jayBvciBiZWNhdXNlIGFyaXR5IG1pc21hdGNoLAotICAg
ICAgICAgICAgLy8gYXNzdW1lIHRoYXQgaXQncyBiZXR0ZXIgZm9yIHRoaXMgd2hvbGUgdGhpbmcg
dG8gYmUgYSB2aXJ0dWFsIGNhbGwuCi0gICAgICAgICAgICBpZiAoIWNvZGVCbG9jayB8fCBjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8uaXNWYXJhcmdzKCkp
IHsKLSAgICAgICAgICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlu
a0luZm8pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGludDY0X3QgbmV3Q2FzZVZhbHVlID0gMDsKLSAgICAgICAgaWYgKGlzQ2xv
c3VyZUNhbGwpIHsKLSAgICAgICAgICAgIG5ld0Nhc2VWYWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4odmFyaWFudC5leGVjdXRhYmxlKCkpOwotICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIGFkZCBhIGZhc3QgcGF0aCBmb3IgSW50ZXJuYWxGdW5jdGlvbiB3aXRoIGNsb3N1cmUgY2Fs
bC4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzkzMTEKLSAgICAgICAgICAgIGlmICghbmV3Q2FzZVZhbHVlKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0
aW9uID0gdmFyaWFudC5mdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIG5ld0Nhc2VWYWx1ZSA9
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnVuY3Rpb24pOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG5ld0Nhc2VWYWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFyaWFu
dC5pbnRlcm5hbEZ1bmN0aW9uKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEFTU0VSVF9F
TkFCTEVEKSB7Ci0gICAgICAgICAgICBpZiAoY2FzZVZhbHVlcy5jb250YWlucyhuZXdDYXNlVmFs
dWUpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiRVJST1I6IEF0dGVtcHQgdG8gYWRkIGR1
cGxpY2F0ZSBjYXNlIHZhbHVlLlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiRXhpc3Rp
bmcgY2FzZSB2YWx1ZXM6ICIpOwotICAgICAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsK
LSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogY2FzZVZhbHVlcykKLSAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGRhdGFM
b2coIlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiQXR0ZW1wdGluZyB0byBhZGQ6ICIs
IG5ld0Nhc2VWYWx1ZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiVmFyaWFudCBs
aXN0OiAiLCBsaXN0RHVtcChjYWxsQ2FzZXMpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgY2FsbENhc2VzLmFwcGVuZChQb2x5bW9ycGhpY0NhbGxDYXNlKHZhcmlhbnQsIGNvZGVC
bG9jaykpOwotICAgICAgICBjYXNlVmFsdWVzLmFwcGVuZChuZXdDYXNlVmFsdWUpOwotICAgIH0K
LSAgICBBU1NFUlQoY2FsbENhc2VzLnNpemUoKSA9PSBjYXNlVmFsdWVzLnNpemUoKSk7Ci0KLSAg
ICAvLyBJZiB3ZSBhcmUgb3ZlciB0aGUgbGltaXQsIGp1c3QgdXNlIGEgbm9ybWFsIHZpcnR1YWwg
Y2FsbC4KLSAgICB1bnNpZ25lZCBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemU7Ci0g
ICAgaWYgKGlzV2ViQXNzZW1ibHkpCi0gICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRM
aXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZvcldl
YkFzc2VtYmx5VG9KUygpOwotICAgIGVsc2UgaWYgKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKLSAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFy
aWFudExpc3RTaXplID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXpl
Rm9yVG9wVGllcigpOwotICAgIGVsc2UKLSAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFu
dExpc3RTaXplID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKCk7
Ci0KLSAgICAvLyBXZSB1c2UgbGlzdC5zaXplKCkgaW5zdGVhZCBvZiBjYWxsQ2FzZXMuc2l6ZSgp
IGJlY2F1c2Ugd2UgcmVzcGVjdCBDYWxsVmFyaWFudCBzaXplIGZvciBub3cuCi0gICAgaWYgKGxp
c3Quc2l6ZSgpID4gbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKSB7Ci0gICAgICAg
IGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Q2FsbFRvQ29kZVB0cj4gY2FsbHMoY2FsbENhc2Vz
LnNpemUoKSk7Ci0gICAgVW5pcXVlQXJyYXk8dWludDMyX3Q+IGZhc3RDb3VudHM7Ci0KLSAgICBp
ZiAoIWlzV2ViQXNzZW1ibHkgJiYgY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29k
ZTo6dG9wVGllckpJVCgpKSB7Ci0gICAgICAgIGZhc3RDb3VudHMgPSBtYWtlVW5pcXVlQXJyYXk8
dWludDMyX3Q+KGNhbGxDYXNlcy5zaXplKCkpOwotICAgICAgICBtZW1zZXQoZmFzdENvdW50cy5n
ZXQoKSwgMCwgY2FsbENhc2VzLnNpemUoKSAqIHNpemVvZih1aW50MzJfdCkpOwotICAgIH0KLSAg
ICAKLSAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbExpbmtJbmZvLmNhbGxlZUdQUigpOwotCi0g
ICAgYm9vbCBpc0RhdGFJQyA9IGNhbGxMaW5rSW5mby5pc0RhdGFJQygpOwotICAgIENDYWxsSGVs
cGVycyBzdHViSml0KGNhbGxlckNvZGVCbG9jayk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bEZyYW1lU2h1ZmZsZXI+IGZyYW1lU2h1ZmZsZXI7Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5mcmFt
ZVNodWZmbGVEYXRhKCkpIHsKLSAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxs
KCkpOwotICAgICAgICBmcmFtZVNodWZmbGVyID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxl
cj4oc3R1YkppdCwgKmNhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKCkpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRo
YXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwsIGFuZCB3ZSBjYW4KLSAgICAgICAgLy8gdXNlIHRoZSBh
ZGRpdGlvbmFsIHJlZ2lzdGVyIHRoaXMgYnV5cyB1cy4KLSAgICAgICAgZnJhbWVTaHVmZmxlci0+
YXNzdW1lQ2FsbGVlSXNDZWxsKCk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+bG9j
a0dQUihjYWxsZWVHUFIpOwotICAgIH0KLQotICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7
Ci0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpIHsKLSAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCi0g
ICAgICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BS
KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IEFzc2Vt
Ymx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIpOwotICAgIH0gZWxzZQotICAg
ICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBjYWxsZWVHUFI7Ci0KLSAgICBHUFJSZWcgZmFzdENv
dW50c0Jhc2VHUFI7Ci0gICAgaWYgKGZyYW1lU2h1ZmZsZXIpCi0gICAgICAgIGZhc3RDb3VudHNC
YXNlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOwotICAgIGVsc2UgewotICAgICAg
ICBmYXN0Q291bnRzQmFzZUdQUiA9Ci0gICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNlbGVj
dFNjcmF0Y2hHUFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJlZ1Qz
KTsKLSAgICB9Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihm
YXN0Q291bnRzLmdldCgpKSwgZmFzdENvdW50c0Jhc2VHUFIpOwotCi0gICAgaWYgKCFmcmFtZVNo
dWZmbGVyICYmIGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgLy8gV2Ugc3Ry
b25nbHkgYXNzdW1lIHRoYXQgY2FsbGVlR1BSIGlzIG5vdCBhIGNhbGxlZSBzYXZlIHJlZ2lzdGVy
IGluIHRoZSBzbG93IHBhdGguCi0gICAgICAgIEFTU0VSVCghY2FsbGVyQ29kZUJsb2NrLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCktPmZpbmQoY2FsbGVlR1BSKSk7Ci0gICAgICAgIHN0dWJKaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIH0KLQotICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd1BhdGg7Ci0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpIHsKLSAgICAgICAgLy8gVmVyaWZ5
IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3Jh
dGNoR1BSLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChjYWxsTGlua0luZm8uaXNU
YWlsQ2FsbCgpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZO
b3RDZWxsKGNhbGxlZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChjYWxs
ZWVHUFIpKTsKLSNlbHNlCi0gICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2Vk
IHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCi0jZW5kaWYKLSAgICAgICAgLy8gRklYTUU6IFdl
IGNvdWxkIGFkZCBhIGZhc3QgcGF0aCBmb3IgSW50ZXJuYWxGdW5jdGlvbiB3aXRoIGNsb3N1cmUg
Y2FsbC4KLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RGdW5jdGlv
bihjYWxsZWVHUFIpKTsKLQotICAgICAgICBzdHViSml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0
YSgpKSwgY29tcGFyaXNvblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0g
c3R1YkppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgY29tcGFyaXNvblZhbHVl
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykp
OwotICAgICAgICBzdHViSml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbXBhcmlz
b25WYWx1ZUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZyksIGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGhhc0V4
ZWN1dGFibGUubGluaygmc3R1YkppdCk7Ci0gICAgfQotCi0gICAgQmluYXJ5U3dpdGNoIGJpbmFy
eVN3aXRjaChjb21wYXJpc29uVmFsdWVHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50
UHRyKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgd2hpbGUgKGJpbmFy
eVN3aXRjaC5hZHZhbmNlKHN0dWJKaXQpKSB7Ci0gICAgICAgIHNpemVfdCBjYXNlSW5kZXggPSBi
aW5hcnlTd2l0Y2guY2FzZUluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBDYWxsVmFyaWFudCB2
YXJpYW50ID0gY2FsbENhc2VzW2Nhc2VJbmRleF0udmFyaWFudCgpOwotICAgICAgICAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAgICAg
IGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSkgewotICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQu
ZXhlY3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBjYWxsTGlua0luZm8uc3BlY2lh
bGl6YXRpb25LaW5kKCksIHZhcmlhbnQuZnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWNv
ZGVQdHIpCi0gICAgICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVx
dWlyZWQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQuaW50
ZXJuYWxGdW5jdGlvbigpKTsKLSAgICAgICAgICAgIGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5h
bEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChmYXN0Q291bnRzKSB7Ci0gICAgICAgICAgICBzdHViSml0LmFkZDMyKAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhmYXN0Q291bnRzQmFzZUdQUiwgY2FzZUluZGV4
ICogc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBuZWVkc0Rv
bmVKdW1wID0gZmFsc2U7Ci0gICAgICAgIGlmIChmcmFtZVNodWZmbGVyKSB7Ci0gICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihzdHViSml0LCBmcmFtZVNodWZmbGVyLT5zbmFwc2hvdCgpKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9
IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2FsbExpbmtJbmZv
LmlzVGFpbENhbGwoKSkgewotICAgICAgICAgICAgc3R1YkppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7Ci0gICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJU
YWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzRGF0YUlDKQot
ICAgICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxD
YWxsKCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5k
ZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgbmVlZHNEb25l
SnVtcCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbHNbY2Fz
ZUluZGV4XS5jb2RlUHRyID0gY29kZVB0cjsKLSAgICAgICAgaWYgKG5lZWRzRG9uZUp1bXApCi0g
ICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7Ci0gICAgfQotICAgIAotICAg
IHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwotICAgIGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgp
LmxpbmsoJnN0dWJKaXQpOwotCi0gICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKLSAgICAgICAgZnJh
bWVTaHVmZmxlci0+cmVsZWFzZUdQUihjYWxsZWVHUFIpOwotICAgICAgICBmcmFtZVNodWZmbGVy
LT5yZWxlYXNlR1BSKGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXIt
PnJlbGVhc2VHUFIoZmFzdENvdW50c0Jhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQ
UkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCkpOwotI2Vsc2UKLSAgICAgICAgZnJhbWVTaHVm
Zmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsK
LSNlbmRpZgotICAgICAgICBmcmFtZVNodWZmbGVyLT5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdU
MCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7Ci0j
ZW5kaWYKLSAgICB9Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwot
ICAgIGlmIChpc0RhdGFJQyAmJiAhY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAg
ICAvLyBXZSB3ZXJlIGNhbGxlZCBmcm9tIHRoZSBmYXN0IHBhdGgsIGdldCByaWQgb2YgYW55IHJl
bW5hbnRzIG9mIHRoYXQKLSAgICAgICAgLy8gd2hpY2ggbWF5IGV4aXN0LiBUaGlzIHJlYWxseSBv
bmx5IG1hdHRlcnMgZm9yIHg4Niwgd2hpY2ggYWRqdXN0cwotICAgICAgICAvLyBTUCBmb3IgY2Fs
bHMuCi0gICAgICAgIHN0dWJKaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUklu
Zm86OnJlZ1Q0KTsKLSAgICB9Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRk
cmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwotICAgIAotICAgIHN0dWJKaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwotICAgIEFzc2VtYmx5SGVscGVy
czo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoc3R1YkppdCwgb3duZXIsIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNh
Y2hlLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWls
VG9BbGxvY2F0ZSgpKSB7Ci0gICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNh
bGxMaW5rSW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9B
U1NFUlQoY2FsbENhc2VzLnNpemUoKSA9PSBjYWxscy5zaXplKCkpOwotICAgIGZvciAoQ2FsbFRv
Q29kZVB0ciBjYWxsVG9Db2RlUHRyIDogY2FsbHMpIHsKLSNpZiBDUFUoQVJNX1RIVU1CMikKLSAg
ICAgICAgLy8gVGFpbCBjYWxsIHNwZWNpYWwtY2FzaW5nIGVuc3VyZXMgcHJvcGVyIGxpbmtpbmcg
b24gQVJNIFRodW1iMiwgd2hlcmUgYSB0YWlsIGNhbGwganVtcHMgdG8gYW4gYWRkcmVzcwotICAg
ICAgICAvLyB3aXRoIGEgbm9uLWRlY29yYXRlZCBib3R0b20gYml0IGJ1dCBhIG5vcm1hbCBjYWxs
IGNhbGxzIGFuIGFkZHJlc3Mgd2l0aCBhIGRlY29yYXRlZCBib3R0b20gYml0LgotICAgICAgICBi
b29sIGlzVGFpbENhbGwgPSBjYWxsVG9Db2RlUHRyLmNhbGwuaXNGbGFnU2V0KENDYWxsSGVscGVy
czo6Q2FsbDo6VGFpbCk7Ci0gICAgICAgIHZvaWQqIHRhcmdldCA9IGlzVGFpbENhbGwgPyBjYWxs
VG9Db2RlUHRyLmNvZGVQdHIuZGF0YUxvY2F0aW9uKCkgOiBjYWxsVG9Db2RlUHRyLmNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2Rl
UHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldCkpKTsK
LSNlbHNlCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5j
dGlvblB0cjxKU0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIGlmICghZG9uZS5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGRvbmUsIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGlu
ayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1Yihs
aW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIAotICAgIGF1
dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
KAotICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgIGNhbGxlckNvZGVCbG9j
aywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIlBvbHlt
b3JwaGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCi0g
ICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmco
KmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2Fs
bENhc2VzKSkuZGF0YSgpKSwKLSAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxlckZy
YW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAotICAgICAgICBXVEZNb3ZlKGZhc3RDb3Vu
dHMpKSk7Ci0KLSAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9u
IDY0LWJpdHMsIGJ1dCBzdGlsbAotICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEg
bm9uLWNlbGwgY2FsbGVlIHdpbGwgYWx3YXlzCi0gICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRo
Ci0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0KLSAgICAvLyBJZiB0aGVyZSBo
YWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29v
biBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcwotICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24g
c3RhY2suCi0gICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOwot
ICAgIAotICAgIC8vIFRoZSBjYWxsIGxpbmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2FsbCBjYWNo
ZSBhcGFydCBmcm9tIHRoZSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsCi0gICAgLy8gc3R1
Yi4KLSAgICBpZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCi0gICAgICAgIGNhbGxMaW5rSW5m
by5yZW1vdmUoKTsKLX0KLQotdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewotICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5n
R2V0QnlGdW5jdGlvbihraW5kKSk7Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5SWQ6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAgICBjYXNl
IEdldEJ5S2luZDo6VHJ5QnlJZDoKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAg
ICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lOgotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotdm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQotewotICAgIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgc3dpdGNoIChraW5k
KSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKLSAgICAgICAgdXNpbmcgRnVuY3Rpb25U
eXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0g
ICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2Fz
dDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbyku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVk
RnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7
Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxk
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgICAgICBvcHRp
bWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5
VmFsOiB7Ci0gICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplKTsKLSAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVk
RnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRh
cmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAg
aWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmlj
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBl
bHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3Ry
aWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5l
cmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2
YXRlRmllbGRPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAo
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdl
bmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZh
dGVGaWVsZE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBzd2l0Y2gg
KGtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKLSAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCByZXNldERlbEJ5KENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2lu
ZCBraW5kKQotewotICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKLSAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemUpOwotICAgIGVsc2UKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKLSAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXpp
bmdJbkJ5RnVuY3Rpb24oa2luZCkpOwotICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQot
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8pOwotICAgIGVsc2UKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQot
Ci12b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Ci0gICAgSW5s
aW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRDaGVja1By
aXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOwotfQotCi12b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7
Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQsIEpTT2JqZWN0KiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotICAgIGlmICghY2FsbGVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoa2lu
ZCAhPSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGF1dG8q
IHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBj
YWxsZWUpKQotICAgICAgICByZXR1cm4gd2FzbUZ1bmN0aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtpbmQpOwot
ICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTM3N2VlMTBhMmVmODRhMjNk
OWVjMmRkNDhjZjY4ZDc5YzdkZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5j
bHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCi0j
aW5jbHVkZSAiUHV0S2luZC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotZW51bSBjbGFzcyBHZXRC
eUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlWYWwsCi0gICAgVHJ5QnlJZCwKLSAgICBCeUlkV2l0
aFRoaXMsCi0gICAgQnlJZERpcmVjdCwKLSAgICBQcml2YXRlTmFtZSwKLSAgICBQcml2YXRlTmFt
ZUJ5SWQsCi19OwotCi1lbnVtIGNsYXNzIFB1dEJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBCeVZh
bCwKLX07Ci0KLWVudW0gY2xhc3MgRGVsQnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsCi19
OwotCi1lbnVtIGNsYXNzIEluQnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotICAgIFBy
aXZhdGVOYW1lCi19OwotCi12b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBK
U1ZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKLXZvaWQgcmVwYXRjaFB1dEJ5KEpT
R2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxl
SWRlbnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
dXRCeUtpbmQsIFB1dEtpbmQpOwotdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3Qq
LCBDb2RlQmxvY2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1v
ZGUpOwotdm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2Jq
ZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hIYXNQcml2
YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJs
ZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBy
ZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09i
amVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJl
cGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVj
dCosIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7
Ci12b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNW
YWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3
YXNGb3VuZCk7Ci12b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBD
YWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4pOwotdm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZv
aWQgdW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5mbyYpOwotdm9pZCBsaW5rUG9seW1vcnBoaWND
YWxsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlh
bnQpOwotdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0
QnlLaW5kKTsKLXZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IFB1dEJ5S2luZCk7Ci12b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBEZWxCeUtpbmQpOwotdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBJbkJ5S2luZCk7Ci12b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChDb2RlQmxvY2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQsIEpTT2JqZWN0KiBjYWxsZWUpOwotCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAppbmRleCAyOTcxNDdlMWM0YzA4ZGNjZDVmN2I3ODY0MTFkODU1YjJh
MWRlNDdjLi5kYmQ1YWJkMzc4OGQ3MWI4MDMwNWJiODUxZmJjYzI3MTNlODdiMDBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC0zNDQsNDgg
KzM0NCwyNSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbChWTSYgdm0pCiAgICAgcmV0dXJuIHZpcnR1YWxUaHVu
a0Zvcih2bSwgQ2FsbE1vZGU6OlJlZ3VsYXIsIENvZGVGb3JDYWxsKTsKIH0KIAotc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yUmVndWxh
ckNvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2Fs
bE1vZGU6OlJlZ3VsYXIsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCiBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbChWTSYg
dm0pCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlRhaWwsIENv
ZGVGb3JDYWxsKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAgcmV0dXJu
IHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlRhaWwsIENvZGVGb3JDb25zdHJ1Y3QpOwot
fQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFs
VGh1bmtGb3JDb25zdHJ1Y3RDYWxsKFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbFRodW5r
Rm9yKHZtLCBDYWxsTW9kZTo6Q29uc3RydWN0LCBDb2RlRm9yQ2FsbCk7Ci19Ci0KIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvckNvbnN0
cnVjdENvbnN0cnVjdChWTSYgdm0pCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwg
Q2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiB2bSwg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0sIENhbGxNb2RlIGNhbGxNb2Rl
KQogewotICAgIGF1dG8gbW9kZSA9IGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpOwotICAgIGF1dG8g
a2luZCA9IGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBhdXRvIGdlbmVy
YXRvciA9IFsmXSAoKSAtPiBUaHVua0dlbmVyYXRvciB7Ci0gICAgICAgIHN3aXRjaCAobW9kZSkg
eworICAgICAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OlJl
Z3VsYXI6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7Ci0gICAgICAgICAgICByZXR1
cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNvbnN0cnVjdDsKKyAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoK
LSAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsKLSAgICAgICAgICAgIHJldHVybiB2aXJ0dWFs
VGh1bmtGb3JUYWlsQ29uc3RydWN0OworICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zv
clRhaWxDYWxsOwogICAgICAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6Ci0gICAgICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yQ29uc3RydWN0Q2FsbDsKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtG
b3JDb25zdHJ1Y3RDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5oCmluZGV4IDBmOWY2ZTJkMzZmNmRkMjNlMTg3MjZhY2U2MzE0YTMwYTIwMWRiY2UuLmFiN2Nm
NjZjNDIxNTFlZTAxOTU4YzFhYjIyZjI5ZmNkOGRkNzAxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAtNDksNyArNDksNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcihWTQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYs
IENhbGxMaW5rSW5mbyYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mLCBDYWxsTW9kZSk7CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0m
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggZThkYWZm
N2Q4OGIzMGM2YmY4NDcyMzE0YmUyZjFjNzk2MGYyNDdmNS4uZDBiMzczODkyMWE0ZjAwMTUxMmU3
ZGVlM2E4NDQzYzUxOTNiZDI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RGF0YS5jcHAKQEAgLTU4LDYgKzU4LDcgQEAgZXh0ZXJuICJDIiB2b2lkIHdhc21fZW50cnkodm9p
ZCosIHZvaWQqLCB2b2lkKik7CiBleHRlcm4gIkMiIHZvaWQgdm1FbnRyeVRvSmF2YVNjcmlwdFRy
YW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5VHJhbXBvbGlu
ZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xp
bmUodm9pZCk7CitleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJh
bXBvbGluZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCBleGNlcHRpb25IYW5kbGVyVHJhbXBvbGlu
ZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCByZXR1cm5Gcm9tTExJbnRUcmFtcG9saW5lKHZvaWQp
OwogI2VuZGlmCkBAIC0xNTMsNyArMTU0LDcgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICB7CiAg
ICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VK
SVQoKSkKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShK
U0VudHJ5UHRyVGFnKSk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWls
Q2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdD
b2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRh
aWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5n
YXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlQdHJUYWcp
XT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKQEAgLTE2MSwxMSAr
MTYyLDE5IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgICAgICBj
b2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVNsb3dQYXRoUHRyVGFn
KSk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNF
bnRyeVB0clRhZywgdHJ1ZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlUmVmLmNv
bnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQq
LCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsSlNFbnRy
eVNsb3dQYXRoVHJhbXBvbGluZSkpKSk7CiAgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVN
YXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoUHRy
VGFnKV0gPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0K
KyAgICB7CisgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CisgICAgICAgIGlmIChPcHRp
b25zOjp1c2VKSVQoKSkKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxD
YWxsR2F0ZShKU0VudHJ5UHRyVGFnLCBmYWxzZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdD
b2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRh
aWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUpKSkpOworICAgICAgICBnX2pzY0Nv
bmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbFdp
dGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICB9CiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVm
OwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCAxYTk1ZDFkZDBlYTVlZjM0MzEwNjE1
YjY5MWViYzlhMWVhYjgyYTZhLi5mOWQxZGI1YTQ2OTM0YzY2NzE2ZWY2NzU4MGE1YzVhMjI4YzFk
NGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgogI2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lSW5saW5lcy5oIgogI2luY2x1ZGUgIlJlZ0V4
cE9iamVjdC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2hhZG93
Q2hpY2tlbi5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgIlZNSW5saW5l
cy5oIgpAQCAtNTgyLDYgKzU4MywxNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVj
aykKICAgICBMTElOVF9SRVRVUk5fVFdPKHBjLCBjYWxsRnJhbWUpOwogfQogCitleHRlcm4gIkMi
IFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF9saW5rX2NhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSwgSlNDZWxsKiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0Nl
bGwqKQoreworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBqc0Nhc3Q8SlNHbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpLCBjYWxsTGlua0luZm8pOworfQorCitleHRlcm4gIkMiIFNs
b3dQYXRoUmV0dXJuVHlwZSBsbGludF92aXJ0dWFsX2NhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSwgSlNDZWxsKiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0Nl
bGwqKQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOworICAgIHJl
dHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCksIGNhbGxlZUZyYW1lLCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxs
SWdub3JlZCk7Cit9CisKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfb2JqZWN0
KQogewogICAgIExMSU5UX0JFR0lOKCk7CkBAIC0xODE5LDcgKzE4MzEsOCBAQCBzdGF0aWMgU2xv
d1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpT
VmFsdWUgY2FsbGVlLAogICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVj
dChjYWxsZWUpKTsKICAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0g
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2
bSksIGNhbGxlZUZyYW1lKTsKICAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAg
ICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExM
SW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIGF1dG8qIGNhbGxlclNQID0g
Y2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAg
ICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6Z2V0
SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNsb3dQYXRo
TG9nKCJDYWxsIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVlLCAiXG4iKTsKQEAg
LTE4MzgsNyArMTg1MSw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENh
bGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsCiAgICAgICAgIGNhbGxl
ZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgIHZtLmVuY29kZWRI
b3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmpl
Y3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUpOwogICAgICAgICBEaXNh
bGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVj
dCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgYXV0
byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVyczsKKyAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwg
TExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgIH0KICAgICAKICAgICBzbG93UGF0aExv
ZygiQ29uc3RydWN0b3IgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIp
OwpAQCAtMTg0Nyw3ICsxODYxLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVI
b3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICBMTElO
VF9DQUxMX1RIUk9XKGdsb2JhbE9iamVjdCwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xv
YmFsT2JqZWN0LCBjYWxsZWUpKTsKIH0KIAotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRV
cENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
LCBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUsIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBudWxscHRyKQoraW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU1ZhbHVlIGNhbGxl
ZUFzVmFsdWUpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2Fs
bGVyRnJhbWUoKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CkBAIC0xODU5LDE3ICsxODczLDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlv
bktpCiAgICAgCiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rp
b24oY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkgewotICAg
ICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxG
dW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAgICBpZiAoY2FsbGVlQXNWYWx1
ZS5pbmhlcml0czxJbnRlcm5hbEZ1bmN0aW9uPih2bSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxG
dW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CiAgICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRy
KTsKLQotICAgICAgICAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExp
bmtJbmZvKSB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjYWxs
ZXJDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5saW5r
KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwotICAgICAg
ICAgICAgfQotCiAgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4o
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIExMSU5UX0NBTExfUkVU
VVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZy
YW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgICAgICAgICAgTExJ
TlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRhYmxl
QWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoY2FsbGVlRnJhbWUsIGNhbGxlZUFz
VmFsdWUsIGtpbmQpKTsKICAgICB9CkBAIC0xOTA0LDc0ICsxOTEzLDkgQEAgaW5saW5lIFNsb3dQ
YXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNp
YWxpemF0aW9uS2kKICAgICB9CiAKICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAKLSAgICBp
ZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8pIHsKLSAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjYWxsZXJDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgIGNhbGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQ
dHIpOwotICAgICAgICBpZiAoY29kZUJsb2NrKQotICAgICAgICAgICAgY29kZUJsb2NrLT5saW5r
SW5jb21pbmdDYWxsKGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICB9Ci0KICAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygp
KTsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lLCBPcCYmIGJ5dGVjb2RlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCA9IDApCi17
Ci0gICAgLy8gVGhpcyBuZWVkcyB0bzoKLSAgICAvLyAtIFNldCB1cCBhIGNhbGwgZnJhbWUuCi0g
ICAgLy8gLSBGaWd1cmUgb3V0IHdoYXQgdG8gY2FsbCBhbmQgY29tcGlsZSBpdCBpZiBuZWNlc3Nh
cnkuCi0gICAgLy8gLSBJZiBwb3NzaWJsZSwgbGluayB0aGUgY2FsbCdzIGlubGluZSBjYWNoZS4K
LSAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwg
YW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUg
PSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgY2FsbGVlRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5k
ZXgpKTsKLSAgICAKLSAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gc3Rh
Y2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCk7Ci0g
ICAgCi0gICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpKTsKLSAg
ICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwotICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFt
ZShjYWxsRnJhbWUpOwotICAgIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKLSAgICByZXR1cm4gc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBj
YWxsZWVBc1ZhbHVlLCAmY2FsbExpbmtJbmZvRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50SW5kZXgp
KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGwpCi17Ci0gICAgTExJ
TlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0g
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywg
Y2FsbEZyYW1lLCBwYy0+YXM8T3BDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQotCi1MTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsKQotewotICAgIExMSU5UX0JFR0lOX05P
X1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwg
cGMtPmFzPE9wVGFpbENhbGw+KCksIENvZGVGb3JDYWxsKSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3QpCi17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BD
KCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8
T3BDb25zdHJ1Y3Q+KCksIENvZGVGb3JDb25zdHJ1Y3QpKTsKLX0KLQotTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigp
OwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8
T3BJdGVyYXRvck9wZW4+KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2Fs
bCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9j
YWxsKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29k
ZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcEl0ZXJhdG9yTmV4dD4oKSwgQ29kZUZvckNhbGws
IE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dCkpOworICAgIGF1dG8qIGNhbGxlclNQID0gY2Fs
bGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRf
Q0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MpCkBAIC0yMDQzLDggKzE5ODcsOCBAQCBlbnVtIGNs
YXNzIFNldEFyZ3VtZW50c1dpdGggewogICAgIEN1cnJlbnRBcmd1bWVudHMKIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kLCBTZXRBcmd1bWVudHNXaXRoIHNldCkKK3RlbXBsYXRlPHR5cGVuYW1l
IE9wLCBTZXRBcmd1bWVudHNXaXRoIHNldD4KK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFy
YXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpCiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7CiAK
QEAgLTIwNTMsMTEgKzE5OTcsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdz
U2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgIC8vIC0g
UmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3MgdG8gY2FsbCBhbmQgdGhlIG5l
dyBjYWxsIGZyYW1lLgogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcD4oKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVl
KTsKIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSB2bS5uZXdDYWxsRnJhbWVSZXR1cm5W
YWx1ZTsKLQotICAgIGlmIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KSB7CisgICAg
dW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2bS52YXJhcmdzTGVuZ3RoICsg
MTsKKyAgICBpZiBjb25zdGV4cHIgKHNldCA9PSBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpIHsK
ICAgICAgICAgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKSwgYnl0ZWNv
ZGUubV9maXJzdFZhckFyZywgdm0udmFyYXJnc0xlbmd0aCk7CiAgICAgICAgIExMSU5UX0NBTExf
Q0hFQ0tfRVhDRVBUSU9OKGdsb2JhbE9iamVjdCk7CiAgICAgfSBlbHNlCkBAIC0yMDY3LDI3ICsy
MDEyLDMwIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBjYWxsZWVGcmFtZS0+dW5jaGVj
a2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1Zh
bHVlOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVB
c1ZhbHVlKSk7CisgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8udXBkYXRlTWF4QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworCisgICAgYXV0
byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVyczsKKyAgICBMTElOVF9SRVRVUk5fVFdPKHBjLCBjYWxsZXJTUCk7CiB9CiAKIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHZhcmFy
Z3NTZXR1cDxPcENhbGxWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCwgU2V0QXJn
dW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ2FsbFZhcmFy
Z3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3Mp
CiB7Ci0gICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsVmFyYXJncz4oY2FsbEZyYW1l
LCBwYywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJu
IHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsVmFyYXJncywgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0
PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiB7Ci0gICAgcmV0dXJuIHZh
cmFyZ3NTZXR1cDxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY2FsbEZyYW1lLCBwYywgQ29k
ZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6OkN1cnJlbnRBcmd1bWVudHMpOworICAgIHJldHVy
biB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIFNldEFyZ3VtZW50c1dp
dGg6OkN1cnJlbnRBcmd1bWVudHM+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzKQogewotICAg
IHJldHVybiB2YXJhcmdzU2V0dXA8T3BDb25zdHJ1Y3RWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBD
b2RlRm9yQ29uc3RydWN0LCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOworICAgIHJldHVybiB2
YXJhcmdzU2V0dXA8T3BDb25zdHJ1Y3RWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+
KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0
cnVjdGlvbiogcGMsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXR1cm5Q
b2ludCkKQEAgLTIxMTAsNyArMjA1OCw4IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29t
bW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAg
CiAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoZXZh
bChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBieXRlY29kZS5tX2VjbWFNb2RlKSk7CiAgICAg
RGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVj
dCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBhdXRvKiBj
YWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJz
OworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50Ojpn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLCBKU0VudHJ5UHRyVGFnKTsKIH0KICAgICAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9jYWxsX2V2YWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5oCmluZGV4IGUyMGEwZGZjNmI4N2FjZDYyMjY4ZTg4YWE2YWE5NjRmYjZlMDliNjYuLmQ0
MzhmY2IzMzlkYWZlMzdhM2MxNDFkYmUyNGE2YWQyMTEyOWJiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0zOCw2ICszOCw4IEBAIG5hbWVz
cGFjZSBMTEludCB7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNl
X29wZXJhbmQoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBp
bnQgb3BlcmFuZCkgUkVGRVJFTkNFRF9GUk9NX0FTTTsKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIGxsaW50X3RyYWNlX3ZhbHVlKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwg
aW50IGZyb21XaGVyZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9B
U007CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF9saW5rX2NhbGwoQ2FsbEZy
YW1lKiwgSlNDZWxsKiwgQ2FsbExpbmtJbmZvKiwgSlNDZWxsKik7CitleHRlcm4gIkMiIFNsb3dQ
YXRoUmV0dXJuVHlwZSBsbGludF92aXJ0dWFsX2NhbGwoQ2FsbEZyYW1lKiwgSlNDZWxsKiwgQ2Fs
bExpbmtJbmZvKiwgSlNDZWxsKik7CiBleHRlcm4gIkMiIHZvaWQgbGxpbnRfd3JpdGVfYmFycmll
cl9zbG93KENhbGxGcmFtZSosIEpTQ2VsbCopIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVS
TkFMOwogCiAjZGVmaW5lIExMSU5UX1NMT1dfUEFUSF9ERUNMKG5hbWUpIFwKQEAgLTExOSw5ICsx
MjEsNiBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9uZXdfYXN5bmNfZnVuYyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X25ld19hc3luY19mdW5jX2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX3NldF9mdW5jdGlvbl9uYW1lKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfY2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RhaWxf
Y2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdCk7
CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3Zh
cmFyZ3MpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1l
X2Zvcl9mb3J3YXJkX2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2NhbGxfdmFyYXJncyk7CkBAIC0xMzEsOCArMTMwLDYgQEAgTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncyk7CiBMTElOVF9TTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbCk7CiBMTElOVF9TTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbF93aWRlMTYpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTMyKTsKLUxMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsKTsKLUxMSU5UX1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsKTsKIExMSU5UX1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdGVhcl9vZmZfYXJndW1lbnRzKTsKIExMSU5UX1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3RyY2F0KTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCmluZGV4IDQ2MmNiZmJlNGUzNDU2ODQ1ZTA1YWE4YmMw
YzQ4MTE1M2NiYjhkMGEuLjE2MDNjMmM3ODU0Yzk5OWJlOWU2YzU3MDUzMzZjZmY3NDI3MjkwYjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApAQCAtMzQ2
LDkgKzM0Niw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGNyZWF0ZUpTR2F0ZVRodW5rKHZvaWQqIHBvaW50ZXIsIFB0CiB7CiAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAotICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QzLCB0YWcpOwotICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDMpOwot
ICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QzLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGpp
dC5jYWxsKEdQUkluZm86OnJlZ1Q1LCB0YWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDUpOworICAgIGppdC5mYXJKdW1w
KEdQUkluZm86OnJlZ1Q1LCBPcGVyYXRpb25QdHJUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6TExJbnRU
aHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklU
R2F0ZVB0clRhZywgIkxMSW50ICVzIGNhbGwgZ2F0ZSB0aHVuayIsIG5hbWUpOwpAQCAtMzY2LDEz
ICszNjYsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4g
Y3JlYXRlV2FzbUdhdGVUaHVuayh2b2lkKiBwb2ludGVyLAogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyB3YXNtIGNh
bGwgZ2F0ZSB0aHVuayIsIG5hbWUpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZykKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQ
dHJUYWcgdGFnLCBib29sIHVudGFnKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBq
aXQudW50YWdQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBBUk02NFJlZ2lzdGVyczo6bHIpOwot
ICAgIGppdC52YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMCwgdGFnKTsKKyAg
ICBpZiAodW50YWcpIHsKKyAgICAgICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BS
MiwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICAgICAgaml0LnZhbGlkYXRlVW50YWdnZWRQdHIo
QVJNNjRSZWdpc3RlcnM6OmxyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIH0KKyAgICBq
aXQuZmFySnVtcChHUFJJbmZvOjphcmd1bWVudEdQUjcsIHRhZyk7CiAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpM
TEludFRodW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZl
VG9KSVRHYXRlUHRyVGFnLCAiTExJbnQgdGFpbCBjYWxsIGdhdGUgdGh1bmsiKTsKQEAgLTU3Myw4
ICs1NzUsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmV0dXJuTG9j
YXRpb25UaHVuayhPcGNvZGVJRCBvcGNvZGVJRCwgT3BjbwogICAgIExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9pdGVyYXRvcl9vcGVuKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9pdGVy
YXRvcl9uZXh0KQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3QpCi0gICAg
TExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KQotICAgIExMSU5UX1JF
VFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93KQorICAgIExMSU5UX1JFVFVS
Tl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3MpCisgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9w
X2NvbnN0cnVjdF92YXJhcmdzKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlf
aWQpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV92YWwpCiAgICAgTExJTlRf
UkVUVVJOX0xPQ0FUSU9OKG9wX3B1dF9ieV9pZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50VGh1bmtzLmgKaW5kZXggYjg3YzQyMGNiZTQwMmExZjBjZjA4NjgxMDdiNWFmZDZkYmNm
NTRhYy4uMDVlYzYwMWMwMTY0Y2I5NTRiNzNhMjFjNzM1MWZmMDEwZmVhNzEwYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKQEAgLTg4LDcgKzg4LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gaml0Q2FnZVB0clRodW5r
KCk7CiAjaWYgQ1BVKEFSTTY0RSkKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+IGNyZWF0ZUpTR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21H
YXRlVGh1bmsodm9pZCosIFB0clRhZywgY29uc3QgY2hhciopOwotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyk7CitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2Fs
bEdhdGUoUHRyVGFnLCBib29sKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+IGxvb3BPU1JFbnRyeUdhdGVUaHVuaygpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gZW50cnlPU1JFbnRyeUdhdGVUaHVuaygpOwogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gd2FzbU9TUkVudHJ5R2F0ZVRo
dW5rKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KaW5kZXggYmI4OGI2ZmRiMDk5YjQ5OWFlNmZmNGU4MTAxMDE1MDRkYWE2ZDRl
My4uMzA3YjQxZjE3YWYzODg2ZjYzYmQ4YTg2NGI1M2JhYzVkNTQ4NGE3YSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAt
NTUxLDYgKzU1MSw3IEBAIGNvbnN0IFN5bWJvbFR5cGUgPSBjb25zdGV4cHIgU3ltYm9sVHlwZQog
Y29uc3QgT2JqZWN0VHlwZSA9IGNvbnN0ZXhwciBPYmplY3RUeXBlCiBjb25zdCBGaW5hbE9iamVj
dFR5cGUgPSBjb25zdGV4cHIgRmluYWxPYmplY3RUeXBlCiBjb25zdCBKU0Z1bmN0aW9uVHlwZSA9
IGNvbnN0ZXhwciBKU0Z1bmN0aW9uVHlwZQorY29uc3QgSW50ZXJuYWxGdW5jdGlvblR5cGUgPSBj
b25zdGV4cHIgSW50ZXJuYWxGdW5jdGlvblR5cGUKIGNvbnN0IEFycmF5VHlwZSA9IGNvbnN0ZXhw
ciBBcnJheVR5cGUKIGNvbnN0IERlcml2ZWRBcnJheVR5cGUgPSBjb25zdGV4cHIgRGVyaXZlZEFy
cmF5VHlwZQogY29uc3QgUHJveHlPYmplY3RUeXBlID0gY29uc3RleHByIFByb3h5T2JqZWN0VHlw
ZQpAQCAtMTE1MSwyNyArMTE1MiwyNyBAQCBtYWNybyBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaQogICAgICAg
ICBjbG9vcENhbGxKU0Z1bmN0aW9uIGNhbGxlZQogICAgIGVsc2lmIEFSTTY0RQogICAgICAgICBt
YWNybyBjYWxsTmFycm93KCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHBy
IEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2Rl
TmFtZSUpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0
ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9w
Y29kZU5hbWUlKSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9K
SVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9w
Y29kZU5hbWUlOgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZworICAgICAgICAgICAg
Y2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBjYWxsV2lk
ZTE2KCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0
T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2
KSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIg
SlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVO
YW1lJV93aWRlMTYpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBOYXRpdmVU
b0pJVEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBvbGluZV8l
b3Bjb2RlTmFtZSVfd2lkZTE2OgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZworICAg
ICAgICAgICAgY2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAogICAgICAgICBtYWNy
byBjYWxsV2lkZTMyKCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFt
ZSVfd2lkZTMyKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9K
SVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
OiVvcGNvZGVOYW1lJV93aWRlMzIpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTdd
LCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJh
bXBvbGluZV8lb3Bjb2RlTmFtZSVfd2lkZTMyOgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0
clRhZworICAgICAgICAgICAgY2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAotICAg
ICAgICBtb3ZlIGNhbGxlZSwgdDMKKyAgICAgICAgbW92ZSBjYWxsZWUsIHQ1CiAgICAgICAgIHNp
emUoY2FsbE5hcnJvdywgY2FsbFdpZGUxNiwgY2FsbFdpZGUzMiwgbWFjcm8gKGdlbikgZ2VuKCkg
ZW5kKQogICAgIGVsc2UKICAgICAgICAgY2FsbCBjYWxsZWUsIGNhbGxQdHJUYWcKQEAgLTEyMDks
MTIgKzEyMTAsMjMgQEAgbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmkKICAgICBlbmQKIGVuZAogCi1t
YWNybyBwcmVwYXJlRm9yUmVndWxhckNhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0
ZW1wNCwgY2FsbFB0clRhZykKLSAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorbWFj
cm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQogZW5k
CiAKLSMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUKLW1hY3JvIHByZXBhcmVGb3JUYWlsQ2Fs
bChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQorbWFjcm8g
aW52b2tlRm9yUmVndWxhckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1
ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJl
T2xkQ0ZSLCBjYWxsUHRyVGFnKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rlciwg
ZGlzcGF0Y2gsIGNhbGxlZSwgY2FsbFB0clRhZykKK2VuZAorCisjIHQ1IGlzIG1ldGFkYXRhCitt
YWNybyBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBv
cGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0
Y2gsIGNhbGxQdHJUYWcpCitlbmQKKworbWFjcm8gcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCgp
CitlbmQKKworIyBzcCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZSArIENhbGxlckZyYW1lQW5kUENT
aXplCisjIFdlIGxlYXZlIGNmciB0ZW1wNCB0byB1c2UgaXQgZm9yIHVudGFnZ2luZy4KK21hY3Jv
IHByZXBhcmVGb3JUYWlsQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKICAgICByZXN0
b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCiAKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsg
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbY2ZyXSwgdGVtcDIKQEAgLTEyMzIsMTggKzEyNDQs
MTcgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1w
MywgdGVtcDQsIGNhbGxQdHJUYWcpCiAgICAgbW92ZSBjZnIsIHRlbXAxCiAgICAgYWRkcCB0ZW1w
MiwgdGVtcDEKIAotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpc1tzcF0sIHRlbXAyCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzIC0gQ2FsbGVyRnJhbWVBbmRQQ1NpemVbc3BdLCB0ZW1wMgogICAgICMg
V2UgYXNzdW1lIDwgMl4yOCBhcmd1bWVudHMKICAgICBtdWxpIFNsb3RTaXplLCB0ZW1wMgogICAg
IGFkZGkgU3RhY2tBbGlnbm1lbnQgLSAxICsgQ2FsbEZyYW1lSGVhZGVyU2l6ZSwgdGVtcDIKICAg
ICBhbmRpIH5TdGFja0FsaWdubWVudE1hc2ssIHRlbXAyCiAKICAgICBpZiBBUk12NyBvciBBUk02
NCBvciBBUk02NEUgb3IgQ19MT09QIG9yIENfTE9PUF9XSU4gb3IgTUlQUyBvciBSSVNDVjY0Ci0g
ICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAgICAgICAgIHN1YmkgQ2FsbGVy
RnJhbWVBbmRQQ1NpemUsIHRlbXAyCiAgICAgICAgIGxvYWRwIENhbGxlckZyYW1lQW5kUEM6OnJl
dHVyblBDW2Nmcl0sIGxyCiAgICAgZWxzZQotICAgICAgICBhZGRwIFB0clNpemUsIHNwCisgICAg
ICAgIHN1YnAgUHRyU2l6ZSwgc3AKICAgICAgICAgc3ViaSBQdHJTaXplLCB0ZW1wMgogICAgICAg
ICBsb2FkcCBQdHJTaXplW2Nmcl0sIHRlbXAzCiAgICAgICAgIHN0b3JlcCB0ZW1wMywgW3NwXQpA
QCAtMTI3MCw5ICsxMjgxLDEyIEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRl
bXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIGVuZAogCiAgICAgbW92
ZSB0ZW1wMSwgc3AKK2VuZAorCittYWNybyBpbnZva2VGb3JUYWlsQ2FsbChvcGNvZGVOYW1lLCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rlciwg
ZGlzcGF0Y2gsIGNhbGxlZSwgbWF5YmVPbGRDRlIsIGNhbGxQdHJUYWcpCiAgICAgaWYgQVJNNjRF
Ci0gICAgICAgIG1vdmUgdGVtcDQsIGEyCi0gICAgICAgIG1vdmUgY2FsbGVlLCBhMAorICAgICAg
ICBtb3ZlIG1heWJlT2xkQ0ZSLCBhMgorICAgICAgICBtb3ZlIGNhbGxlZSwgYTcKICAgICAgICAg
bGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAg
KyAoY29uc3RleHByIEdhdGU6OnRhaWxDYWxsJWNhbGxQdHJUYWclKSAqIFB0clNpemUsIGExCiAg
ICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyAlY2FsbFB0clRhZyUKICAg
ICBlbHNlCkBAIC0xMjgwLDYgKzEyOTQsMjIgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNh
bGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCiAgICAgZW5kCiBl
bmQKIAorIyB0NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorICAgIGlmIEFSTTY0RQorICAg
ICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0
YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCBhNworICAgICAgICBsZWFwIEpT
Q0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25z
dGV4cHIgR2F0ZTo6dGFpbENhbGxXaXRob3V0VW50YWclY2FsbFB0clRhZyUpICogUHRyU2l6ZSwg
YTEKKyAgICAgICAgam1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjICVjYWxsUHRyVGFn
JQorICAgIGVsc2UKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTEK
KyAgICAgICAgam1wIGExLCBjYWxsUHRyVGFnCisgICAgZW5kCitlbmQKKworbWFjcm8gcHJlcGFy
ZUZvclNsb3dUYWlsQ2FsbCgpCisgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQor
ZW5kCisKIG1hY3JvIHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNv
ZGVTdHJ1Y3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAgICAgc2xvd1BhdGhG
b3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwg
ZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKIGVuZApAQCAtMTI5MSw3ICsxMzIxLDcg
QEAgbWFjcm8gc2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwg
dmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHUKICAgICAgICAgbWFjcm8gKGNhbGxlZSwgY2FsbGVl
RnJhbWVQdHIpCiAgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQ
CiAgICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAotICAgICAgICAgICAgcHJlcGFy
ZUNhbGwoY2FsbGVlLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQorICAg
ICAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCiAgICAgICAgIC5kb250VXBkYXRl
U1A6CiAgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgY2FsbGVlLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpCiAgICAgICAgIGVuZCkKQEAg
LTE4MjAsMTIgKzE4NTAsMTYgQEAgaWYgQVJNNjRFCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpTRW50
cnlUcmFtcG9saW5lCiAgICAgX3RhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmU6CiAgICAgICAgIHVu
dGFnUmV0dXJuQWRkcmVzcyBhMgotICAgICAgICBqbXAgYTAsIEpTRW50cnlQdHJUYWcKKyAgICAg
ICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX3RhaWxDYWxsSlNFbnRyeVNs
b3dQYXRoVHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmU6
CiAgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyBhMgotICAgICAgICBqbXAgYTAsIEpTRW50cnlT
bG93UGF0aFB0clRhZworICAgICAgICBqbXAgYTcsIEpTRW50cnlQdHJUYWcKKworICAgIGdsb2Jh
bCBfdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZQorICAgIF90YWlsQ2FsbFdp
dGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lOgorICAgICAgICBqbXAgYTcsIEpTRW50cnlQdHJU
YWcKIAogICAgIGdsb2JhbCBfZXhjZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUKICAgICBfZXhjZXB0
aW9uSGFuZGxlclRyYW1wb2xpbmU6CkBAIC0yMzI1LDE3ICsyMzU5LDE3IEBAIGVuZCkKIAogCiAj
IHdlIGNhbid0IHVzZSBjYWxsT3AgYmVjYXVzZSB3ZSBjYW4ndCBwYXNzIGBjYWxsYCBhcyB0aGUg
b3Bjb2RlIG5hbWUsIHNpbmNlIGl0J3MgYW4gaW5zdHJ1Y3Rpb24gbmFtZQotY29tbW9uQ2FsbE9w
KG9wX2NhbGwsIF9sbGludF9zbG93X3BhdGhfY2FsbCwgT3BDYWxsLCBwcmVwYXJlRm9yUmVndWxh
ckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKK2NvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxp
bnRfc2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VG
b3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVG
b3JTbG93UmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBhcnJheVByb2Zp
bGVGb3JDYWxsKE9wQ2FsbCwgZ2V0dSkKIGVuZCkKIAogCi1tYWNybyBjYWxsT3Aob3Bjb2RlTmFt
ZSwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgZm4pCi0gICAgY29tbW9uQ2FsbE9wKG9wXyVv
cGNvZGVOYW1lJSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwg
cHJlcGFyZUNhbGwsIGZuKQorbWFjcm8gY2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
cHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dD
YWxsLCBmbikKKyAgICBjb21tb25DYWxsT3Aob3BfJW9wY29kZU5hbWUlLCBfbGxpbnRfc2xvd19w
YXRoXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwg
cHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIGZuKQogZW5kCiAKIAotY2FsbE9w
KHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBtYWNybyAoZ2V0dSwg
bWV0YWRhdGEpCitjYWxsT3AodGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENh
bGwsIGludm9rZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJl
cGFyZUZvclNsb3dUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogICAgIGFycmF5UHJv
ZmlsZUZvckNhbGwoT3BUYWlsQ2FsbCwgZ2V0dSkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBp
bG9ndWUoKQogICAgICMgcmVsb2FkIG1ldGFkYXRhIHNpbmNlIGNoZWNrU3dpdGNoVG9KSVRGb3JF
cGlsb2d1ZSgpIG1pZ2h0IGhhdmUgdHJhc2hlZCB0NQpAQCAtMjM0Myw3ICsyMzc3LDcgQEAgY2Fs
bE9wKHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBtYWNybyAoZ2V0
dSwgbWV0YWRhdGEpCiBlbmQpCiAKIAotY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCitjYWxsT3Ao
Y29uc3RydWN0LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JS
ZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JT
bG93UmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQogCiAKIG1hY3JvIGJy
YW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKQEAgLTIzNTQsNDcgKzIzODgsMjkgQEAg
bWFjcm8gYnJhbmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQogLm5vRXhjZXB0aW9uOiAg
ICAKIGVuZAogCi1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgZGlzcGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLSAg
ICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKLSAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKLSAgICAjIGNhbGxlZUZyYW1lIGlu
IHIxCi0gICAgaWYgSlNWQUxVRTY0Ci0gICAgICAgIG1vdmUgcjEsIHNwCi0gICAgZWxzZQotICAg
ICAgICAjIFRoZSBjYWxsZWVGcmFtZSBpcyBub3Qgc3RhY2sgYWxpZ25lZCwgbW92ZSBkb3duIGJ5
IENhbGxlckZyYW1lQW5kUENTaXplIHRvIGFsaWduCi0gICAgICAgIGlmIEFSTXY3Ci0gICAgICAg
ICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgdDIKLSAgICAgICAgICAgIG1vdmUg
dDIsIHNwCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5k
UENTaXplLCBzcAotICAgICAgICBlbmQKLSAgICBlbmQKLSAgICBzbG93UGF0aEZvckNvbW1vbkNh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHBy
ZXBhcmVDYWxsKQotZW5kCi0KIAotbGxpbnRPcChvcF9jYWxsX3ZhcmFyZ3MsIE9wQ2FsbFZhcmFy
Z3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2Fs
bF92YXJhcmdzLCBzaXplLCBPcENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0
aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywg
cHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9jYWxsX3ZhcmFy
Z3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBzaXplLCBnZXQsIE9w
Q2FsbFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50
X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxf
dmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJl
cGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwp
CiBlbmQpCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdz
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFp
bF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUo
KQogICAgICMgV2UgbGllIGFuZCBwZXJmb3JtIHRoZSB0YWlsIGNhbGwgaW5zdGVhZCBvZiBwcmVw
YXJpbmcgaXQgc2luY2Ugd2UgY2FuJ3QKICAgICAjIHByZXBhcmUgdGhlIGZyYW1lIGZvciBhIGNh
bGwgb3Bjb2RlCi0gICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJncywgc2l6ZSwg
T3BUYWlsQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVf
Zm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVG
b3JUYWlsQ2FsbCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBzaXpl
LCBnZXQsIE9wVGFpbENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Ns
b3dfcGF0aF90YWlsX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JU
YWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFp
bENhbGwpCiBlbmQpCiAKIAotbGxpbnRPcChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMs
IE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkK
K2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBPcFRh
aWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIFdl
IGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0IHNp
bmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29kZQot
ICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBP
cFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6
ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwpCisgICAgZG9DYWxsVmFyYXJn
cyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHNpemUsIGdldCwgT3BUYWlsQ2FsbEZv
cndhcmRBcmd1bWVudHMsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xs
aW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJkX2FyZ3VtZW50cywgX2xsaW50X3Ns
b3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHByZXBhcmVGb3JUYWlsQ2FsbCwg
aW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJl
Rm9yU2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfY29uc3RydWN0X3ZhcmFyZ3Ms
IE9wQ29uc3RydWN0VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZG9D
YWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgc2l6ZSwgT3BDb25zdHJ1Y3RWYXJhcmdz
LCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxp
bnRfc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzLCBwcmVwYXJlRm9yUmVndWxhckNhbGwpCits
bGludE9wV2l0aE1ldGFkYXRhKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENvbnN0cnVjdFZhcmFy
Z3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIGRv
Q2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIGdldCwgT3BDb25zdHJ1Y3RW
YXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93
X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1Y3Rf
dmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJl
cGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwp
CiBlbmQpCiAKIApAQCAtMjUxMCw2ICsyNTI2LDkxIEBAIG9wKGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGludGVybmFsRnVuY3Rpb25D
YWxsVHJhbXBvbGluZShJbnRlcm5hbEZ1bmN0aW9uOjptX2Z1bmN0aW9uRm9yQ29uc3RydWN0KQog
ZW5kKQogCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExp
bmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorbWFjcm8gbGlua1Nsb3dQ
YXRoRm9yKGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uUHJvbG9ndWUoKQorICAgIGxvYWRwIEpTR2xv
YmFsT2JqZWN0OjptX3ZtW3QzXSwgdDEKKyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1l
W3QxXQorICAgIG1vdmUgdDIsIGEyCisgICAgbW92ZSB0MywgYTEKKyAgICBtb3ZlIGNmciwgYTAK
KyAgICBjQ2FsbDQoZnVuY3Rpb24pCisgICAgZnVuY3Rpb25FcGlsb2d1ZSgpCisgICAgdW50YWdS
ZXR1cm5BZGRyZXNzIHNwCisgICAgYnRweiByMSwgLmRvTm90VHJhc2gKKyAgICBwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwodDEpCisgICAgcHJlcGFyZUZvclRhaWxDYWxsKHQxLCB0Miwg
dDMsIHQ0KQorICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0NAorLmRvTm90VHJhc2g6CisgICAgam1w
IHQwLCBKU0VudHJ5UHRyVGFnCitlbmQKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2Fs
bGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmpl
Y3QKK21hY3JvIHZpcnR1YWxUaHVua0ZvcihvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVjaywg
aW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmUsIHByZXBhcmVDYWxsLCBzbG93Q2FzZSkKKyAgICBh
ZGRpIDEsIENhbGxMaW5rSW5mbzo6bV9zbG93UGF0aENvdW50W3QyXQorICAgIGlmIEpTVkFMVUU2
NAorICAgICAgICBtb3ZlIE5vdENlbGxNYXNrLCB0MQorICAgICAgICBidHFueiB0MCwgdDEsIHNs
b3dDYXNlCisgICAgZWxzZQorICAgICAgICBiaW5lcSB0MSwgQ2VsbFRhZywgc2xvd0Nhc2UKKyAg
ICBlbmQKKyAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEpTRnVuY3Rpb25UeXBlLCAubm90
SlNGdW5jdGlvbgorICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fZXhlY3V0YWJsZU9yUmFyZURhdGFb
dDBdLCB0MQorICAgIGJ0cHogdDEsIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
LCAuaXNFeGVjdXRhYmxlCisgICAgbG9hZHAgKEZ1bmN0aW9uUmFyZURhdGE6Om1fZXhlY3V0YWJs
ZSAtIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKVt0MV0sIHQxCisuaXNFeGVj
dXRhYmxlOgorICAgIGxvYWRwIG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrW3QxXSwgdDEK
KyAgICBidHB6IHQxLCBzbG93Q2FzZQorLmNhbGxDb2RlOgorICAgIHByZXBhcmVDYWxsKHQ1LCB0
MiwgdDMsIHQ0KQorICAgIGptcCB0MSwgSlNFbnRyeVB0clRhZworLm5vdEpTRnVuY3Rpb246Cisg
ICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgc2xvd0Nh
c2UKKyAgICBwcmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkKKyAgICBqbXAgaW50ZXJuYWxGdW5j
dGlvblRyYW1wb2xpbmUKK2VuZAorCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUK
KyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAor
b3AobGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgbGlua1Nsb3dQYXRo
Rm9yKF9sbGludF9saW5rX2NhbGwpCitlbmQpCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlz
IGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFs
T2JqZWN0CitvcChsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICB2
aXJ0dWFsVGh1bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjaywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKHRl
bXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KSBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAg
ICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkKK2VuZCkKKworIyA2NGJpdDp0
MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMg
Y2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1w
b2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9u
X2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQp
IGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRf
dmlydHVhbF9jYWxsKQorZW5kKQorCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUK
KyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAor
b3AobGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICB2aXJ0
dWFsVGh1bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAx
LCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQorICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwodGVtcDEpCisgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0ZW1wMSwgdGVtcDIsIHRl
bXAzLCB0ZW1wNCkKKyAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIHRlbXA0CisgICAgZW5kLCAu
c2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFs
X2NhbGwpCitlbmQpCiAKIGlmIEpJVAogICAgIG1hY3JvIGxvYWRCYXNlbGluZUpJVENvbnN0YW50
UG9vbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5jcHAKaW5kZXggYzA0ZmZkNmIwYmMzZjI2ZTE5MmYwNmYyYmJmNzRiMDY0ZGNiMjc5
YS4uOTg3NmVmNmVmNzQyYWNlZWRhZTI2OWEyYWI0NTRjNWI2MmNkNTE2YiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcApAQCAt
MTI5LDYgKzEyOSw4IEBAIHVzaW5nIFdlYkNvbmZpZzo6Z19jb25maWc7CiAKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBDYWxsTGlua0luZm87CisKIC8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8g
Q0xvb3BSZWdpc3RlciBpcyB0aGUgc3RvcmFnZSBmb3IgYW4gZW11bGF0ZWQgQ1BVIHJlZ2lzdGVy
LgogLy8gSXQgZGVmaW5lcyB0aGUgcG9saWN5IG9mIGhvdyBpbnRzIHNtYWxsZXIgdGhhbiBpbnRw
dHJfdCBhcmUgcGFja2VkIGludG8gdGhlCkBAIC0xNjYsNiArMTY4LDcgQEAgY2xhc3MgQ0xvb3BS
ZWdpc3RlciB7CiAgICAgb3BlcmF0b3IgUHJvdG9DYWxsRnJhbWUqKCkgeyByZXR1cm4gYml0d2lz
ZV9jYXN0PFByb3RvQ2FsbEZyYW1lKj4obV92YWx1ZSk7IH0KICAgICBvcGVyYXRvciBSZWdpc3Rl
ciooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UmVnaXN0ZXIqPihtX3ZhbHVlKTsgfQogICAgIG9w
ZXJhdG9yIFZNKigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxWTSo+KG1fdmFsdWUpOyB9CisgICAg
b3BlcmF0b3IgQ2FsbExpbmtJbmZvKigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxsTGlua0lu
Zm8qPihtX3ZhbHVlKTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBz
dGQ6OmVuYWJsZV9pZl90PHNpemVvZihUKSA9PSBzaXplb2YodWludHB0cl90KT4+CiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIG9wZXJhdG9yPShUIHZhbHVlKSB7IG1fdmFsdWUgPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pih2YWx1ZSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggOTAzZTVhNDViMWI2
NjgyZmQyODc4Yjk3OTQ4NTJhZWZkNjc1MWQ1ZS4uZDhiNjMwOGEzZTZmZDQ1ZjJjMzVkMGIyN2E0
NDk0Yjk4ZGE2MDM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTExOCw3ICsxMTgsOSBAQCBtYWNy
byBjQ2FsbDJWb2lkKGZ1bmN0aW9uKQogZW5kCiAKIG1hY3JvIGNDYWxsNChmdW5jdGlvbikKLSAg
ICBpZiBBUk12NyBvciBNSVBTCisgICAgaWYgQ19MT09QIG9yIENfTE9PUF9XSU4KKyAgICAgICAg
Y2xvb3BDYWxsU2xvd1BhdGg0IGZ1bmN0aW9uLCBhMCwgYTEsIGEyLCBhMworICAgIGVsc2lmIEFS
TXY3IG9yIE1JUFMKICAgICAgICAgY2FsbCBmdW5jdGlvbgogICAgIGVsc2lmIFg4NiBvciBYODZf
V0lOCiAgICAgICAgIHB1c2ggYTMKQEAgLTIxNTEsMzUgKzIxNTMsNjAgQEAgbWFjcm8gYXJyYXlQ
cm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUpCiAgICAgYmluZXEgVGhpc0FyZ3VtZW50
T2Zmc2V0ICsgVGFnT2Zmc2V0W2NmciwgdDMsIDhdLCBDZWxsVGFnLCAuZG9uZQogICAgIGxvYWRp
IFRoaXNBcmd1bWVudE9mZnNldCArIFBheWxvYWRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAg
bG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDAKLSAgICBzdG9yZWkgdDAsICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUubV9sYXN0
U2VlblN0cnVjdHVyZUlEW3Q1XQorICAgIHN0b3JlaSB0MCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCiAuZG9uZToKIGVu
ZAogCi1tYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIHNpemUs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykKLSAgICBtZXRhZGF0YSh0NSwgdDApCi0gICAgZ2V0Q2Fs
bGVlKHQwKQorIyB0NSBob2xkcyBtZXRhZGF0YS4KK21hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFt
ZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVw
YXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1
bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICBnZXRDYWxsZWUo
dDMpCiAKLSAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
Lm1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0W3Q1XSwgdDIKLSAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MCwgQ2VsbFRhZywgdDMsIC5vcENhbGxTbG93
KQotICAgIGJpbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQzLCB0MSwgdDApCisKKyAgICAjIEFsaWduZWQgdG8gSklUOjpjb21waWxlU2V0
dXBGcmFtZQogICAgIGdldEFyZ3VtZW50U3RhcnQodDMpCiAgICAgbHNoaWZ0aSAzLCB0MwogICAg
IG5lZ2kgdDMKICAgICBhZGRwIGNmciwgdDMgICMgdDMgY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBv
ZiBjZnIKLSAgICBzdG9yZWkgdDIsIENhbGxlZSArIFBheWxvYWRPZmZzZXRbdDNdCi0gICAgZ2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModDIpICAgIAotICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQorICAgIGdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKHQyKQogICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgIHN0b3JlaSBDZWxsVGFnLCBDYWxsZWUgKyBU
YWdPZmZzZXRbdDNdCisKKyAgICAjIFN0b3JlIGxvY2F0aW9uIGJpdHMgYW5kIHxjYWxsZWV8LCBh
bmQgY29uZmlndXJlIHNwLgorICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgKyBUYWdPZmZzZXRbY2ZyXQorICAgIHN0b3JlaSB0MCwgQ2FsbGVlICsgUGF5bG9hZE9mZnNl
dFt0M10KKyAgICBzdG9yZWkgdDEsIENhbGxlZSArIFRhZ09mZnNldFt0M10KICAgICBtb3ZlIHQz
LCBzcAotICAgIHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5UHRy
VGFnKQotICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0
NV0sIEpTRW50cnlQdHJUYWcpCisgICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKKwor
ICAgIGJpbmVxIHQxLCBDZWxsVGFnLCAub3BDYWxsU2xvdworICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQz
CisgICAgYnRweiB0MywgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVl
TWFzayksIC5ub3RQb2x5bW9ycGhpYworICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBu
b3QgdW50YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUg
dHJhbXBvbGluZSBzZXBhcmF0ZWx5LgorICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhh
dCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRo
ZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgorICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgam1wIC5nb1BvbHltb3JwaGljCisK
Ky5ub3RQb2x5bW9ycGhpYzoKKyAgICBicG5lcSB0MCwgdDMsIC5vcENhbGxTbG93CisgICAgcHJl
cGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgorICAgIGxvYWRwICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9y
cGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rlciwg
ZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKIAogLm9wQ2FsbFNsb3c6Ci0gICAgc2xv
d1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxl
TmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxs
KQorICAgICMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorICAgICMgdDIgaXMgQ2Fs
bExpbmtJbmZvKgorICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICBhZGRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1LCB0MiAjIENhbGxM
aW5rSW5mbyogaW4gdDIKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB0MworICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDNd
LCB0MworICAgIHByZXBhcmVTbG93Q2FsbCgpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNv
ZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZp
cnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRyVGFnKQogZW5kCiAgICAgICAg
IAotbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3Qs
IHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKK21hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBz
bG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBv
bHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHByb2xvZ3VlKQogICAgIGxsaW50T3BXaXRoTWV0
YWRhdGEob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCkBAIC0yMTg4
LDcgKzIyMTUsNyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9w
Y29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBlbmQsIG1ldGFkYXRh
KQogCiAgICAgICAgIG1hY3JvIGdldENhbGxlZShkc3QpCi0gICAgICAgICAgIGdldChtX2NhbGxl
ZSwgdDApCisgICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAgICAgICBlbmQKIAogICAg
ICAgICBtYWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTIxOTksMTAgKzIyMjYsNjggQEAg
bWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHBy
ZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0
LCBtX2FyZ2MsIGRzdCkKICAgICAgICAgZW5kCiAgICAgICAgIAotICAgICAgICBjYWxsSGVscGVy
KG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHBy
ZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1l
bnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKKyAgICAgICAgIyB0NSBob2xkcyBtZXRhZGF0YQor
ICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1f
cHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBo
aWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUs
IGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCiAgICAgZW5kKQogZW5kCiAKK21h
Y3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgZ2V0LCBvcGNvZGVTdHJ1Y3QsIHZh
bHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBm
cmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQ
b2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsKQorICAgIGNhbGxTbG93UGF0aChmcmFtZVNsb3dQ
YXRoKQorICAgIGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90
cmFtcG9saW5lKQorICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKKyAgICBpZiBKU1ZBTFVFNjQKKyAg
ICAgICAgbW92ZSByMSwgc3AKKyAgICBlbHNlCisgICAgICAgICMgVGhlIGNhbGxlZUZyYW1lIGlz
IG5vdCBzdGFjayBhbGlnbmVkLCBtb3ZlIGRvd24gYnkgQ2FsbGVyRnJhbWVBbmRQQ1NpemUgdG8g
YWxpZ24KKyAgICAgICAgaWYgQVJNdjcKKyAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1l
QW5kUENTaXplLCB0MgorICAgICAgICAgICAgbW92ZSB0Miwgc3AKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCisgICAgICAgIGVuZAor
ICAgIGVuZAorICAgIGNhbGxDYWxsU2xvd1BhdGgoCisgICAgICAgIHNsb3dQYXRoLAorICAgICAg
ICAjIFRob3NlIGFyZSByMCBhbmQgcjEKKyAgICAgICAgbWFjcm8gKHJlc3RvcmVkUENPclRocm93
LCBjYWxsZWVGcmFtZVB0cikKKyAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250
VXBkYXRlU1AKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQorICAgICAgICAg
ICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDIp
CisgICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MSwgdDApCisg
ICAgICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCisKKyAgICAgICAgICAgIGJpbmVxIHQxLCBDZWxs
VGFnLCAub3BDYWxsU2xvdworICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDMKKyAgICAgICAg
ICAgIGJ0cHogdDMsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1h
c2spLCAubm90UG9seW1vcnBoaWMKKyAgICAgICAgICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQg
ZG9lcyBub3QgdW50YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBp
biB0aGUgdHJhbXBvbGluZSBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgIyBCdXQgd2Ugc2hvdWxk
IG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxk
IGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRodW5rIHNpZGUuCisgICAgICAgICAgICBwcmVw
YXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAg
ICAgICAgICAgam1wIC5nb1BvbHltb3JwaGljCisKKyAgICAgICAgLm5vdFBvbHltb3JwaGljOgor
ICAgICAgICAgICAgYnBuZXEgdDAsIHQzLCAub3BDYWxsU2xvdworICAgICAgICAgICAgcHJlcGFy
ZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKyAgICAgICAgLmdvUG9seW1vcnBoaWM6CisgICAgICAg
ICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0
YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAgICAgaW52
b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUs
IGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKwor
ICAgICAgICAub3BDYWxsU2xvdzoKKyAgICAgICAgICAgICMgNjRiaXQ6dDAgMzJiaXQodDAsdDEp
IGlzIGNhbGxlZQorICAgICAgICAgICAgIyB0MiBpcyBDYWxsTGlua0luZm8qCisgICAgICAgICAg
ICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgICAgICAgICBhZGRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1LCB0MiAjIENhbGxMaW5rSW5m
byogaW4gdDIKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6
bV9nbG9iYWxPYmplY3RbdDNdLCB0MworICAgICAgICAgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAg
ICAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNo
LCB0NSwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgLmRvbnRVcGRhdGVTUDoKKyAgICAgICAgICAg
IGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQorICAgICAgICBlbmQp
CitlbmQKKwogbGxpbnRPcChvcF9yZXQsIE9wUmV0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQogICAgIGdldChtX3ZhbHVlLCB0
MikKQEAgLTI4NjYsNyArMjk1MSw4IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jf
b3BlbiwgT3BJdGVyYXRvck9wZW4sIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgICAg
IG1vdmUgMSwgZHN0CiAgICAgZW5kCiAKLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4s
IF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9p
dGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwg
Z290b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudElu
Y2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0
YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Ns
b3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJv
ZmlsZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFy
Q2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVn
dWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxl
ZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhp
c0NvdW50KQogCiAuZ2V0QnlJZFN0YXJ0OgogICAgIG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNo
KHZhbHVlVGFnLCB2YWx1ZVBheWxvYWQpCkBAIC0yOTI3LDcgKzMwMTMsOCBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1ZSBzbG90IGFzIGEgdG1w
IHNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4KLSAgICBjYWxsSGVscGVy
KG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBP
cEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJl
Z3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRv
cl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5l
eHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
aW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBw
cmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1l
dGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1
bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldERvbmVTdGFydDoKICAgICBtYWNybyBzdG9y
ZURvbmVBbmRKbXBUb0dldFZhbHVlKGRvbmVWYWx1ZVRhZywgZG9uZVZhbHVlUGF5bG9hZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KaW5kZXggYTkxMzE0ZmNlOWVlNDRjYTZlMGJhYzc4MmQ5YmUyZjU5YzBhODM3MC4uMzky
NWM3YzM2YzRlMzgwMDI4MzcyZmJmNmJkZjVlNzE0Yzk2NWI0MCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTE0
Myw3ICsxNDMsOSBAQCBlbmQKICMgVGhpcyBiYXJlbHkgd29ya3MuIGFyZzMgYW5kIGFyZzQgc2hv
dWxkIHByb2JhYmx5IGJlIGltbWVkaWF0ZXMuCiBtYWNybyBjQ2FsbDQoZnVuY3Rpb24pCiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQodDQsIDB4YmFkMGMwMDQpCi0gICAgaWYgWDg2XzY0
IG9yIEFSTTY0IG9yIEFSTTY0RSBvciBSSVNDVjY0CisgICAgaWYgQ19MT09QIG9yIENfTE9PUF9X
SU4KKyAgICAgICAgY2xvb3BDYWxsU2xvd1BhdGg0IGZ1bmN0aW9uLCBhMCwgYTEsIGEyLCBhMwor
ICAgIGVsc2lmIFg4Nl82NCBvciBBUk02NCBvciBBUk02NEUgb3IgUklTQ1Y2NAogICAgICAgICBj
YWxsIGZ1bmN0aW9uCiAgICAgZWxzaWYgWDg2XzY0X1dJTgogICAgICAgICAjIE9uIFdpbjY0LCBy
Y3gsIHJkeCwgcjgsIGFuZCByOSBhcmUgdXNlZCBmb3IgcGFzc2luZyB0aGUgZmlyc3QgZm91ciBw
YXJhbWV0ZXJzLgpAQCAtMzA5LDEyICszMTEsMTIgQEAgbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxs
KGVudHJ5LCBwcm90b0NhbGxGcmFtZSwgdGVtcDEsIHRlbXAyKQogICAgIGlmIENfTE9PUCBvciBD
X0xPT1BfV0lOCiAgICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50cnkKICAgICBlbHNpZiBB
Uk02NEUKLSAgICAgICAgbW92ZSBlbnRyeSwgdDMKLSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
OnZtRW50cnlUb0phdmFTY3JpcHQpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgam1wIFthMl0sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKKyAgICAgICAgbW92ZSBlbnRyeSwg
dDUKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0Nv
bmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnZtRW50cnlUb0phdmFTY3JpcHQpICogUHRy
U2l6ZSwgYTcKKyAgICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50
cnlQdHJUYWcKICAgICAgICAgZ2xvYmFsIF92bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZQog
ICAgICAgICBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmU6Ci0gICAgICAgIGNhbGwgdDMs
IEpTRW50cnlQdHJUYWcKKyAgICAgICAgY2FsbCB0NSwgSlNFbnRyeVB0clRhZwogICAgIGVsc2UK
ICAgICAgICAgY2FsbCBlbnRyeSwgSlNFbnRyeVB0clRhZwogICAgIGVuZApAQCAtMjM2MCw0MSAr
MjM2Miw1OCBAQCBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkK
ICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgYnRxbnog
dDAsIG5vdENlbGxNYXNrLCAuZG9uZQogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0
MF0sIHQzCi0gICAgc3RvcmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExp
bmtJbmZvLm1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9y
ZWkgdDMsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2Vl
blN0cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBlbmQKIAotbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVO
YW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFs
UmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxl
ZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAg
bWV0YWRhdGEodDUsIHQwKQotICAgIGdldENhbGxlZSh0MCkKKyMgdDUgaG9sZHMgbWV0YWRhdGEu
CittYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZh
bHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIGludm9rZUNh
bGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwg
bWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpCisgICAgZ2V0Q2FsbGVlKHQxKQogCi0gICAgbG9hZHAgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRo
TGlua0JpdFt0NV0sIHQyCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMp
Ci0gICAgYnFuZXEgdDMsIHQyLCAub3BDYWxsU2xvdworICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDEsIHQwKQogCisgICAgIyBBbGlnbmVkIHRvIEpJVDo6Y29tcGlsZVNldHVwRnJh
bWUKICAgICBnZXRBcmd1bWVudFN0YXJ0KHQzKQogICAgIGxzaGlmdGkgMywgdDMKICAgICBuZWdw
IHQzCiAgICAgYWRkcCBjZnIsIHQzCi0gICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgZ2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModDIpCi0gICAgc3RvcmVQQygpCiAgICAgc3RvcmVp
IHQyLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbdDNdCisKKyAg
ICAjIFN0b3JlIGxvY2F0aW9uIGJpdHMgYW5kIHxjYWxsZWV8LCBhbmQgY29uZmlndXJlIHNwLgor
ICAgIHN0b3JlUEMoKQorICAgIHN0b3JlcSB0MCwgQ2FsbGVlW3QzXQogICAgIG1vdmUgdDMsIHNw
Ci0gICAgaWYgQVJNNjRFCi0gICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQwCi0gICAgICAgIHByZXBh
cmVDYWxsKHQwLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgbG9hZHAg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFy
Z2V0W3Q1XSwgdDAKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgdDAsIEpTRW50cnlQdHJUYWcpCi0gICAgZWxzZQotICAgICAgICBwcmVwYXJlQ2FsbCgl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJn
ZXRbdDVdLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgY2FsbFRhcmdl
dEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFt
ZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNFbnRyeVB0clRhZykK
LSAgICBlbmQKLS5vcENhbGxTbG93OgotICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rlciwg
ZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLWVuZAorICAgIGFkZHAgQ2FsbGVyRnJh
bWVBbmRQQ1NpemUsIHNwCisKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
Y2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgIGJ0cHogdDEsIChj
b25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1v
cnBoaWMKKyAgICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBh
ZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJh
dGVseS4KKyAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGlj
IGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1
bmsgc2lkZS4KKyAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBK
U0VudHJ5UHRyVGFnKQorICAgIGptcCAuZ29Qb2x5bW9ycGhpYwogCi1tYWNybyBjb21tb25DYWxs
T3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xv
Z3VlKQorLm5vdFBvbHltb3JwaGljOgorICAgIGJxbmVxIHQwLCB0MSwgLm9wQ2FsbFNsb3cKKyAg
ICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKKworLmdvUG9seW1vcnBoaWM6CisgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21v
bm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBpbnZva2VDYWxsKG9wY29kZU5h
bWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lz
dGVyLCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisub3BDYWxsU2xvdzoKKyAg
ICAjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAjIHQyIGlzIENhbGxMaW5r
SW5mbyoKKyAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgYWRkcCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0lu
Zm8qIGluIHQyCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5r
SW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgdDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMK
KyAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFt
ZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFs
UmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKK2VuZAorCittYWNybyBjb21t
b25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGws
IGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1
ZSkKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFk
YXRhKHQ1LCB0MCkKIApAQCAtMjQwMyw3ICsyNDIyLDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9w
Y29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkK
ICAgICAgICAgZW5kLCBtZXRhZGF0YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQot
ICAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwg
ZHN0KQogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkK
QEAgLTI0MTQsMTAgKzI0MzMsNjcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNs
b3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgICAg
IGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIGRzdCkKICAgICAgICAgZW5kCiAKLSAg
ICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3By
b2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRD
YWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCisgICAgICAgICMgdDUg
aG9sZHMgbWV0YWRhdGEKKyAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwg
b3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwg
cHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAg
IGVuZCkKIGVuZAogCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZv
a2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCkKKyAgICBjYWxsU2xv
d1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3df
ZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAjIGNhbGxlZUZyYW1lIGluIHIxCisgICAg
aWYgSlNWQUxVRTY0CisgICAgICAgIG1vdmUgcjEsIHNwCisgICAgZWxzZQorICAgICAgICAjIFRo
ZSBjYWxsZWVGcmFtZSBpcyBub3Qgc3RhY2sgYWxpZ25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZy
YW1lQW5kUENTaXplIHRvIGFsaWduCisgICAgICAgIGlmIEFSTXY3CisgICAgICAgICAgICBzdWJw
IHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgdDIKKyAgICAgICAgICAgIG1vdmUgdDIsIHNwCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBz
cAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBjYWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBz
bG93UGF0aCwKKyAgICAgICAgIyBUaG9zZSBhcmUgcjAgYW5kIHIxCisgICAgICAgIG1hY3JvIChy
ZXN0b3JlZFBDT3JUaHJvdywgY2FsbGVlRnJhbWVQdHIpCisgICAgICAgICAgICBidHB6IGNhbGxl
ZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQCisgICAgICAgICAgICByZXN0b3JlU3RhdGVBZnRlckND
YWxsKCkKKyAgICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCisgICAgICAgICAgICBn
ZXQobV9jYWxsZWUsIHQxKQorICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MSwgdDApCisgICAgICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCisKKyAgICAgICAgICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNv
ZGVCbG9ja1t0NV0sIHQxCisgICAgICAgICAgICBidHB6IHQxLCAoY29uc3RleHByIENhbGxMaW5r
SW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAgICAgICAg
ICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBT
byB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAg
ICAgICAgICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMg
Y2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVu
ayBzaWRlLgorICAgICAgICAgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisg
ICAgICAgIC5ub3RQb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGJxbmVxIHQwLCB0MSwgLm9wQ2Fs
bFNsb3cKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisgICAgICAg
IC5nb1BvbHltb3JwaGljOgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9u
W3Q1XSwgdDUKKyAgICAgICAgICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0
NSwgdDEsIEpTRW50cnlQdHJUYWcpCisKKyAgICAgICAgLm9wQ2FsbFNsb3c6CisgICAgICAgICAg
ICAjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMg
Q2FsbExpbmtJbmZvKgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVj
dAorICAgICAgICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGlu
YXRpb25bdDVdLCB0NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAg
ICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAg
ICAgIHByZXBhcmVTbG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9w
Y29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5k
b250VXBkYXRlU1A6CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRo
X3RyYW1wb2xpbmUKKyAgICAgICAgZW5kKQorZW5kCisKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxv
Z3VlKCkKICAgICBnZXQobV92YWx1ZSwgdDIpCkBAIC0zMDQ2LDggKzMxMjIsOCBAQCBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRlcmF0b3JPcGVuLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRzdAogICAgIGVuZAogCi0KLSAgICBj
YWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Bl
bl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0
YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJ
bmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIo
b3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwsIE9w
SXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZvclJl
Z3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVn
dWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hl
Y2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3Rh
cnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0QnlJZFN0YXJ0OgogICAg
IG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNoKHZhbHVlKQpAQCAtMzEwNCw3ICszMTgwLDggQEAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xv
dCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCi0gICAg
Y2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25l
eHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0
YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJ
bmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIo
b3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9w
SXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVn
dWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1
bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVj
a3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFy
dCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CiAgICAg
bWFjcm8gc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCmluZGV4IGNhZDIxNWFlMzQzY2M4NmIzYTEwYTVm
YWY2NjI4NDI0YTljMDJmMjguLmM3MDE2NjRhYjJiZmZmMjA3ZDEyZTVlMjIyZjk2NGNmYTkxMmEy
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJi
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCkBAIC01NzIs
NiArNTcyLDE0IEBAIGRlZiBjbG9vcEVtaXRDYWxsU2xvd1BhdGhWb2lkKG9wZXJhbmRzKQogICAg
ICRhc20ucHV0YyAiI3tvcGVyYW5kc1swXS5jTGFiZWx9KCN7b3BlcmFuZHNbMV0uY2xEdW1wfSwg
I3tvcGVyYW5kc1syXS5jbER1bXB9KTsiCiBlbmQKIAorZGVmIGNsb29wRW1pdENhbGxTbG93UGF0
aDQob3BlcmFuZHMpCisgICAgJGFzbS5wdXRjICJ7IgorICAgICRhc20ucHV0YyAiICAgIGNsb29w
U3RhY2suc2V0Q3VycmVudFN0YWNrUG9pbnRlcihzcC52cCgpKTsiCisgICAgJGFzbS5wdXRjICIg
ICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9ICN7b3BlcmFuZHNbMF0uY0xhYmVsfSgje29w
ZXJhbmRzWzFdLmNsRHVtcH0sICN7b3BlcmFuZHNbMl0uY2xEdW1wfSwgI3tvcGVyYW5kc1szXS5j
bER1bXB9LCAje29wZXJhbmRzWzRdLmNsRHVtcH0pOyIKKyAgICAkYXNtLnB1dGMgIiAgICBkZWNv
ZGVSZXN1bHQocmVzdWx0LCB0MCwgdDEpOyIKKyAgICAkYXNtLnB1dGMgIn0iCitlbmQKKwogY2xh
c3MgSW5zdHJ1Y3Rpb24KICAgICBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgY2FzZSBvcGNvZGUK
QEAgLTExNzUsNiArMTE4Myw5IEBAIGRlZiBsb3dlckNfTE9PUAogICAgICAgICB3aGVuICJjbG9v
cENhbGxTbG93UGF0aFZvaWQiCiAgICAgICAgICAgICBjbG9vcEVtaXRDYWxsU2xvd1BhdGhWb2lk
KG9wZXJhbmRzKQogCisgICAgICAgIHdoZW4gImNsb29wQ2FsbFNsb3dQYXRoNCIKKyAgICAgICAg
ICAgIGNsb29wRW1pdENhbGxTbG93UGF0aDQob3BlcmFuZHMpCisKICAgICAgICAgIyBGb3IgZGVi
dWdnaW5nIG9ubHkuIFRoaXMgaXMgdXNlZCB0byBpbnNlcnQgaW5zdHJ1bWVudGF0aW9uIGludG8g
dGhlCiAgICAgICAgICMgZ2VuZXJhdGVkIExMSW50QXNzZW1ibHkuaCBkdXJpbmcgbGxpbnQgZGV2
ZWxvcG1lbnQgb25seS4gRG8gbm90IHVzZQogICAgICAgICAjIGZvciBwcm9kdWN0aW9uIGNvZGUu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlv
bnMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIK
aW5kZXggOWNiYTVkNjhmM2NhZDMxY2ZhMmQ5NmVhNGM5YmJhOGRmZTlkYTliMi4uYzAwYjUxNmIz
M2VjNWFkMTI5ZDU2YzNmZmQyM2U5ZjVlYzIwNWY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgpAQCAtNDU5LDYgKzQ1OSw3IEBACiAg
ICAgICJjbG9vcENhbGxOYXRpdmUiLCAgICAgICAgICMgb3BlcmFuZHM6IGNhbGxlZQogICAgICAi
Y2xvb3BDYWxsU2xvd1BhdGgiLCAgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBjdXJyZW50
RnJhbWUsIGN1cnJlbnRQQwogICAgICAiY2xvb3BDYWxsU2xvd1BhdGhWb2lkIiwgICAjIG9wZXJh
bmRzOiBjYWxsVGFyZ2V0LCBjdXJyZW50RnJhbWUsIGN1cnJlbnRQQworICAgICAiY2xvb3BDYWxs
U2xvd1BhdGg0IiwgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBhMCwgYTEsIGEyLCBhMwog
CiAgICAgICMgRm9yIGRlYnVnZ2luZyBvbmx5OgogICAgICAjIFRha2VzIG5vIG9wZXJhbmRzIGJ1
dCBzaW1wbHkgZW1pdHMgd2hhdGV2ZXIgZm9sbG93cyBpbiAvLyBjb21tZW50cyBhcwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKaW5kZXggOTU4MTA1
ZDMyNjZkZGZmODViZTVkNzZkODdjZGU1Y2IzMzEzMTRjMy4uNDhmZDkyZjhiNmE4ZWQyOTQ0YTcy
NDhiMTU3ZDJhZjcyNzczYzViNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlQmFzZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIGlubGluZSBib29sIGlzQ2FsbChD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAKIGNsYXNzIEV4ZWN1dGFibGVCYXNlIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7CiAKIHByb3RlY3Rl
ZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhl
Y3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlLmgKaW5kZXggNWFhNTQyYTEyZjI3MWRiZGZmMDIwYjkxMGVkYmNjOWExMWM4MzY1Ni4uMmU5
YjUwNjYwNWNmYzZmMWM1ZWRkMjJkYWQ5NzNlNzNlYWE4ZjYxNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTI2LDYgKzI2
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZS5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRhYmxl
LmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaAppbmRleCBmNmEwNWIwNjVlMzJkOGFlY2Q1NjdiZjZh
Yjc0YWFlNjM4OTk3Nzc4Li5lNDc3OTJiODc2NGU5MWQ1MDYxMGU0Y2RkYWUzMjMxYzE0NTllMjA0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCkBAIC0zMyw2ICszMyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHYoaml0Q2FnZVB0ciwgTm9QdHJUYWcpIFwKICAgICB2KHRhaWxD
YWxsSlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KHRhaWxDYWxsSlNFbnRyeVNsb3dQ
YXRoUHRyVGFnLCBOb1B0clRhZykgXAorICAgIHYodGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5
UHRyVGFnLCBOb1B0clRhZykgXAogICAgIHYobG9vcE9TUkVudHJ5LCBOb1B0clRhZykgXAogICAg
IHYoZW50cnlPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KHdhc21PU1JFbnRyeSwgTm9QdHJU
YWcpIFwKQEAgLTQ2LDIwICs0NywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBKU0Nf
SlNfR0FURV9PUENPREVTKHYpIFwKICAgICB2KG9wX2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKLSAg
ICB2KG9wX3RhaWxfY2FsbCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY29uc3RydWN0LCBK
U0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9pdGVyYXRvcl9uZXh0LCBKU0VudHJ5UHRyVGFnKSBc
CiAgICAgdihvcF9pdGVyYXRvcl9vcGVuLCBKU0VudHJ5UHRyVGFnKSBcCi0gICAgdihvcF9jYWxs
X3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX3Nsb3cs
IEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3Nsb3csIEpTRW50
cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlT
bG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRy
eVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNf
c2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jb25zdHJ1Y3RfdmFyYXJn
c19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfdmFyYXJncywg
SlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3MsIEpTRW50cnlQdHJU
YWcpIFwKKyAgICB2KG9wX2NhbGxfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfdGFp
bF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF9zbG93LCBK
U0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9uZXh0X3Nsb3csIEpTRW50cnlQdHJU
YWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAg
IHYob3BfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxf
Y2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50c19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1
Y3RfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9jYWxsX2V2YWxfc2xv
dywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9pdGVyYXRvcl9uZXh0X3Nsb3cs
IEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3Jfb3Blbl9zbG93LCBK
U0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDljZjVmZWEwMTk4NDlkYjZlNjYwOTEw
YmI5NDUxY2QyN2MyNWZiYzUuLmVjNDgyMmY1YTkwM2Q0ZmI4NWNiNDg0MWE0Y2Q2OGYwYzEwYmZi
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEzOCw2ICsxMzgsNyBA
QAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5o
IgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50RXhjZXB0aW9ucy5oIgog
I2luY2x1ZGUgIk1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCkBA
IC05MTAsNiArOTExLDQxIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBW
TTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kCiAgICAgcmV0dXJuIExM
SW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2Nv
bnN0cnVjdF90cmFtcG9saW5lKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IFZNOjpnZXRDVElMaW5rQ2FsbCgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiBnZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYK
KyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfbGlua19j
YWxsX3RyYW1wb2xpbmUpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gVk06OmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpCit7CisjaWYgRU5B
QkxFKEpJVCkKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiBnZXRD
VElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikudGVtcGxhdGUg
cmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyNlbmRpZgorICAgIHJldHVybiBMTEludDo6Y2Fs
bFRvVGhyb3coKnRoaXMpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Cit9CisK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gVk06OmdldENUSVZp
cnR1YWxDYWxsKENhbGxNb2RlIGNhbGxNb2RlKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYg
KE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKCp0aGlz
LCBjYWxsTW9kZSk7CisjZW5kaWYKKyAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7CisgICAgY2FzZSBD
YWxsTW9kZTo6UmVndWxhcjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSk7CisgICAgY2Fz
ZSBDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lKTsKKyAg
ICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBv
bGluZSk7CisgICAgfQorICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworfQorCiBWTTo6Q2xpZW50
RGF0YTo6fkNsaWVudERhdGEoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5k
ZXggOWVmMzgyYzYwZWU4MzRmY2JiMWQ5MDgxYzc4MThmZDc4NjdmYTQwOC4uM2FiZjcxMWE2NTUy
YmU0YjMxYWZlNDdlMDU5ZjMzMWUwODk5MTkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCkBAIC0xMDYsNiArMTA2LDggQEAgY2xhc3MgQmFzaWNCbG9ja0xvY2F0aW9uOwogY2xhc3Mg
QnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNs
YXNzIENhbGxGcmFtZTsKK2NsYXNzIENhbGxMaW5rSW5mbzsKK2VudW0gY2xhc3MgQ2FsbE1vZGU7
CiBzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2RlQmxvY2s7CiBj
bGFzcyBDb2RlQ2FjaGU7CkBAIC05MDIsNiArOTA0LDkgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+IHsK
ICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRCb3VuZEZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9u
LCBib29sIGNhbkNvbnN0cnVjdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdl
dENUSUxpbmtDYWxsKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+
IGdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gZ2V0Q1RJVmlydHVhbENhbGwoQ2FsbE1v
ZGUpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBleGNlcHRpb25PZmZzZXQoKQogICAgIHsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjQz
ZmQ3NTllYjM3NTkwNTQ3YTM4ZGU4ZWMyMjE2YzgwMmIwMmFiNi4uMWE5NDQ4MmZmMmM2OTVmODU3
MDk3NjFmM2I2MzJjN2IyMGYwM2E5YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMS0xMS0xMiAgWXVzdWtl
IFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFVzZSBDYWxsTGlu
a0luZm8gaW4gTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1w
cm94eS5qczoKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNl
Y3Rpb24uanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci52bS5p
c1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNt
LmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudm0uaXNXYXNt
U3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQ
cm9maWxlci5qczoKKyAgICAgICAgKGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2UpOgorICAgICAgICAo
cnVuVGVzdCk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qczoK
KwogMjAyMS0xMS0xMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAg
ICAgICBJbmxpbmUgUmVnRXhwLnRlc3QgSklUIGNvZGUgaW4gREZHIGFuZCBGVEwKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1v
Zi1wcm94eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1i
ZS1hd2FyZS1vZi1wcm94eS5qcwppbmRleCA1MGNhZWVkMTE0ODQyOWZkMWI1Y2UwYjBmZWFlNmJk
ZGRlNjcxMGI4Li45NGRhYjQ2ZDJkNzE4NGYzNWQ0M2UyZGI0YTJkZDU2NDE5OGJlZmY1IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdh
cmUtb2YtcHJveHkuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5l
ZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bkRlZmF1
bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUgLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0t
dXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIsICItLXRo
cmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
cldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcD0xMDAi
LCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0
aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29uPTEw
MDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQorLy9AIHJ1bkRl
ZmF1bHQoIi0tdmFsaWRhdGVPcHRpb25zPXRydWUiLCAiLS11c2VDb25jdXJyZW50SklUPWZhbHNl
IiwgIi0tdXNlQ29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIs
ICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlcldhcm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1V
cD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xkRm9y
RlRMT3B0aW1pemVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVT
b29uPTEwMDAiLCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQogCiBm
dW5jdGlvbiBtYWluKCkgewogICAgIGxldCB2MTYyOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMgYi9KU1Rlc3RzL3N0cmVz
cy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwppbmRleCA2ODlhMDA1YWI1
NTVhMWZjNjAxYTU0ZTRlYmY5NGU5OWE2NjhmNzdlLi41YzIyMGZkNzZjZGM1YzQwZTU5Y2M2NmU1
NzM0MmM3MmQ4YzdmM2FhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9m
aWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1w
cm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwpAQCAtNjksNSArNjksNSBAQAogICAgIHZhciB3
YXNtRW50cnkgPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMu
X3BhcnJvdCgxKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIo
dW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9u
W19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9u
W19wYXJyb3RdIiwgIndhc20tc3R1YiIsICIyNCIsICJ3YXNtRW50cnkiXSk7CisgICAgcnVuVGVz
dCh3YXNtRW50cnksIFsiX3NpbGx5IiwgIih1bmtub3duKSIsICI8Pz4ud2FzbS1mdW5jdGlvbltf
ZWdnc10iLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltf
c3BhbV0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF0iLCAiKHVua25vd24pIiwgIndhc21F
bnRyeSJdKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
LXdhc20uanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCmluZGV4
IGNkMjFmMjg4YzE0OGE0Yjc0MDViZjg2OGRlZjliNTQ1NzM0MDUwNDUuLjA2ZGYwMTI0OTU5Njll
Mjg0MjE4Nzc4NjkwMTM1YmYwOTAxMGVjNmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3Nh
bXBsaW5nLXByb2ZpbGVyLXdhc20uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJv
ZmlsZXItd2FzbS5qcwpAQCAtOCw1ICs4LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5ID0gZnVuY3Rp
b24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmxvb3AoMTAwMDAwMDApOwog
ICAgIH07Ci0gICAgcnVuVGVzdCh3YXNtRW50cnksIFsiPD8+Lndhc20tZnVuY3Rpb25bMF0iLCAi
d2FzbS1zdHViIiwgIjAiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBb
Ijw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnkiXSk7CiB9CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2Zp
bGVyLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxl
ci5qcwppbmRleCA5NjQyZGRjN2MxZTZmMDZlM2IxMzI3OWMwZTRhMDI1YjU0ZGNhYmYxLi4xYjky
ZTk0ODU0YWY2M2Y2N2QwOGY1NDg4N2M1MjE3OTE0ZWUyYmY1IDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCisrKyBiL0pTVGVz
dHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMKQEAgLTcwLDEx
ICs3MCwxMyBAQCBmdW5jdGlvbiBjaGVjayhub2RlKSB7CiAgICAgCiAgICAgbGV0IG5vZGUgPSB0
cmVlOwogICAgIGZvciAobGV0IGkgPSBzdGFja1RyYWNlLmxlbmd0aDsgaS0tOyApIHsKKyAgICAg
ICAgbGV0IHByZXYgPSBub2RlOwogICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJlbltzdGFja1Ry
YWNlW2ldXTsKICAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICBpZiAoVkVSQk9TRSkg
ewogICAgICAgICAgICAgICAgIHByaW50KCJmYWlsaW5nIG9uICIgKyBpICsgIiA6ICIgKyBzdGFj
a1RyYWNlW2ldKTsKICAgICAgICAgICAgICAgICBwcmludChKU09OLnN0cmluZ2lmeSh0cmVlKSk7
CisgICAgICAgICAgICAgICAgcHJpbnQoT2JqZWN0LmtleXMocHJldi5jaGlsZHJlbikpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMDgs
NyArMTEwLDcgQEAgZnVuY3Rpb24gcnVuVGVzdChmdW5jLCBzdGFja1RyYWNlT3JTdHJpbmcpIHsK
ICAgICAgICAgfQogICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCB0aW1lVG9G
YWlsKTsKICAgICBwcmludChKU09OLnN0cmluZ2lmeShyb290LCB1bmRlZmluZWQsIDIpKTsKLSAg
ICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2UsIHRydWUsIHRydWUpOwor
ICAgIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwgc3RhY2tUcmFjZU9yU3RyaW5nLCB0cnVl
LCB0cnVlKTsKICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGFjayB0cmFjZSIpOwogfQogCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMgYi9K
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKaW5kZXggNjgwNWU2ODlm
NWM4NzllMmNhNTA5Yzg4ZDNlN2IzNzZkZTA5ZmFhYS4uMzNjODZiZjFjZGU5YThkYWIxMThlMGU0
Y2IwYmFjZDU5Yjc0OTFlOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3Rz
L25hbWVTZWN0aW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2Vj
dGlvbi5qcwpAQCAtNjksNCArNjksNCBAQAogYXNzZXJ0LmVxKHN0YWNrdHJhY2VbM10sICI8Pz4u
d2FzbS1mdW5jdGlvbltfYmFjb25dQFt3YXNtIGNvZGVdIik7CiBhc3NlcnQuZXEoc3RhY2t0cmFj
ZVs0XSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVx
KHN0YWNrdHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XUBbd2FzbSBjb2RlXSIp
OwotYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW3dhc20gY29kZV0iKTsgLy8g
d2FzbSBlbnRyeQorYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW25hdGl2ZSBj
b2RlXSIpOyAvLyB3YXNtIGVudHJ5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444093</attachid>
            <date>2021-11-12 13:10:12 -0800</date>
            <delta_ts>2021-11-12 13:22:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211112131011.patch</filename>
            <type>text/plain</type>
            <size>411911</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDVkZDgyYWRiMWUzNWI4NmIyZTdmMzk1ZTI4ZTMzNmE5YTk0MWE5Li5mMGRmYWUxYWY1YWNiNDEw
ZTgzN2Q5YWZiOTU2YTA2NWNlYWI2NDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzkgQEAKKzIwMjEtMTEtMTIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludGVncmF0
ZXMgbm9ybWFsIENhbGxMaW5rSW5mbyBpbnRvIExMSW50IGFuZCByZW1vdmUgYWRob2MgTExJbnRD
YWxsTGlua0luZm8uCisgICAgICAgIFNvIHRoYXQgd2UgY2FuIHNpbXBsaWZ5IG91ciBJQyBzb2Z0
d2FyZSBzdGFjaywgYW5kIHVuaWZ5aW5nIGNhbGwgSUMgbWVjaGFuaXNtIGludG8gb25lIENhbGxM
aW5rSW5mby4KKworICAgICAgICAxLiBMTEludCBjYW4gZnVsbHkgdXNlIG91ciBwb2x5bW9ycGhp
YyBjYWxsIElDLCBhbmQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gcmVzZXQgY2FsbCBJQyB3aGVuCisg
ICAgICAgICAgIHRpZXJpbmcgdXAgZnJvbSBMTEludCB0byBCYXNlbGluZSBKSVQgc2luY2UgYm90
aCBub3cgdXNlcyB0aGUgc2FtZSBDYWxsTGlua0luZm8gZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAg
ICAgIERGRyBhbmQgRlRMIGNhbiBhbHNvIHJldHJpZXZlIGNhbGwgaW5mb3JtYXRpb24gZnJvbSB0
aGlzIENhbGxMaW5rSW5mby4KKyAgICAgICAgMi4gTExJbnQgdmFyYXJncyBjYWxscyBnZXQgdGhl
IHNhbWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIEJhc2VsaW5lLiBQcmV2aW91c2x5IGl0IGRv
ZXMgbm90IGhhdmUKKyAgICAgICAgICAgY2FsbCBJQy4KKyAgICAgICAgMy4gV2hlbiBKSVQgaXMg
ZGlzYWJsZWQsIHdlIGRpc2FibGUgcG9seW1vcnBoaWMgY2FsbCBJQyBzaW5jZSBpdCByZXF1aXJl
cyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSBv
bmx5IHVzZSBtb25vbW9ycGhpYyBvbmUsIHdoaWNoIGlzIHRoZSBzYW1lIHRvIHRoZSBvbGQgTExJ
bnRDYWxsTGlua0luZm8uCisgICAgICAgIDQuIENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uIGlz
IHNldCB1cCBvbmx5IGFmdGVyIEJhc2VsaW5lIEpJVC4gV2UgYWRqdXN0IGNhbGwgSUMgY29kZSBz
byB0aGF0CisgICAgICAgICAgIHdlIG5vIGxvbmdlciByZWx5IG9uIGRvbmVMb2NhdGlvbiB3aGVu
IHVzaW5nIERhdGFJQy4gVGhpcyBhbGxvd3MgdXMgdG8gc21vb3RobHkgdGllcmluZyB1cAorICAg
ICAgICAgICBmcm9tIExMSW50IHRvIEJhc2VsaW5lIEpJVCB3aGlsZSB1c2luZyB0aGUgc2FtZSBD
YWxsTGlua0luZm8uCisgICAgICAgICAgIFdlIHNldCB1cCBkb25lTG9jYXRpb24gaW4gQmFzZWxp
bmUgSklUIGp1c3QgYmVjYXVzZSBERkcgT1NSIGV4aXQgcmVxdWlyZXMgd2hlbiBleGl0aW5nIHRv
CisgICAgICAgICAgIEJhc2VsaW5lIEpJVCBjb2RlLgorICAgICAgICA1LiBXZSByZW1vdmUgQ2Fs
bExpbmtJbmZvIGZyb20gSklUIGNvbnN0YW50IHBvb2wsIGFuZCB3ZSBzdG9yZSBDYWxsTGlua0lu
Zm8gaW4gbWV0YWRhdGEgc28gdGhhdAorICAgICAgICAgICBMTEludCBhbmQgQmFzZWxpbmUgSklU
IHF1aWNrbHkgYWNjZXNzIHRvIHRoYXQgYW5kIGtlZXBpbmcgdW5saW5rZWQgQmFzZWxpbmUgSklU
IHdvcmtpbmcuCisgICAgICAgIDYuIFdlIGltcGxlbWVudCBMTEludCB2ZXJzaW9uIG9mIGNhbGwg
SUMgdGh1bmtzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiBKSVQgaXMgZGlzYWJs
ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlu
a0J1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OnNob3VsZER1bXBEaXNhc3NlbWJseUZvcik6IERl
bGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1l
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6
Y2FsbExpbmtJbmZvRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNsZWFyU3R1Yik6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp2aXNpdFdl
YWspOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjppbml0aWFsaXplRGF0YUlDKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
cmV2ZXJ0Q2FsbFRvU3R1Yik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aXNMaW5rZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnN0dWIgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpmb3JFYWNoRGVwZW5kZW50Q2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0U2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyU2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGcm9tTExJbnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3Rh
dHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0
dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFs
aXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5k
ZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVBy
ZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9y
RWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL09wY29k
ZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2guY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcC4KKyAgICAgICAgKEpTQzo6bGlua1Nsb3dQ
YXRoVG8pOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAgIChKU0M6OndlYkFz
c2VtYmx5T3duZXIpOgorICAgICAgICAoSlNDOjpsaW5rTW9ub21vcnBoaWNDYWxsKToKKyAgICAg
ICAgKEpTQzo6cmV2ZXJ0Q2FsbCk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAg
ICAoSlNDOjpqc1RvV2FzbUlDQ29kZVB0cik6CisgICAgICAgIChKU0M6OmxpbmtWaXJ0dWFsRm9y
KToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUmVwYXRjaC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmguCisgICAgICAgICogYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxGb3JXaXRoRnVuY3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFs
bG9jYXRlU2hhcmVkUHJvZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRW
aXJ0dWFsQ2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAqIGppdC9CYXNlbGluZUpJVENvZGUuaDoKKyAgICAgICAgKiBqaXQv
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
RGF0YTo6Y3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwpOgorICAgICAgICAqIGppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmFkZFVubGlua2VkQ2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpyZXR1
cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpvcF9y
ZXRfaGFuZGxlckdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAg
ICAoSlNDOjpoYW5kbGVIb3N0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxG
b3JXaXRoRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwOgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3IpOgorICAgICAgICAoSlNDOjp2aXJ0
dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dmly
dHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1
YWxUaHVua0ZvckNvbnN0cnVjdENhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dl
bmVyYXRvcnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfbGlua19jYWxsKToKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmxsaW50X3ZpcnR1YWxfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVI
b3N0Q2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAoSlND
OjpMTEludDo6dmFyYXJnc1NldHVwKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1df
UEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNvbW1vbkNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmdlbmVyaWNDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9M
TEludFNsb3dQYXRocy5oOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmNyZWF0ZUpTR2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmNyZWF0ZVRhaWxDYWxsR2F0ZSk6CisgICAgICAgIChKU0M6OkxMSW50OjpyZXR1cm5Mb2NhdGlv
blRodW5rKToKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5oOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpDTG9vcFJlZ2lzdGVyOjpvcGVyYXRvciBDYWxsTGlu
a0luZm8qKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2Zm
bGluZWFzbS9jbG9vcC5yYjoKKyAgICAgICAgKiBvZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYjoK
KyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGVCYXNlLmg6CisgICAgICAgICogcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0dhdGUuaDoKKyAgICAgICAg
KiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSUxpbmtDYWxsKToKKyAg
ICAgICAgKEpTQzo6Vk06OmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCk6Cisg
ICAgICAgIChKU0M6OlZNOjpnZXRDVElWaXJ0dWFsQ2FsbCk6CisgICAgICAgICogcnVudGltZS9W
TS5oOgorCiAyMDIxLTExLTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgVk06OndyaXRlQmFycmllcigpIGFuZCBWTTo6bXV0YXRvckZlbmNlKCkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjNGE1YzgyNzdjYTc3MDFkODQ5ZWZm
NjQ2N2JkODg3OTU5MDAwOC4uY2M0MWZjMDNkMGEwODZjYzc3Y2U0ZTdkMDAyZGUxN2M4NjQzMjAx
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNjU5LDcgKzY1OSw2IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNv
ZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgKICAgICBieXRlY29kZS9JdGVy
YXRpb25Nb2RlTWV0YWRhdGEuaAogICAgIGJ5dGVjb2RlL0p1bXBUYWJsZS5oCi0gICAgYnl0ZWNv
ZGUvTExJbnRDYWxsTGlua0luZm8uaAogICAgIGJ5dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCiAgICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaAogICAgIGJ5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA4OWM5YzE3NGJiMjIzYjM2YzM5NmJhZmM0NmZlMTE2NmE2ODIw
ZjQzLi4zMTViNGYwZjk2ZTQxNzM3ZjM3YjAxMTlmNzBjNmI2OTk3MTQ4OGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ3LDcgKzE0Nyw2IEBACiAJCTBGMENBRUZDMUVDNERB
NkIwMDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDQUVGQTFFQzREQTYyMDA5NzBEMTIgLyog
SlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMENBRUZGMUVDNERBODgwMDk3MEQxMiAvKiBIZWFwRmluYWxp
emVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRD
MjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExp
bmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEwRjFBMzFDNDIwQkYw
MDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjEwRjFBMjFDNDIwQkYwMDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggKi87
IH07CiAJCTBGMTJERTEwMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEyREUwRTE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdD
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzNkQ0
QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODYsNyArMTg1LDYgQEAKIAkJMEYyNEU1NDQxN0VB
OUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NEQx
N0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0
OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBh
dGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0
RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovOyB9OwogCQkwRjI0RTU1MjE3RUUy
NzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcg
LyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGlu
ZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2
MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZD
MzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmggKi87IH07CkBAIC0xODkyLDYgKzE4OTAsNyBAQAogCQlFMzNGNTA4NzFCODQ0OUVGMDA0
MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzM0Y1MDg2MUI4NDQ5RUYwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovOyB9OwogCQlFMzQwMEVD
MTIyQTFDQzdCMDA5REVENTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0MDBFQzAyMkExQ0M3ODAw
OURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMuaCAqLzsgfTsKIAkJRTM0OUE3ODEy
NDkxRjE2MTAwMUJBMzM2IC8qIERGR0NvZGVPcmlnaW5Qb29sLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzQ5QTc4MDI0OTFGMTVBMDAxQkEzMzYgLyog
REZHQ29kZU9yaWdpblBvb2wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFMzREMUFFNTI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEQxQUU0
MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oICovOyB9OwogCQlFMzRFNjU3NTIw
NjY4RUFBMDBGQjgxQUMgLyogUGFyc2VIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRFNjU3MzIwNjY4RThEMDBGQjgxQUMgLyogUGFyc2VIYXNo
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM0
RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0RURCRjYxREI1RkZDMTAwREM4N0E1IC8q
IEZyYW1lVHJhY2Vycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUUzNEY5MzBFMjMyMkQ4ODIwMDJCOERCNCAvKiBKU0dlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0RjkzMEMyMzIyRDg4
MTAwMkI4REI0IC8qIEpTR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MDYsNiArMTkwNSw3IEBACiAJCUUzNUEwQjlEMjIwQUQ4
N0EwMEFDNDQ3NCAvKiBFeGVjdXRhYmxlQmFzZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUEwQjlDMjIwQUQ4N0EwMEFDNDQ3NCAvKiBF
eGVjdXRhYmxlQmFzZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFMzVDQTE1NDFEQkMzQTVDMDBGODM1MTYgLyogRE9NSklUSGVhcFJh
bmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVD
QTE1MjFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1Q0ExNTYxREJDM0E1RjAwRjgz
NTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTAxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3Ry
YWN0SGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUUzNUUzNjNFMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0Mg
LyogUmVwYXRjaC5oICovOyB9OwogCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50
NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM1RTg5RkIyNUM1MEY4NjAwNzFFRTFFIC8qIEJpZ0ludDY0QXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVFODlGRTI1QzUwRjg3MDA3
MUVFMUUgLyogQmlnVWludDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzNUU4OUZDMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
NjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzYzN0VFNzIzNkU1NkIwMDA5NkJE
MEEgLyogTGlua1RpbWVDb25zdGFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0yMzkxLDcgKzIzOTEsNiBAQAogCQkwRjBDQUVGRTFFQzREQTg1
MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAg
LyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ3VzdG9tLmg7IHBh
dGggPSBiMy9haXIvQWlyQ3VzdG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvbkZ1enouY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6
ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25GdXp6Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDU0LDggKzI0NTMsNiBAQAogCQkwRjI0RTU0
NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJl
Z2lzdGVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBSZWdpc3Rl
clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjI0RTU0OTE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyNEU1NEExN0VF
Mjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVwYXRjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0QjE3RUUy
NzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1MzE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2Fs
bEZyYW1lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGlu
ZUNhbGxGcmFtZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTU0
MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQ2FsbEZyYW1lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MjA3LDYgKzUyMDQsNyBAQAogCQlFMzQwMEVDMDIyQTFDQzc4MDA5REVE
NTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bkV4ZWN1dGFibGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNDlB
NzdGMjQ5MUYxNTkwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdDb2RlT3JpZ2luUG9vbC5jcHA7IHBhdGggPSBkZmcvREZHQ29kZU9yaWdpblBv
b2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzQ5QTc4MDI0OTFGMTVBMDAx
QkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29kZU9yaWdp
blBvb2wuaDsgcGF0aCA9IGRmZy9ERkdDb2RlT3JpZ2luUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMzREMUFFNDI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8qIFBh
cnNlSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUhhc2guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0RTY1NzQyMDY2OEU4RTAwRkI4MUFDIC8q
IFBhcnNlSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJz
ZUhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRFREJGNjFEQjVGRkMx
MDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZyYW1lVHJhY2Vycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTIyOSw2
ICs1MjI3LDggQEAKIAkJRTM1Q0ExNTAxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0
SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01KSVRBYnN0cmFjdEhl
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNTExREJDM0E1NjAwRjgz
NTE2IC8qIERPTUpJVEhlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVEhlYXBSYW5nZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUzNUUzNjNEMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFODlGQjI1QzUwRjg2MDA3MUVFMUUgLyogQmlnSW50
NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWdJbnQ2NEFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUU4OUZDMjVDNTBGODcwMDcxRUUx
RSAvKiBCaWdVaW50NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aWdVaW50NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzYzN0VFNzIz
NkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02NDU4LDggKzY0NTgsNiBAQAogCQkJCTYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAv
KiBSZWdpc3Rlck1hcC5oICovLAogCQkJCTBGQzMxNDE0MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdp
c3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVy
U2V0LmggKi8sCi0JCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICov
LAotCQkJCTBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8sCiAJCQkJMEZB
N0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8s
CiAJCQkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oICovLAogCQkJCTBGRUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFt
ZS5jcHAgKi8sCkBAIC04ODE1LDcgKzg4MTMsNiBAQAogCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAogCQkJCUUzNjM3RUU4MjM2RTU2
QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmNwcCAqLywKIAkJCQlFMzYzN0VFNzIzNkU1
NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovLAotCQkJCTBGMEZDNDU4MTRCRDE1
RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovLAogCQkJCTUzRkEyQUUyMUNGMzgw
MzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwICovLAogCQkJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkxNEY3OUY2RTIxNkVB
RDUwMDAwNDZEMzkgLyogTWV0YWRhdGFUYWJsZS5jcHAgKi8sCkBAIC04ODYyLDYgKzg4NTksOSBA
QAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8s
CiAJCQkJMEZGNjBBQkYxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICov
LAogCQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8s
CisJCQkJRTM1RTM2M0QyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guY3BwICovLAorCQkJCUUz
NUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmggKi8sCisJCQkJRTM0RDFBRTQyNzNE
QzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJbmxpbmVzLmggKi8sCiAJCQkJODY1REEwQzkyNUI4OTYy
QTAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAgKi8sCiAJCQkJODY1REEwQzcy
NUI4OTYwQzAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0YXR1cy5oICovLAogCQkJCTg2NURB
MEM2MjVCODk1OUUwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcCAqLywKQEAg
LTk3NDcsNiArOTc0Nyw3IEBACiAJCQkJRkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVn
Z2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDREREUxOTgzMkQzNDAwN0Q0
QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2
OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTlGQTdDNTI3M0M4
QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcx
MkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJj
ZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBE
ZWZlcnJlZFdvcmtUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDMyMyw4ICsxMDMyNCw2IEBA
CiAJCQkJQTM4RDI1MEUyNTgwMEQ0NDAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKLQkJ
CQk2NTNCQzQzRjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MzlERDdGNTIzQzFCQkI1MDA5MDVGMTMgLyogSlNBcnJheUl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyog
SlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTI2LDcgKzEwNTI1LDYgQEAK
IAkJCQlFMzYzN0VFOTIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwREU5QTA5MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFz
c2VtYmx5LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyog
TExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJC
MTZDMDBCRkUyNzIgLyogTExJbnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQz
MTRCQkQxNjcwMEJGRTI3MiAvKiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMTA3MjYs
NyArMTA3MjQsOCBAQAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBS
ZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5MkY1NkI3MUU0
RTg0QjIwMDM1OTUzQiAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTM1RTM2M0UyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFk
ZXJzICovLAorCQkJCUUzNEQxQUU1MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RjNGQjkyNjEzQzc4OTAwNjlFODlGIC8qIFJlc291cmNl
RXhoYXVzdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkND
IC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0I2NDJGMjVENkZCNEQwMDFB
RERCNCAvKiBSb290TWFya1JlYXNvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDc4NCw3ICsxMDc4
Myw2IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJv
dmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFG
IC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTlGQTdD
NTI3M0M4QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5
IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLApAQCAtMTEwNTIsNiArMTEw
NTAsOCBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYwMEVEQUY3MSAvKiBZYXJyRXJyb3JDb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIgLyogWWFyckZsYWdz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFycklu
dGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0Ig
LyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIw
IC8qIFlhcnJKSVRSZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRjBGQzk1MjZBMTFC
NEEwMDk5RkZBMCAvKiBZYXJyTWF0Y2hpbmdDb250ZXh0SG9sZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3OTNmNDZmN2JjNThlNTA4
Y2RhNmNiOTAxNWFhMDkyZThjOTg2MGQ5Li5iNjk1NTU3YWZlNjBmMTQ3NTEwMDliMWI1MDVmNTUx
MzM0MDViOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNzMsNiArMjczLDcg
QEAgYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBi
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5j
cHAKK2J5dGVjb2RlL1JlcGF0Y2guY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMu
Y3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAogYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwCkBAIC02NzYsNyArNjc3LDYgQEAgaml0L1JlZy5jcHAKIGppdC9SZWdpc3Rl
ckF0T2Zmc2V0LmNwcAogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAogaml0L1JlZ2lzdGVy
U2V0LmNwcAotaml0L1JlcGF0Y2guY3BwCiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cAogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAogaml0L1Nsb3dQYXRoQ2FsbC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IGE2Y2E1
YzgxYzUxMDk1ZjgxOThkOWI4MmRiMTRhNTgxYTI1Y2U2MDkuLjA3NTA0YmEwNGU1OWI2ZDFkY2Ey
MzU4OGJlZmI1NGRmMTkxODVhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Db2RlTG9jYXRpb24uaApAQCAtMjcsOCArMjcsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCiAKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQotCiBuYW1lc3BhY2Ug
SlNDIHsKIAogZW51bSBjbGFzcyBOZWFyQ2FsbE1vZGUgOiB1aW50OF90IHsgUmVndWxhciwgVGFp
bCB9OwpAQCAtMjY5LDUgKzI2NywzIEBAIGlubGluZSBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQ8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6Y29udmVydGliCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCmluZGV4IDA2MjQwZTg3
NDM2Mzg3M2I5ZGYyY2M5ZjM3ZjM4MjkxOGZlN2UyOWUuLmZmOTMwNTg5ZGIyNzExODBkMDk5ZTIz
NTZjOTk3ZGM1OWIzNTZlNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVk
ZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgogCiAjaWYgT1MoTElOVVgpCiAjaW5jbHVkZSAiUGVy
ZkxvZy5oIgpAQCAtNDMsMjkgKzQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBzaXplX3QgTGlua0J1
ZmZlcjo6c19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRTaXplc1tMaW5rQnVmZmVyOjpudW1iZXJP
ZlByb2ZpbGVzXTsKIHNpemVfdCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtl
ZENvdW50c1tMaW5rQnVmZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIAotYm9vbCBzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKGNvZGVCbG9j
ayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9w
dGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7Ci19Ci0KLWJvb2wgc2hvdWxkRHVtcERp
c2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIGlmIChPcHRp
b25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwg
T3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZToKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNh
c2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU6Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpk
dW1wT01HRGlzYXNzZW1ibHkoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBMaW5rQnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQ
dHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKQog
ewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmgKaW5kZXggNWEzZjAwZjA1YzY4NTgyOTU3NzI2NjdmYzIyMzU2
N2Y2OGU5MmI4Ny4uMjg1ZGYwZDFhMTgwOWRiMjBiNDc5NGNkMzEyMDU5ZWZjNmVlMDBlMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKQEAgLTQzLDEy
ICs0Myw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1lbnVtIGNs
YXNzIENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3Q7Ci19Ci0KLWNsYXNzIENvZGVCbG9jazsKLQog
Ly8gTGlua0J1ZmZlcjoKIC8vCiAvLyBUaGlzIGNsYXNzIGFzc2lzdHMgaW4gbGlua2luZyBjb2Rl
IGdlbmVyYXRlZCBieSB0aGUgbWFjcm8gYXNzZW1ibGVyLCBvbmNlIGNvZGUgZ2VuZXJhdGlvbgpA
QCAtNDQ2LDggKzQ0MCw2IEBAIGNsYXNzIExpbmtCdWZmZXIgewogICAgICAgICA6IChsaW5rQnVm
ZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFn
PigpKQogI2VuZGlmCiAKLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayop
OwotCiAjZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlclJlZmVy
ZW5jZSwgcmVzdWx0UHRyVGFnLCAuLi4pICBcCiAgICAgRklOQUxJWkVfQ09ERV9JRigoc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKGNvZGVCbG9jaykgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJs
eSgpKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApA
QCAtNDc2LDggKzQ2OCw2IEBAIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9j
ayopOwogI2RlZmluZSBGSU5BTElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCBy
ZXN1bHRQdHJUYWcsIGRhdGFMb2dGQXJndW1lbnRzRm9ySGVhZGluZykgIFwKICAgICBGSU5BTEla
RV9DT0RFX0lGKEpTQzo6T3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCks
IGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JI
ZWFkaW5nKQogCi1ib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlv
bk1vZGUpOwotCiAjZGVmaW5lIEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNl
LCByZXN1bHRQdHJUYWcsIC4uLikgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKChKU0M6Ok9wdGlv
bnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBKU0M6Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
IHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2Us
IHJlc3VsdFB0clRhZywgX19WQV9BUkdTX18pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAppbmRleCA1ZDU2
NzQxZWZlNjY0MjZlZmNhMjA1MmFjMjUwOTgzMjIwMjM3N2QwLi43MGRiMGQwMzllYTdlZDYxMWM4
YTZlNWQ4MDg5MTNmMGFkNWJkNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0yNiw4ICsyNiwx
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgi
CisjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQ1B0clRhZy5oIgorI2luY2x1ZGUg
Ildhc21Db21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC02Myw1ICs2NiwyOCBAQCBDU3RyaW5nIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZkJhc2U6OmRpc2Fzc2VtYmx5KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNh
c3NlbWJseQogICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7CiB9CiAKK2Jvb2wgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChjb2RlQmxv
Y2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBP
cHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpOworfQorCitib29sIHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAoT3B0
aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8
IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1v
ZGU6CisgICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHkoKTsKKyAgICBj
YXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlOgorICAgICAgICByZXR1cm4gT3B0aW9uczo6
ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCmluZGV4IDkyNTU5MThiMWJhMTc1YTFmNDlkYzMwMjVlYzZmY2E4ODkzOWQzNjQuLjFlYTMy
NDU0MTVhYjA4YTQ1YzdkM2U1OTU5NjBjNDQ1YjE5ZmY3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAt
NTQsNiArNTQsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2Vu
dW0gY2xhc3MgQ29tcGlsYXRpb25Nb2RlIDogdWludDhfdDsKK30gLy8gbmFtZXNwYWNlIFdhc20K
KworY2xhc3MgQ29kZUJsb2NrOwogdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI7CiAKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKQEAgLTM3Nyw3ICszODIsMTAg
QEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHJCYXNlIHsKIAogICAgIHZvaWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCks
IG5hbWUsIG91dCk7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFM
b2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwg
b3V0KTsKICAgICB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBk
dW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOyB9CkBAIC01MzcsNiArNTQ1LDkgQEAgaW5saW5l
IEZ1bmN0aW9uUHRyPHRhZz46OkZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
IHB0cikKIHsKIH0KIAorYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7
Citib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCBiZTJlOGM4MTFkNmRkZDBj
MTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyLi4wMTM4NjBiNjZjMmIxOWE4Y2JiNTk1M2E1ZDBlNDRk
ZDI3N2ZiZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIKQEAgLTI2LDYgKzI2LDcgQEAKIAogICAgIDpCYXNpY0Jsb2NrTG9jYXRpb24sCiAg
ICAgOkJvdW5kTGFiZWwsCisgICAgOkNhbGxMaW5rSW5mbywKICAgICA6RGVidWdIb29rVHlwZSwK
ICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCkBAIC00NCw3ICs0
NSw2IEBACiAgICAgOkpTU2NvcGUsCiAgICAgOkpTVHlwZSwKICAgICA6SlNWYWx1ZSwKLSAgICA6
TExJbnRDYWxsTGlua0luZm8sCiAgICAgOlJlc3VsdFR5cGUsCiAgICAgOk9wZXJhbmRUeXBlcywK
ICAgICA6UHJpdmF0ZUZpZWxkUHV0S2luZCwKQEAgLTg0MCw3ICs4NDAsOCBAQAogICAgICAgICBh
cmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5r
SW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJ
bmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODUyLDcgKzg1Myw4IEBACiAgICAgICAgIGFy
Z3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJ
bmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0lu
Zm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NjUsNyArODY3LDggQEAKICAgICAgICAgZWNt
YU1vZGU6IEVDTUFNb2RlLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExp
bmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlu
a0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9m
aWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NzksNiArODgyLDcgQEAKICAgICAgICAg
Zmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxM
aW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MDAsNiArOTA0
LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2Zp
bGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0s
CkBAIC05MjEsNiArOTI2LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAogICAgIH0KQEAgLTkzMyw3ICs5MzksOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRD
YWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAogICAgIH0KIApAQCAtOTQ3LDYgKzk1NCw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBp
bnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxM
aW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHBy
b2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAtMTI0OSw3ICsxMjU3LDggQEAKICAgICBt
ZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFk
YXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKLSAgICAgICAgY2Fs
bExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxs
TGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBp
dGVyYXRvclByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRC
eUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBuZXh0UHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAt
MTI3Miw3ICsxMjgxLDggQEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRh
ZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAg
ICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBuZXh0UmVzdWx0UHJvZmlsZTogVmFsdWVQcm9maWxlLAog
ICAgICAgICBkb25lTW9kZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBk
b25lUHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTM5Myw2ICsxNDAzLDkgQEAKIG9wIDpsbGlu
dF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDQKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJu
X2Zyb21fanNfNDUKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDYKK29wIDps
bGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDcKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0
dXJuX2Zyb21fanNfNDgKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDkKIAog
ZW5kX3NlY3Rpb24gOkNMb29wSGVscGVycwogCkBAIC0xNDE1LDYgKzE0MjgsMTAgQEAKIG9wIDps
bGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5j
dGlvbl9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1
Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRf
dmlydHVhbF9jYWxsX3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFt
cG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9p
bnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOm5vcm1hbF9vc3JfZXhpdF90cmFtcG9saW5lCkBA
IC0xNDIzLDYgKzE0NDAsOCBAQAogb3AgOmxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24K
IG9wIDpvcF9jYWxsX3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9j
YXRpb24KK29wIDpvcF9jYWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY29uc3Ry
dWN0X3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRp
b24KIG9wIDpvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uCkBAIC0xNDM4LDE1ICsxNDU3LDE1
IEBACiBvcCA6b3BfY29uc3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0
b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2l0ZXJhdG9yX25leHRfc2xvd19y
ZXR1cm5fbG9jYXRpb24KLW9wIDpvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3Bf
dGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRp
b24KIAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbAotb3AgOmpzX3RyYW1wb2xpbmVfb3BfdGFp
bF9jYWxsCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3QKK29wIDpqc190cmFtcG9saW5l
X29wX2NhbGxfdmFyYXJncworb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3MK
IG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQKIG9wIDpqc190cmFtcG9saW5lX29w
X2l0ZXJhdG9yX29wZW4KIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAppbmRleCA0ZjQ3YzhiY2NmOGU1NzQ4YWE5YjBmMzZlNmYzNjMwNWFk
YzMwMDExLi4yNzBjZDZmMWQwMmY0NGQ1M2RiM2U2YWE2M2FmZmExNWUwYzA5MjZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaApAQCAtMTgwLDcgKzE4MCw3IEBAIHB0cmRpZmZfdCBzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHVuc2ln
bmVkIGNoZWNrCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+Ci1MTElu
dENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRh
LCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCitDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0Zv
cihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQog
ewogICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOwogICAgIHJldHVybiBtZXRhZGF0
YS5tX2NhbGxMaW5rSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAKaW5kZXggM2I4MDNiMzhhNzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBh
NTU4YS4uYTFhZmNmOTM4YTUxZjJiYzE3MmYwZmQyMDI3MTMyZTY3MmVlZDk3YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTM3LDcg
KzM3LDYgQEAKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvTGlz
dER1bXAuaD4KIAotI2lmIEVOQUJMRShKSVQpCiBuYW1lc3BhY2UgSlNDIHsKIAogQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlE
KQpAQCAtODIsMTEgKzgxLDEzIEBAIENhbGxMaW5rSW5mbzo6fkNhbGxMaW5rSW5mbygpCiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjpjbGVhclN0dWIoKQogeworI2lmIEVOQUJMRShKSVQpCiAgICAgaWYg
KCFzdHViKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3R1Yi0+Y2xlYXJDYWxsTm9kZXNG
b3IodGhpcyk7CiAgICAgbV9zdHViID0gbnVsbHB0cjsKKyNlbmRpZgogfQogCiB2b2lkIENhbGxM
aW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKQEAgLTExMywxOSArMTE0LDE5IEBAIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKICAg
ICByZXR1cm4gbV9kb25lTG9jYXRpb247CiB9CiAKLXN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90
IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7Ci0KIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25v
bW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KGNhbGxlZSkgJiBwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICBtX2Nh
bGxlZU9yQ29kZUJsb2NrLnNldCh2bSwgb3duZXIsIGNhbGxlZSk7CiAKLSAgICBpZiAoaXNEYXRh
SUMoKSkgCisgICAgaWYgKGlzRGF0YUlDKCkpCiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBo
aWNDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOwogICAgIGVsc2UgeworI2lmIEVOQUJMRShKSVQp
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxs
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24sIGNhbGxlZSk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTEzNSw4ICsxMzYsMTEgQEAg
dm9pZCBDYWxsTGlua0luZm86OmNsZWFyQ2FsbGVlKCkKICAgICBtX2NhbGxlZU9yQ29kZUJsb2Nr
LmNsZWFyKCk7CiAgICAgaWYgKGlzRGF0YUlDKCkpCiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21v
cnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRyOwotICAgIGVsc2UgaWYgKCFjbGVhcmVkQnlK
ZXR0aXNvbigpKQorICAgIGVsc2UgaWYgKCFjbGVhcmVkQnlKZXR0aXNvbigpKSB7CisjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlD
Lm1fY2FsbGVlTG9jYXRpb24sIG51bGxwdHIpOworI2VuZGlmCisgICAgfQogfQogCiBKU09iamVj
dCogQ2FsbExpbmtJbmZvOjpjYWxsZWUoKQpAQCAtMjI0LDYgKzIyOCw3IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIAogICAgIGlmIChpc0xpbmtlZCgpKSB7CiAg
ICAgICAgIGlmIChzdHViKCkpIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgaWYgKCFz
dHViKCktPnZpc2l0V2Vhayh2bSkpIHsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKApAQCAt
MjM0LDYgKzIzOSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAg
ICAgICAgICAgICAgIHVubGluayh2bSk7CiAgICAgICAgICAgICAgICAgbV9jbGVhcmVkQnlHQyA9
IHRydWU7CiAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgfSBlbHNlIGlmICghdm0uaGVh
cC5pc01hcmtlZChtX2NhbGxlZU9yQ29kZUJsb2NrLmdldCgpKSkgewogICAgICAgICAgICAgaWYg
KGlzRGlyZWN0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKSkgewpAQCAtMjgwLDEzICsyODYsMTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnZp
c2l0V2VhayhWTSYgdm0pCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKIHZvaWQgQ2FsbExp
bmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJiBz
aHVmZmxlRGF0YSkKIHsKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxG
cmFtZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0YSk7CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5z
aHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsK
IApAQCAtMzQ1LDcgKzM1Miw3IEBAIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsCiAgICAgcmV0dXJu
IGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwg
dXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWls
Q2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRM
YW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChpc1RhaWxDYWxsKCkpOwogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwpAQCAt
MzU4LDcgKzM2NSw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVt
aXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSCiAgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgU2NvcGVkTGFt
YmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOwogICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwpAQCAtMzY2LDcgKzM3
Myw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYKIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRT
bG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQogewotICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworICAgIHNldFNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKHZtLmdldENUSUxpbmtDYWxsKCkuY29kZSgpKTsKICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQpAQCAtMzc2LDIxICszODMs
MzEgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmYKICAgICBqaXQubW92ZShjYWxsTGlua0luZm9H
UFIsIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOwogfQorI2VuZGlmCiAKLXZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0
YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQordm9pZCBDYWxsTGlua0lu
Zm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBDYWxsVHlwZSBjYWxsVHlwZSwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0
YSkKIHsKLSAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZv
LmJ5dGVjb2RlSW5kZXgpOwotICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxs
VHlwZSwgY2FsbGVlR1BSKTsKLSAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJ
bmZvLmRvbmVMb2NhdGlvbjsKLSAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVm
ZmxlRGF0YSkgeworICAgIFVOVVNFRF9QQVJBTShmcmFtZVNodWZmbGVEYXRhKTsKKyAgICBtX2Nv
ZGVPcmlnaW4gPSBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpOworICAgIG1fY2FsbFR5cGUgPSBj
YWxsVHlwZTsKKyNpZiBFTkFCTEUoSklUKQorICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gR1BSSW5mbzo6cmVnVDI7Cisg
ICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CisgICAgaWYgKGZyYW1lU2h1ZmZsZURhdGEpIHsK
ICAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIHdlcmUgYSByZWZjb3VudGVk
IGRhdGEgc3RydWN0dXJlLgotICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVl
PENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxl
RGF0YSk7CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+KCpmcmFtZVNodWZmbGVEYXRhKTsKICAgICB9Ci0gICAgc2V0VXNlc0RhdGFJ
Q3MoVXNlRGF0YUlDOjpZZXMpOwogICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2Fs
bExpbmtJbmZvR1BSOwotICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkpOworI2VuZGlmCisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOwor
ICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSUxpbmtDYWxsKCkuY29kZSgp
KTsKKyAgICAvLyBJZiBKSVQgaXMgZGlzYWJsZWQsIHdlIHNob3VsZCBub3Qgc3VwcG9ydCBkeW5h
bWljYWxseSBnZW5lcmF0ZWQgY2FsbCBJQy4KKyAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQor
ICAgICAgICBkaXNhbGxvd1N0dWJzKCk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogdm9pZCBDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKQEAgLTQwNiw3ICs0MjMsNyBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogICAgIH0p
OwogfQogCi12b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiBqaXQsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CiAKQEAgLTQ2Miw2ICs0NzksNyBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPiB0YXJnZXQpCiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCB0YXJnZXQpOwogfQorI2VuZGlmCiAKIHZvaWQg
Q2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTQ4MywxMSArNTAxLDE0IEBAIHZv
aWQgQ2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9TdHViKCkKICAgICAgICAgbV9jYWxsZWVPckNv
ZGVCbG9jay5jbGVhcigpOwogICAgICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3Rp
bmF0aW9uID0gbnVsbHB0cjsKICAgICB9IGVsc2UgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
IENDYWxsSGVscGVyczo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2go
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24pLCBjYWxsZWVHUFIoKSwgbnVsbHB0cik7
CisjZW5kaWYKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86
OnNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmIG5ld1N0dWIpCiB7CiAg
ICAgY2xlYXJTdHViKCk7CkBAIC01MDQsNyArNTI1LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnNl
dFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmIG5ld1N0dWIpCiAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdHViLT5jb2Rl
KCkuY29kZSgpKSk7CiAgICAgfQogfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uaAppbmRleCBlNWY3N2NmMzdiZjI2NmY0YjljOTNjNTBjZjk5NmQyMWM2Njhj
ZTQ1Li5iMmQzYWZhNmNmNjBkMTViZTdhNWQ0OWQ4NjJjYzQ1Y2Y4YjU4YTc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCkBAIC0yOCwyNSArMjgs
MjkgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIgogI2luY2x1ZGUgIkNhbGxN
b2RlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNs
dWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYg
RU5BQkxFKEpJVCkKLQogY2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgRXhlY3V0YWJsZUJhc2U7
CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIEpTRnVuY3Rpb247CitjbGFzcyBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZTsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAorc3Ry
dWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOwog
CiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxM
aW5rSW5mbz4gewogcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CisKICAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAg
ICAgIENhbGwsCkBAIC01OSw2ICs2Myw4IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQ
YWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIERpcmVjdENvbnN0
cnVjdCwKICAgICAgICAgRGlyZWN0VGFpbENhbGwKICAgICB9OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxsZWVNYXNrID0gMTsKICAgICAKICAgICBzdGF0
aWMgQ2FsbFR5cGUgY2FsbFR5cGVGb3IoT3Bjb2RlSUQgb3Bjb2RlSUQpOwogCkBAIC0xNzQsMzUg
KzE4MCw0MyBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4gaXNWYXJhcmdzQ2FsbFR5cGUoc3Rh
dGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpKTsKICAgICB9CiAKLSAgICBib29sIGlzTGlu
a2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdHViIHx8IG1fY2FsbGVlT3JDb2RlQmxvY2s7IH0KKyAg
ICBib29sIGlzTGlua2VkKCkgY29uc3QgeyByZXR1cm4gc3R1YigpIHx8IG1fY2FsbGVlT3JDb2Rl
QmxvY2s7IH0KICAgICB2b2lkIHVubGluayhWTSYpOwogCisjaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIHNldFVwQ2FsbChDYWxsVHlwZSBjYWxsVHlwZSwgR1BSUmVnIGNhbGxlZUdQUikKICAgICB7
CiAgICAgICAgIG1fY2FsbFR5cGUgPSBjYWxsVHlwZTsKICAgICAgICAgbV9jYWxsZWVHUFIgPSBj
YWxsZWVHUFI7CiAgICAgfQogCi0gICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KTsKLQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsg
fQorI2VuZGlmCisKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBDYWxsVHlwZSwgQnl0
ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqKTsKICAgICAKICAgICBlbnVtIGNsYXNz
IFVzZURhdGFJQyA6IHVpbnQ4X3QgewogICAgICAgICBZZXMsCiAgICAgICAgIE5vCiAgICAgfTsK
IAorI2lmIEVOQUJMRShKSVQpCiBwcml2YXRlOgotICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wg
aXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FS
Tl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1p
dEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwg
U2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBTY29w
ZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJO
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWls
Q2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmKTsKLSAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOworICAg
IHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgU2NvcGVkTGFt
YmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRo
KFZNJiwgQ0NhbGxIZWxwZXJzJik7CiAgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRo
KFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKKyAgICB2b2lk
IGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAgdm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KTsKKyNlbmRpZgorCiAgICAgdm9pZCByZXZl
cnRDYWxsVG9TdHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAg
LTIxNyw3ICsyMzEsNiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBtX2RvbmVMb2NhdGlvbiA9IGRvbmVM
b2NhdGlvbjsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CiAKICAg
ICBib29sIGFsbG93U3R1YnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93U3R1YnM7IH0KIApAQCAt
MjM3LDcgKzI1MCw2IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBKU0Nl
bGwqLCBGdW5jdGlvbkNvZGVCbG9jayopOwogICAgIHZvaWQgY2xlYXJDb2RlQmxvY2soKTsKICAg
ICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrKCk7Ci0gICAgdm9pZCBzZXREaXJlY3RDYWxs
VGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KTsKIAogICAgIHZvaWQgc2V0
TGFzdFNlZW5DYWxsZWUoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVl
KTsKICAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKTsKQEAgLTI0NywyMiArMjU5LDE4IEBA
IGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExp
bmtJbmZvPiB7CiAgICAgdm9pZCBzZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oRXhlY3V0
YWJsZUJhc2UqKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpOwogICAgIAorI2lm
IEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZT4mJik7CisjZW5kaWYKICAgICB2b2lkIGNsZWFyU3R1YigpOwogCiAgICAgUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIoKSBjb25zdAogICAgIHsKKyNpZiBFTkFCTEUoSklUKQog
ICAgICAgICByZXR1cm4gbV9zdHViLmdldCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0U2xvd1N0
dWIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIG5ld1Nsb3dTdHViKQotICAgIHsKLSAgICAgICAgbV9z
bG93U3R1YiA9IFdURk1vdmUobmV3U2xvd1N0dWIpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJT
bG93U3R1YigpCi0gICAgewotICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsKKyNlbHNlCisg
ICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCiAgICAgfQogCiAgICAgYm9vbCBzZWVuT25j
ZSgpCkBAIC0zMzAsMTkgKzMzOCwxNyBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7
CiAgICAgfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB1aW50MzJfdCogYWRkcmVzc09m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotICAgIH0KLSNlbmRpZgotCiAgICAgdWlu
dDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgfQogICAgIAogICAgIHZv
aWQgc2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModW5zaWduZWQpOworICAgIHZvaWQg
dXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModW5zaWduZWQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpCisgICAgeworICAgICAgICBpZiAobV9tYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgICAgICAgICAgbV9t
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aENvdW50KCkK
ICAgICB7CkBAIC0zNjQsMTAgKzM3MCwxMiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMg
UGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbik7CiAg
ICAgfQogCisjaWYgRU5BQkxFKEpJVCkKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX2NhbGxlZUdQUjsKICAgICB9CisjZW5kaWYKIAogICAgIHVpbnQzMl90
IHNsb3dQYXRoQ291bnQoKQogICAgIHsKQEAgLTM4Myw5ICszOTEsMTEgQEAgY2xhc3MgQ2FsbExp
bmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAg
ICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaXNMaW5rZWQoKSkgewotICAgICAgICAgICAgaWYgKHN0dWIo
KSkKKyAgICAgICAgICAgIGlmIChzdHViKCkpIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAg
ICAgICAgIHN0dWIoKS0+Zm9yRWFjaERlcGVuZGVudENlbGwoZnVuY3Rvcik7Ci0gICAgICAgICAg
ICBlbHNlIHsKKyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBm
dW5jdG9yKG1fY2FsbGVlT3JDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChp
c0RpcmVjdCgpKQogICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKG1fbGFzdFNlZW5DYWxsZWVP
ckV4ZWN1dGFibGUuZ2V0KCkpOwpAQCAtMzk3LDI2ICs0MDcsMzUgQEAgY2xhc3MgQ2FsbExpbmtJ
bmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAg
IHZvaWQgdmlzaXRXZWFrKFZNJik7CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0RnJh
bWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSYpOwogCiAgICAgY29uc3Qg
Q2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1lU2h1ZmZsZURhdGEoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fZnJhbWVTaHVmZmxlRGF0YS5nZXQoKTsKICAgICB9CisjZW5kaWYKIAogcHJpdmF0
ZToKIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3Rh
cnQoKTsKIAorICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAw
IH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1l
bnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3Ig
YXJndW1lbnRzLgogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9u
ZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Ns
b3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CiAgICAgICAgIFVu
aW9uVHlwZSgpIAorI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICA6IGRhdGFJQyB7IG51bGxw
dHIsIEludmFsaWRHUFJSZWcgfQorI2Vsc2UKKyAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0
ciB9CisjZW5kaWYKICAgICAgICAgeyB9CiAgICAgICAgIHN0cnVjdCBEYXRhSUMgewogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fbW9ub21vcnBoaWND
YWxsRGVzdGluYXRpb247CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIEdQUlJlZyBtX2Nh
bGxMaW5rSW5mb0dQUjsKKyNlbmRpZgogICAgICAgICB9IGRhdGFJQzsKIAogICAgICAgICBzdHJ1
Y3QgewpAQCAtNDI5LDkgKzQ0OCwxMCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogCiAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xh
c3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOworI2lmIEVOQUJMRShKSVQpCiAgICAgUmVmUHRyPFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3Nsb3dTdHViOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gbV9mcmFtZVNodWZmbGVEYXRhOworI2VuZGlmCiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmln
aW47CiAgICAgYm9vbCBtX2hhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICBib29sIG1faGFz
U2VlbkNsb3N1cmUgOiAxOwpAQCAtNDQxLDkgKzQ2MSwxMCBAQCBjbGFzcyBDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgIGJvb2wg
bV9jbGVhcmVkQnlKZXR0aXNvbiA6IDE7CiAgICAgdW5zaWduZWQgbV9jYWxsVHlwZSA6IDQ7IC8v
IENhbGxUeXBlCiAgICAgdW5zaWduZWQgbV91c2VEYXRhSUMgOiAxOyAvLyBVc2VEYXRhSUMKKyNp
ZiBFTkFCTEUoSklUKQogICAgIEdQUlJlZyBtX2NhbGxlZUdQUiB7IEludmFsaWRHUFJSZWcgfTsK
KyNlbmRpZgogICAgIHVpbnQzMl90IG1fc2xvd1BhdGhDb3VudCB7IDAgfTsKLSAgICB1aW50MzJf
dCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczog
dGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhl
IG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlu
bGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8pCkBAIC00NTMsMTEgKzQ3NCw3IEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENh
bGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiAKIHN0cnVj
dCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlh
bGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGU7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0
aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVm
ZmxlRGF0YTsKIH07CiAKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
Y3BwCmluZGV4IGY3YWZiMmIwZjI4ZmQ5ZTVmZmM1YzM0YjZhM2E4NTZhZTM3MzAyZjUuLmQ1OTA0
YThlOTBhMmNkYTQ2OTM3MWY4N2U5NzdiZDJjOGQzOTMxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcApAQCAtMzAsNyArMzAsNiBA
QAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJMTEludENhbGxMaW5rSW5mby5oIgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIApA
QCAtNTIsNDcgKzUxLDYgQEAgQ2FsbExpbmtTdGF0dXM6OkNhbGxMaW5rU3RhdHVzKEpTVmFsdWUg
dmFsdWUpCiAgICAgbV92YXJpYW50cy5hcHBlbmQoQ2FsbFZhcmlhbnQodmFsdWUuYXNDZWxsKCkp
KTsKIH0KIAotQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxv
Y2spOwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLSAgICBpZiAocHJvZmlsZWRCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+aGFzRXhpdFNp
dGUoREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50VmFsdWUp
KSkgewotICAgICAgICAvLyBXZSBjb3VsZCBmb3JjZSB0aGlzIHRvIGJlIGEgY2xvc3VyZSBjYWxs
LCBidXQgaW5zdGVhZCB3ZSdsbCBqdXN0IGFzc3VtZSB0aGF0IGl0Ci0gICAgICAgIC8vIHRha2Vz
IHNsb3cgcGF0aC4KLSAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICBPcGNvZGVJRCBvcCA9IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpOwotCi0gICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsK
LSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYWxsTGlua0lu
Zm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5t
X2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkubWV0
YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Ugb3BfdGFpbF9jYWxsOgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24t
PmFzPE9wVGFpbENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjoKLSAgICAgICAgY2Fs
bExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKS5tZXRhZGF0YShw
cm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBv
cF9pdGVyYXRvcl9uZXh0OgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZv
OwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxsTGlu
a1N0YXR1cygpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMo
Y2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZSgpKTsKLX0KLQogQ2FsbExpbmtTdGF0dXMgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiBtYXAsCiAgICAg
RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YSkKQEAgLTEwNSwxMCArNjMsMTkgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgVU5VU0VEX1BBUkFNKGV4aXRT
aXRlRGF0YSk7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLmNhbGxMaW5rSW5mbzsK
LSAgICBpZiAoIWNhbGxMaW5rSW5mbykgeworICAgIGlmICghY2FsbExpbmtJbmZvKQorICAgICAg
ICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKKyAgICAvLyBkb25lTG9jYXRpb24gaXMgbnVsbHB0
ciB3aGVuIGl0IGlzIHRpZWQgdG8gTExJbnQgKG5vdCBCYXNlbGluZSkuCisgICAgaWYgKCFjYWxs
TGlua0luZm8tPmRvbmVMb2NhdGlvbigpKSB7CiAgICAgICAgIGlmIChleGl0U2l0ZURhdGEudGFr
ZXNTbG93UGF0aCkKICAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgICAg
IHJldHVybiBjb21wdXRlRnJvbUxMSW50KGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJ
bmRleCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpLT5oYXNFeGl0U2l0ZShERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0
ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpKSB7CisgICAgICAgICAgICAvLyBXZSBjb3Vs
ZCBmb3JjZSB0aGlzIHRvIGJlIGEgY2xvc3VyZSBjYWxsLCBidXQgaW5zdGVhZCB3ZSdsbCBqdXN0
IGFzc3VtZSB0aGF0IGl0CisgICAgICAgICAgICAvLyB0YWtlcyBzbG93IHBhdGguCisgICAgICAg
ICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIGNvbXB1dGVGb3IobG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExp
bmtJbmZvLCBleGl0U2l0ZURhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuaAppbmRleCA1YjUzODBmOTBjNTZmYzA1NGU2OWYzN2Q0Mzc1MmU0
M2NkYzA3MDJhLi5hOTJkOTAwMWI5NmJlNDlkOTAxYjRhYmE5Y2Q1MjkxMDIxMDEwMGQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaApAQCAt
MTE3LDcgKzExNyw2IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzIGZpbmFsIHsKIHByaXZhdGU6CiAg
ICAgdm9pZCBtYWtlQ2xvc3VyZUNhbGwoKTsKICAgICAKLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0
dXMgY29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sq
LCBCeXRlY29kZUluZGV4KTsKICNpZiBFTkFCTEUoSklUKQogICAgIHN0YXRpYyBDYWxsTGlua1N0
YXR1cyBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKICAgICAgICAgY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQ2FsbExpbmtJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCmluZGV4IDc3Y2FhOGU1N2U5NGFkNzMyYTg3MDNiNzEwZmQ0ODBmNzE4
MTNhZTYuLjliYTJkNTFmOTBlZmYwYzcyYjkwYTlkOWE3N2Q5NmJiNjU2ZjcyOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC00NDksMTQgKzQ0
OSwxNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEodGhpcyk7IFwKICAgICBuZXcgKCZtZXRhZGF0YSkgX19vcDo6TWV0YWRh
dGEgeyBieXRlY29kZSB9OyBcCiAKLSNkZWZpbmUgQ0FTRShfX29wKSBjYXNlIF9fb3A6Om9wY29k
ZUlECi0KLSNkZWZpbmUgTElOSyguLi4pIFwKLSAgICBDQVNFKFdURl9MQVpZX0ZJUlNUKF9fVkFf
QVJHU19fKSk6IHsgXAorI2RlZmluZSBMSU5LX0lNUEwoLi4uKSBcCiAgICAgICAgIElOSVRJQUxJ
WkVfTUVUQURBVEEoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKSBcCiAgICAgICAgIFdURl9M
QVpZX0hBU19SRVNUKF9fVkFfQVJHU19fKSh7IFwKICAgICAgICAgICAgIFdURl9MQVpZX0ZPUl9F
QUNIX1RFUk0oTElOS19GSUVMRCwgIFdURl9MQVpZX1JFU1RfKF9fVkFfQVJHU19fKSkgXAogICAg
ICAgICB9KSBcCisKKyNkZWZpbmUgQ0FTRShfX29wKSBjYXNlIF9fb3A6Om9wY29kZUlECisKKyNk
ZWZpbmUgTElOSyguLi4pIFwKKyAgICBDQVNFKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSk6
IHsgXAorICAgICAgICBMSU5LX0lNUEwoX19WQV9BUkdTX18pIFwKICAgICAgICAgYnJlYWs7IFwK
ICAgICB9CiAKQEAgLTQ2NSwxMCArNDY4LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAg
ICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAg
ICAgbV9ieXRlY29kZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3
aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQot
ICAgICAgICBMSU5LKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9w
VGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wQ29uc3Ry
dWN0VmFyYXJncywgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5VmFsLCBwcm9maWxlKQog
ICAgICAgICBMSU5LKE9wR2V0UHJpdmF0ZU5hbWUsIHByb2ZpbGUpCiAKQEAgLTQ5OCwxMSArNDk3
LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElOSyhPcEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eSkKICAgICAgICAgTElOSyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgcHJvZmls
ZSkKIAotICAgICAgICBMSU5LKE9wQ2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxD
YWxsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wQ2FsbEV2YWwsIHByb2ZpbGUpCi0gICAgICAg
IExJTksoT3BDb25zdHJ1Y3QsIHByb2ZpbGUpCi0KICAgICAgICAgTElOSyhPcEluQnlWYWwpCiAg
ICAgICAgIExJTksoT3BQdXRCeVZhbCkKICAgICAgICAgTElOSyhPcFB1dEJ5VmFsRGlyZWN0KQpA
QCAtNTI3LDEzICs1MjEsNjggQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElO
SyhPcENhdGNoKQogICAgICAgICBMSU5LKE9wUHJvZmlsZUNvbnRyb2xGbG93KQogCisgICAgICAg
IGNhc2Ugb3BfY2FsbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wQ2FsbCwgcHJvZmlsZSkK
KyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0s
IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgp
LCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBvcF90YWlsX2NhbGw6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcFRhaWxDYWxsLCBwcm9m
aWxlKQorI2lmIEVOQUJMRShKSVQpCisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBz
aHVmZmxlRGF0YSA9IENhbGxGcmFtZVNodWZmbGVEYXRhOjpjcmVhdGVGb3JCYXNlbGluZU9yTExJ
bnRUYWlsQ2FsbChieXRlY29kZSwgbnVtUGFyYW1ldGVycygpKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCAmc2h1ZmZsZURhdGEpOwor
I2Vsc2UKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRh
SUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5p
bmRleCgpLCBudWxscHRyKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9w
Q2FsbEV2YWwsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5p
bml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwg
aW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBMSU5LX0lN
UEwoT3BDb25zdHJ1Y3QsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5r
SW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewotICAgICAgICAg
ICAgSU5JVElBTElaRV9NRVRBREFUQShPcEl0ZXJhdG9yT3BlbikKKyAgICAgICAgICAgIExJTktf
SU1QTChPcEl0ZXJhdG9yT3BlbikKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZv
LmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
LCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7Ci0gICAgICAgICAgICBJ
TklUSUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JOZXh0KQorICAgICAgICAgICAgTElOS19JTVBM
KE9wSXRlcmF0b3JOZXh0KQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5p
dGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGlu
c3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgTElOS19J
TVBMKE9wQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxM
aW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIExJTktfSU1QTChPcFRhaWxDYWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5r
SW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cywgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2Fs
bExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogewor
ICAgICAgICAgICAgTElOS19JTVBMKE9wQ29uc3RydWN0VmFyYXJncywgcHJvZmlsZSkKKyAgICAg
ICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxM
aW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxs
cHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTc4MywyMSArODMyLDE4
IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFz
ZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CiAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgp
KTsKICAgICAgICAgaml0RGF0YS5tX3N0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0
dWJJbmZvPihqaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSk7Ci0gICAgICAgIGpp
dERhdGEubV9jYWxsTGlua0luZm9zID0gRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPihqaXRDb2Rl
LT5tX3VubGlua2VkQ2FsbHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZENh
bGxMaW5rSW5mbyA6IGppdENvZGUtPm1fdW5saW5rZWRDYWxscykgeworICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KGxvY2tlciwgdW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29k
ZUxvY2F0aW9ucyh7IH0sIHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbik7CisgICAg
ICAgIH0KKwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3Rh
bnRQb29sLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuYXQoaSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoK
ICAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxP
YmplY3QuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVyKCkpOwot
ICAgICAgICAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5m
byA9IGppdENvZGUtPm1fdW5saW5rZWRDYWxsc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvc1tpbmRleF07
Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5s
aW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAg
ICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9ICZjYWxsTGlua0luZm87
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50
ZXIoKSk7CiAgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5r
ZWRTdHViSW5mbyA9IGppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3NbaW5kZXhdOwpAQCAtMTU2
NywxNSArMTYxMyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCkKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0KLSAgICBmb3JFYWNoTExJbnRD
YWxsTGlua0luZm8oWyZdKExMSW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKLSAgICAg
ICAgaWYgKGNhbGxMaW5rSW5mby5pc0xpbmtlZCgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxM
aW5rSW5mby5jYWxsZWUoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgIkNsZWFyaW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcyk7Ci0gICAgICAg
ICAgICBjYWxsTGlua0luZm8udW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhbGxM
aW5rSW5mby5sYXN0U2VlbkNhbGxlZSgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxMaW5rSW5m
by5sYXN0U2VlbkNhbGxlZSgpKSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckxhc3RT
ZWVuQ2FsbGVlKCk7Ci0gICAgfSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTU5Myw4ICsx
NjMwLDYgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVERhdGFTbG93
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJ
bmxpbmVDYWNoZXMoKQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlu
a0luZm9zKQotICAgICAgICAgICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSgpKTsKICAgICAg
ICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CiAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXJCYXNlIGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwog
ICAgICAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHRoaXMpOwpA
QCAtMTYxMiwxOSArMTY0Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNh
Y2hlcygpCiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewotICAgICAgICAvLyBW
ZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1
YWwgY2FsbHMuCi0gICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0
aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlu
a0luZm9zKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0Nl
bGwqKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotCi0gICAgfQotI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTYzNCw4
ICsxNjU2LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYg
dm0pCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0gICAgaWYgKEpJVENvZGU6OmNv
dWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50
ZXJwcmV0ZWQoaml0VHlwZSgpKSkgewogICAgICAgICBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7CisgICAgICAgIC8vIElmIHRoZSBDb2RlQmxvY2sgaXMgREZHIG9yIEZUTCwgQ2FsbExpbmtJ
bmZvIGluIG1ldGFkYXRhIGlzIG5vdCByZWxhdGVkLgorICAgICAgICBmb3JFYWNoTExJbnRPckJh
c2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSk7CisgICAgICAgIH0pOworICAgIH0K
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTcwMCwxMiArMTcy
NywxMyBAQCB2b2lkIENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB2b2lkIENvZGVC
bG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgSUNTdGF0dXNN
YXAmIHJlc3VsdCkKIHsKICNpZiBFTkFCTEUoSklUKQorICAgIGZvckVhY2hMTEludE9yQmFzZWxp
bmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAg
IHJlc3VsdC5hZGQoY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRlcmF0
b3ItPnZhbHVlLmNhbGxMaW5rSW5mbyA9ICZjYWxsTGlua0luZm87CisgICAgfSk7CiAgICAgaWYg
KEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGppdERhdGEg
PSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgc3R1YkluZm8gOiBq
aXREYXRhLT5tX3N0dWJJbmZvcykKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHN0dWJJbmZv
LmNvZGVPcmlnaW4sIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5zdHViSW5mbyA9ICZzdHVi
SW5mbzsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9j
YWxsTGlua0luZm9zKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoY2FsbExpbmtJbmZvLmNv
ZGVPcmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNhbGxMaW5rSW5mbyA9ICZj
YWxsTGlua0luZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CkBAIC0xNzYwLDE1ICsxNzg4
LDIyIEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUNhbGxMaW5rSW5mbyog
Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgg
aW5kZXgpCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4IGluZGV4KQog
ewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBpZiAoYXV0byog
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5r
SW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykgewotICAgICAgICAgICAgaWYgKGNhbGxM
aW5rSW5mby5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdpbihpbmRleCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuICZjYWxsTGlua0luZm87Ci0gICAgICAgIH0KKyAgICBhdXRvJiBpbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucygpLmF0KGluZGV4KTsKKyAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpKSB7CisjZGVmaW5lIENBU0UoT3ApIFwKKyAgICBjYXNlIE9wOjpvcGNvZGVJRDog
XAorICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5t
X2NhbGxMaW5rSW5mbzsgXAorICAgICAgICBicmVhazsKKworICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENBU0UpCisKKyN1bmRlZiBDQVNFCisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQorCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTIxMzUsMTMg
KzIxNzAsNiBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLXZv
aWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENh
bGxMaW5rSW5mbyogaW5jb21pbmcpCi17Ci0gICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZy
YW1lKTsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5zdXJl
SklURGF0YShsb2NrZXIpLm1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKLX0KLQogdm9p
ZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKiBpbmNvbWluZykKIHsKICAgICBub3RpY2VJbmNv
bWluZ0NhbGwoY2FsbGVyRnJhbWUpOwpAQCAtMjE1MiwxMCArMjE4MCwxNiBAQCB2b2lkIENvZGVC
bG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUs
IFBvbHltb3JwaGljQwogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKK3ZvaWQgQ29kZUJsb2Nr
OjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyog
aW5jb21pbmcpCit7CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBt
X2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxp
bmtJbmNvbWluZ0NhbGxzKCkKIHsKLSAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVn
aW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ0xM
SW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CisgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5i
ZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ0NhbGxz
LmJlZ2luKCktPnVubGluayh2bSgpKTsKICNpZiBFTkFCTEUoSklUKQogICAgIEpJVERhdGEqIGpp
dERhdGEgPSBudWxscHRyOwogICAgIHsKQEAgLTIxNjMsMjAgKzIxOTcsMTIgQEAgdm9pZCBDb2Rl
QmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogICAgICAgICBqaXREYXRhID0gbV9qaXREYXRh
LmdldCgpOwogICAgIH0KICAgICBpZiAoaml0RGF0YSkgewotICAgICAgICB3aGlsZSAoaml0RGF0
YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmVu
ZCgpKQotICAgICAgICAgICAgaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGlu
ayh2bSgpKTsKICAgICAgICAgd2hpbGUgKGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0Nh
bGxzLmJlZ2luKCkgIT0gaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkp
CiAgICAgICAgICAgICBqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigp
LT51bmxpbmsodm0oKSk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIExMSW50
Q2FsbExpbmtJbmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVy
RnJhbWUpOwotICAgIG1faW5jb21pbmdMTEludENhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCiBD
b2RlQmxvY2sqIENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQogewogICAgIHJldHVybiBvd25l
ckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25L
aW5kKCkpOwpAQCAtMjMyOSwyMiArMjM1NSwyMiBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24o
UHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1vZAog
ICAgIGlmICh2bS5oZWFwLmN1cnJlbnRUaHJlYWRJc0RvaW5nR0NXb3JrKCkgJiYgIXZtLmhlYXAu
aXNNYXJrZWQob3duZXJFeGVjdXRhYmxlKCkpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFC
TEUoSklUKQogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgICAgICBpZiAoSklURGF0YSogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAg
ICAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5m
b3MpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeUpldHRpc29uKCk7
Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEq
IGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8qIGNhbGxMaW5rSW5mbyA6IGRmZ0NvbW1vbi0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAgfQor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdD
b21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOworICAgICAgICAgICAgICAgIGZvciAoYXV0
byogY2FsbExpbmtJbmZvIDogZGZnQ29tbW9uLT5tX2NhbGxMaW5rSW5mb3MpCisgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKKyAgICAgICAg
ICAgIH0KICNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yRWFjaExMSW50
T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsK
KyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAKICAgICAvLyBUaGlzIGFj
Y29tcGxpc2hlcyAoMikuCiAgICAgb3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKHZtLCBh
bHRlcm5hdGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yODQ3
LDE5ICsyODczLDEzIEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRlCiB7CiAgICAgYXV0byBpbnN0
cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRjaCAo
aW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKLSNkZWZpbmUgQ0FTRTEoT3ApIFwKKyNkZWZpbmUg
Q0FTRShPcCkgXAogICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCiAgICAgICAgIHJldHVybiAmaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJyYXlQcm9maWxlOwogCi0jZGVm
aW5lIENBU0UyKE9wKSBcCi0gICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKLSAgICAgICAgcmV0dXJu
ICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9jYWxsTGlua0luZm8ubV9h
cnJheVByb2ZpbGU7Ci0KLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENB
U0UxKQotICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENBU0Uy
KQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRSkKIAotI3VuZGVm
IENBU0UxCi0jdW5kZWYgQ0FTRTIKKyN1bmRlZiBDQVNFCiAKICAgICBjYXNlIE9wR2V0QnlJZDo6
b3Bjb2RlSUQ6IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCk7CkBAIC0zMDI5LDE3ICszMDQ5LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVB
bGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
CiAgICAgICAgIH0KICAgICB9KTsKIAotI2RlZmluZSBWSVNJVDEoX19vcCkgXAorI2RlZmluZSBW
SVNJVChfX29wKSBcCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1l
dGFkYXRhKSB7IHByb2Nlc3MobWV0YWRhdGEubV9hcnJheVByb2ZpbGUpOyB9KTsKIAotI2RlZmlu
ZSBWSVNJVDIoX19vcCkgXAotICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRv
JiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9m
aWxlKTsgfSk7Ci0KLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lU
MSkKLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJVDIp
CisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShWSVNJVCkKIAotI3VuZGVm
IFZJU0lUMQotI3VuZGVmIFZJU0lUMgorI3VuZGVmIFZJU0lUCiAKICAgICBtX21ldGFkYXRhLT5m
b3JFYWNoPE9wSXRlcmF0b3JOZXh0PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7CiAgICAgICAgIHBy
b2Nlc3MobWV0YWRhdGEubV9pdGVyYWJsZVByb2ZpbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDY0ZjlmNWFiY2ZlMmFlNzA1ZDFkYTY1YWE5Zjgz
MTk3Yjk2YzZkMzEuLmI3YWVhMjY3N2Y1ZTk0OTA4YWIzNTVmOTZiMGQyM2MzNzgyNDIwMTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTU0LDcgKzU0
LDYgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIkp1bXBUYWJsZS5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAj
aW5jbHVkZSAiTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJNZXRhZGF0YVRh
YmxlLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCIKQEAgLTI2MSw4ICsy
NjAsNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgICAgICBGaXhlZFZlY3RvcjxTdHJ1
Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEZpeGVkVmVjdG9yPENhbGxMaW5r
SW5mbz4gbV9jYWxsTGlua0luZm9zOwotICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExp
bmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0Nh
bGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFj
a2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1v
cnBoaWNDYWxsczsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxz
ZSB9OwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7
CkBAIC0yOTEsNyArMjg4LDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgLy8gVGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29t
cGlsaW5nIE9TUiBleGl0cyBpbiB0aGUgY2FzZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4g
aW5saW5pbmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVh
bGx5CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhl
IGNvc3Qgb2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZv
Rm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0
ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwog
CkBAIC0zMDksMTQgKzMwNiwxMSBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7
Ci0KLSNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUq
IGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8qKTsKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQg
bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHlt
b3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0gICAgdm9pZCBsaW5r
SW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7
Ci0KICAgICBjb25zdCBJbnN0cnVjdGlvbiogb3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0
cnVjdGlvbiogcGMpOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQgb2Zmc2V0KQogICAgIHsKQEAgLTQ1Myw3ICs0NDcsNyBAQCBjbGFzcyBDb2Rl
QmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3Qg
RnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9y
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTExJbnRPckJh
c2VsaW5lQ2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsK
ICAgICBVbmFyeUFyaXRoUHJvZmlsZSogdW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXgpOwpAQCAtOTU5LDcgKzk1Myw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1
YmxpYyBKU0NlbGwgewogICAgIFZNKiBtX3ZtOwogCiAgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVj
dGlvbnNSYXdQb2ludGVyIHsgbnVsbHB0ciB9OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTElu
dENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4g
bV9pbmNvbWluZ0xMSW50Q2FsbHM7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5m
bywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsK
ICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsK
ICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAppbmRleCAx
ZDU5NGFiODM1Mjg5N2VjOGE3NDVlYTI0OTNmOGQyZGEwMThiOTYyLi45MmRhOTlhMGJhMmFjYzFm
Y2RiNmE5NzM1ZmNkZGUyM2VmYzkzM2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJiBmdW5j
KQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJiBmdW5jKQordm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYgZnVuYykK
IHsKICAgICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTMyZTliNjZiYjdjNjFmZWIzMzlmODA1MjhjMmQz
NDcxZDgwNjhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCisrKyAv
ZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNDUHRyVGFn
LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgotI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLXN0cnVjdCBJbnN0cnVjdGlvbjsKLQotY2xhc3MgTExJbnRDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPiB7Ci1wdWJs
aWM6Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludHB0cl90IHVubGlua2VkQml0ID0gMHgxOwotCi0gICAgTExJbnRDYWxs
TGlua0luZm8oKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgfkxMSW50Q2FsbExpbmtJbmZvKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiAhKG1fY2FsbGVlT3JM
YXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYgdW5saW5rZWRCaXQpOyB9Ci0gICAgCi0KLSAgICB2
b2lkIGxpbmsoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLSAgICB7Ci0gICAgICAgIGlm
IChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgICAgIG1fY2FsbGVlT3JM
YXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVl
KTsKLSAgICAgICAgdm0ud3JpdGVCYXJyaWVyKG93bmVyLCBjYWxsZWUpOwotICAgICAgICBtX21h
Y2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKLSAgICB9Ci0KLSAgICB2b2lkIHVubGluaygpCi0g
ICAgewotICAgICAgICAvLyBNYWtlIGxpbmsgaW52YWxpZGF0ZWQuIEl0IHdvcmtzIGJlY2F1c2Ug
TExJbnQgdGVzdHMgdGhlIGdpdmVuIGNhbGxlZSB3aXRoIHRoaXMgcG9pbnRlci4gQnV0IGl0IGlz
IHN0aWxsIHZhbGlkIGFzIGxhc3RTZWVuQ2FsbGVlIQotICAgICAgICBtX2NhbGxlZU9yTGFzdFNl
ZW5DYWxsZWVXaXRoTGlua0JpdCB8PSB1bmxpbmtlZEJpdDsKLSAgICAgICAgbV9tYWNoaW5lQ29k
ZVRhcmdldCA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwotICAgICAg
ICBpZiAoaXNPbkxpc3QoKSkKLSAgICAgICAgICAgIHJlbW92ZSgpOwotICAgIH0KLQotICAgIEpT
T2JqZWN0KiBjYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFpc0xpbmtlZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
SlNPYmplY3QqPihtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCk7Ci0gICAgfQot
Ci0gICAgSlNPYmplY3QqIGxhc3RTZWVuQ2FsbGVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8SlNPYmplY3QqPihtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRo
TGlua0JpdCAmIH51bmxpbmtlZEJpdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckxhc3RTZWVu
Q2FsbGVlKCkKLSAgICB7Ci0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5r
Qml0ID0gdW5saW5rZWRCaXQ7Ci0gICAgfQotCi0gICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9m
aWxlOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQot
Ci1wcml2YXRlOgotICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlu
a0JpdCB7IHVubGlua2VkQml0IH07Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IG1fbWFjaGluZUNvZGVUYXJnZXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAppbmRleCBjYThiZWYzMjhiNGJmYjJi
MGRmZGM4YjI4NTI0OTIxYWM4MzliZDM2Li4xY2JjNjZmODQ5OTU0OTk3ZWY3YzUwZDQ5Mzg0MzAy
ZjM1YzYyOWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bj
b2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCkBAIC0x
MjYsMTEgKzEyNiwxOSBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4
T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wUnNo
aWZ0KSBcCiAgICAgbWFjcm8oT3BHZXRQcml2YXRlTmFtZSkgXAogCi0jZGVmaW5lIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKKyNkZWZpbmUgRk9SX0VBQ0hfT1BD
T0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKKyAgICBtYWNybyhPcENhbGwp
IFwKKyAgICBtYWNybyhPcFRhaWxDYWxsKSBcCisgICAgbWFjcm8oT3BDYWxsRXZhbCkgXAorICAg
IG1hY3JvKE9wQ29uc3RydWN0KSBcCisgICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKKyAgICBt
YWNybyhPcEl0ZXJhdG9yTmV4dCkgXAogICAgIG1hY3JvKE9wQ2FsbFZhcmFyZ3MpIFwKICAgICBt
YWNybyhPcFRhaWxDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzKSBcCiAgICAgbWFjcm8oT3BDb25zdHJ1Y3RWYXJhcmdzKSBcCisKKyNkZWZpbmUgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wR2V0
QnlWYWwpIFwKICAgICBtYWNybyhPcEluQnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsKSBc
CkBAIC0xMzksNiArMTQ3LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZv
ck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhP
cEVudW1lcmF0b3JHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRvckluQnlWYWwpIFwK
ICAgICBtYWNybyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSkgXAorICAgIEZPUl9FQUNIX09Q
Q09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCiAKICNkZWZpbmUgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFj
cm8oT3BOZXdBcnJheSkgXApAQCAtMTQ4LDE0ICsxNTcsNiBAQCBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4
cHIobQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9PQkpFQ1RfQUxMT0NBVElPTl9QUk9G
SUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdPYmplY3QpIFwKIAotI2RlZmluZSBGT1JfRUFD
SF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAotICAgIG1hY3JvKE9w
Q2FsbCkgXAotICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKLSAgICBtYWNybyhPcENhbGxFdmFsKSBc
Ci0gICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwKLSAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAot
ICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCi0KICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfQklOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcEFkZCkgXAogICAg
IG1hY3JvKE9wTXVsKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGQ5YzJlZDdkNDhlNWJhMjU2YTMzNDRkZjE2NmRjYWZiNzVjNjFiOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNo
LmNwcApAQCAtMCwwICsxLDIwMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwYXRj
aC5oIgorCisjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJD
YWxsRnJhbWVTaHVmZmxlci5oIgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
ICJERkdTcGVjdWxhdGl2ZUpJVC5oIgorI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgor
I2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkZ1bGxDb2RlT3JpZ2lu
LmgiCisjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklU
U3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0cy5oIgorI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZBY2Nlc3NDYXNlLmgiCisjaW5jbHVk
ZSAiSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNp
bmNsdWRlICJNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiUG9seW1vcnBo
aWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2lu
Y2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgor
I2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmlu
dGVyLmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgdm9pZCBsaW5rU2xvd1Bh
dGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgY2FsbExpbmtJbmZvLnNl
dFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2Vk
PEpTRW50cnlQdHJUYWc+KCkpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyB2b2lkIGxp
bmtTbG93UGF0aFRvKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcikKK3sKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZv
LCB2bS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KCkpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxs
TGlua0luZm8uY2FsbE1vZGUoKSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5m
bywgdmlydHVhbFRodW5rKTsKK30KKworc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25lcihK
U0NlbGwqIGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgLy8gRWFjaCBX
ZWJBc3NlbWJseS5JbnN0YW5jZSBzaGFyZXMgdGhlIHN0dWJzIGZyb20gdGhlaXIgV2ViQXNzZW1i
bHkuTW9kdWxlLCB3aGljaCBhcmUgdGhlcmVmb3JlIHRoZSBhcHByb3ByaWF0ZSBvd25lci4KKyAg
ICByZXR1cm4ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjYWxsZWUpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKK30K
Kwordm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKAorICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywKKyAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwor
CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsK
KyAgICAvLyBPdXIgY2FsbGVyIG11c3QgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNh
bGxpbmcKKyAgICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBj
ZWxsLgorICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOworCisgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CisK
KyAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJs
b2NrLgorICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1l
LT5jYWxsZWUoKS5hc0NlbGwoKSkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxs
ZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgQVNTRVJUKG93bmVyKTsKKwor
ICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOworICAgIGNhbGxMaW5rSW5mby5z
ZXRNb25vbW9ycGhpY0NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7CisgICAgY2Fs
bExpbmtJbmZvLnNldExhc3RTZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKworICAgIGlm
IChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKKyAgICAgICAgZGF0
YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywg
Y2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29k
ZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKKworICAgIGlmIChj
YWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2Fs
bChjYWxsZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGlm
IChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2Fs
bExpbmtJbmZvLmFsbG93U3R1YnMoKSkgeworICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2Fs
bExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgCisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5r
SW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBjb2RlUmVmKQoreworICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgeworI2lmIEVO
QUJMRShKSVQpCisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOworICAgICAg
ICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisjZW5kaWYKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7CisgICAgICAg
ICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKworICAgICAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLnJldmVydENhbGxUb1N0dWIoKTsKKyAgICAgICAgfQorICAgICAgICBjYWxsTGlua0luZm8u
Y2xlYXJDYWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJvdGgg
Zm9yIGRhdGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgorICAgIH0KKyAgICBjYWxsTGlua0luZm8u
Y2xlYXJTZWVuKCk7CisgICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOworICAgIGlmIChjYWxs
TGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQor
Cit2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sK
KyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBD
YWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOworICAgIAorICAgIHJl
dmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dlZDxK
SVRTdHViUm91dGluZVB0clRhZz4oKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgaWYgKCFjYWxsZWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChraW5kICE9
IENvZGVGb3JDYWxsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byogd2Fz
bUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNhbGxl
ZSkpCisgICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7CisgICAg
VU5VU0VEX1BBUkFNKGNhbGxlZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
I2lmIEVOQUJMRShKSVQpCisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJl
dGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBv
cGVyYXRpb24pCit7CisgICAgSlNDX1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJ
REFUSU9OKG9wZXJhdGlvbik7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gY2FsbCkKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VU
X1dJVEhfVkFMSURBVElPTihjYWxsKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygp
KQorICAgICAgICByZXR1cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5mby5t
X3Nsb3dPcGVyYXRpb24pOworICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4g
Y2FsbCA9IHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb247CisjaWYgRU5BQkxFKEZUTF9K
SVQpCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewor
ICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJs
ZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhW
YWxpZGF0aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRo
dW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGNvZGVCbG9jayk7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmV0dXJuIHJldGFn
Q2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKGNhbGwpOworfQorCit2b2lkIGZ0bFRodW5rQXdhcmVS
ZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1
bmN0aW9uKQoreworI2lmIEVOQUJMRShGVExfSklUKQorICAgIGlmIChjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKKyAgICAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52
bSgpOworICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKKyAgICAg
ICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpy
ZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CisgICAgICAgIGF1dG8gc2xvd1Bh
dGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZy
b21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAg
IEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVu
ayhzbG93UGF0aFRodW5rKTsKKyAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0Nh
bGxlZUZ1bmN0aW9uKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGws
IEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmso
dm0sIGtleSkuY29kZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvLyBFTkFC
TEUoRlRMX0pJVCkKKyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2Fs
bGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKK30KKworc3RhdGljIHZv
aWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1
bmN0aW9uKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIHN0
dWJJbmZvLm1fc2xvd09wZXJhdGlvbiA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJh
dGlvblB0clRhZz4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdGxUaHVua0F3YXJl
UmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBu
ZXdDYWxsZWVGdW5jdGlvbik7Cit9CisKK2VudW0gSW5saW5lQ2FjaGVBY3Rpb24geworICAgIEdp
dmVVcE9uQ2FjaGUsCisgICAgUmV0cnlDYWNoZUxhdGVyLAorICAgIEF0dGVtcHRUb0NhY2hlCit9
OworCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2
bSk7CisKKyAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKKyAg
ICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCisgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3Jl
KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgLy8gRmxhdHRl
bmluZyBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZvciBh
bm90aGVyIHRyeS4KKyAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2Jq
ZWN0KHZtKTsKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Cit9
CisKK3N0YXRpYyBib29sIGZvcmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKK3sKKyAgICBy
ZXR1cm4gT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKTsKK30KKworQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1YkFu
ZEZpcmVXYXRjaHBvaW50cygpKSB7CisgICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHModm0p
OworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KGxv
Y2tlciwgY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaW5saW5lIEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihH
ZXRCeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5S2lu
ZDo6QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAgICBj
YXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtp
bmQ6OkJ5SWREaXJlY3Q6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Cisg
ICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgIGNhc2Ug
R2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZUJ5SWRPcHRpbWl6ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9w
cmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkg
eworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0
QnlJZDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4g
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzOworICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZDsKKyAgICBjYXNlIEdldEJ5S2luZDo6
QnlJZERpcmVjdDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7CisgICAg
Y2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxH
ZW5lcmljOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFt
ZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7Cisg
ICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ss
IGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2Jh
bE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCisg
ICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
CisgICAgICAgIGNvbnN0IGJvb2wgaXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lIHx8IGtpbmQgPT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7CisKKyAgICAgICAg
UmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc0pTQXJyYXko
YmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09
IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2VDZWxsCisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNo
ZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJh
c2VDZWxsKSkpIHsKKworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5m
bywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRB
cnJheUxlbmd0aChsb2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5
Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAg
ICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0
dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8p
OworICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwg
cHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBh
cmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBj
YW4gaGFuZGxlIHRoaXMgYXMgYSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKKyAgICAg
ICAgICAgICAgICAvLyB0aGlzIHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFu
IElDIGNhc2UgZm9yIHRoYXQgbG9hZCBpZiBuZWVkZWQuCisgICAgICAgICAgICAgICAgaWYgKCFh
cmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2Ug
PSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJn
dW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChTY29w
ZWRBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4o
dm0sIGJhc2VDZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIERpdHRvLgorICAgICAgICAgICAg
ICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQorICAgICAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6
OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNl
bGwtPmluaGVyaXRzPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNl
dCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5t
b2R1bGVOYW1lc3BhY2VTbG90KCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5h
bWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpz
Q2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNl
U2xvdC0+ZW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3Bl
T2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2FzZSkgewor
ICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgICAgICBi
b29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChiYXNlQ2Vs
bC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICAgICAg
aWYgKGlzUHJpdmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCkt
PnRhcmdldCgpOworICAgICAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgp
OworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwor
ICAgICAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxs
KHZtLCBiYXNlQ2VsbCk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hl
KQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9wdGlt
aXplIHNlbGYgYWNjZXNzLgorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09
IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKQorICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAg
ICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICAgICAm
JiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAg
ICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgeworICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsK
KyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwgY29k
ZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNz
Q2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworCisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9m
ZnNldCgpOworCisgICAgICAgICAgICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xvdEJh
c2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1
c3RvbXMsIHdlIG11c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKKyAgICAgICAg
ICAgICAgICAvLyBuZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNp
bmNlIHdlIGNhY2hlIHRoZQorICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBv
aW50ZXIuCisKKyAgICAgICAgICAgICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xv
YmFsT2JqZWN0LCBzbG90LnNsb3RCYXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkg
eworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpz
Q2FzdDxKU09iamVjdCo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7IC8vIFdlIG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkg
JiYgc3RydWN0dXJlLT50eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgICAgICAgICAgICAgLy8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERpcmVj
dCBvciBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3RpZ2F0
ZSBwcm90b3R5cGUgY2hhaW5zIGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgLy8gQ2FjaGVhYmls
aXR5IGp1c3QgZGVwZW5kcyBvbiB0aGUgaGVhZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAg
aWYgKGtpbmQgIT0gR2V0QnlLaW5kOjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmco
Z2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rp
b25hcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMgbWF5
IGhhdmUgY2hhbmdlZCBkdWUgdG8gZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9s
eVByb3RvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9
IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwg
c2xvdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWlu
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0
dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3VsZCBi
ZSBpbnNpZGUgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlCbGFoLgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
NTIxNQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUu
dWlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9m
ZnNldCgpID09IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90
QmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlk
KCksIHNsb3QuYXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU0Z1bmN0aW9uKiBnZXR0ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKHNsb3QuaXND
YWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0
PEpTRnVuY3Rpb24qPih2bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOworCisgICAg
ICAgICAgICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0
ZTsKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21B
dHRyaWJ1dGUoKSkKKyAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJp
YnV0ZSgpOworCisgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsK
KyAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgICAg
ICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICB0
eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90Lmlz
VW5zZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAg
ICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0R2V0dGVyOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgfSBlbHNlIGlmICgh
bG9hZFRhcmdldEZyb21Qcm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2Fz
ZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQor
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgZ2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWlu
KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKSB7
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpMb2FkLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RG
TW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
c2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJs
b2NrLCBzbG90LmlzVW5zZXQoKSA/IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2Fk
LAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQo
KSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1
c3RvbUFjY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6
OkN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMg
JiYgdHlwZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1
dGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAg
ICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRl
KAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlO
YW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5
LAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90
LmN1c3RvbUdldHRlcigpKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNs
b3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBkb21BdHRy
aWJ1dGUsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okdl
dEJ5QWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBi
YXNlVmFsdWUpKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxv
Y2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVy
dHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRl
ZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNl
V2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVl
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2Rl
KCkpOworICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5
S2luZDo6QnlJZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Cisg
ICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgICAgIGNhc2UgR2V0
QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVO
YW1lQnlJZDoKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJ
bkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtp
bmQ6OlByaXZhdGVOYW1lOgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAg
fQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZv
LCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNo
R2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5
S2luZCBraW5kKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKKyAgICAKKyAgICBpZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZl
VXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlvbihraW5kKSk7Cit9CisKKworc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUg
aW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2VWYWx1
ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoIWlu
ZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJl
c3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBKU0NlbGwq
IGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNz
VHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFyZ3Vt
ZW50c1R5cGUpCisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERp
cmVjdEFyZ3VtZW50c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTY29w
ZWRBcmd1bWVudHNUeXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRTY29wZWRBcmd1bWVudHNMb2FkOworICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkg
PT0gU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkU3RyaW5nTG9hZDsKKyAgICAgICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJ
bmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNoIChi
YXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9h
ZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2Ogor
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eUludDE2TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlVaW50MTZMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlG
bG9hdDY0TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAg
ICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWlu
dDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBl
IGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNr
OworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBjYXNl
IEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRJbnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkRG91YmxlTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkQ29udGlndW91c0xvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQg
PSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2Rl
QmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBs
YWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8s
IGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygp
ID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJy
YXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5
VmFsR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90
LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgc3dpdGNoIChw
dXRCeUtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2gg
KHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9u
U3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNT
RVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtp
bmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5p
c1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWM7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAvLyBNYWtlIHdp
biBwb3J0IGNvbXBpbGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0
eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAg
ICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAg
ICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAg
ICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90
LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJp
dmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29t
cGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBudWxscHRyOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1
ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwor
CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2VWYWx1ZS5p
c0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSAmJiAhc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8gc29t
ZXRoaW5nIHNtYXJ0ZXIgaGVyZS4uLgorICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1
Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworICAgICAgICAvLyBXZSBjYW4ndCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUgcHJv
dG90eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBvd24gcHJvcGVydGllcy4KKyAgICAgICAgQVNTRVJU
KCFpc0NvcHlPbldyaXRlKHNsb3QuYmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOworCisgICAgICAg
IGlmICghb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBKU0NlbGwqIGJhc2VDZWxs
ID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNlOwor
ICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkg
eworICAgICAgICAgICAgYmFzZUNlbGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFy
Z2V0KCk7CisgICAgICAgICAgICBiYXNlVmFsdWUgPSBiYXNlQ2VsbDsKKyAgICAgICAgICAgIGlz
UHJveHkgPSB0cnVlOworCisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBS
ZXBsYWNlIGFuZCBKUy9DdXN0b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAorICAgICAg
ICAgICAgLy8gY2FjaGUgdHJhbnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5l
dmVyIHNoYXJlIHRoZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAo
c2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6
RXhpc3RpbmdQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0
dGVyKCkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7CisgICAg
ICAgICAgICBpZiAoIWlzQ2FjaGVhYmxlUHJveHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0S2lu
ZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAg
aWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsK
KyAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5n
UHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRjaCBi
dWdzIGlmIHdlIGFjY2lkZW50YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCisgICAgICAg
ICAgICAgICAgLy8gd2hlbiB3ZSB0cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3Rpbmcg
cHJvcGVydHkuIFRoaXMgaXMgY29tbW9uIGFtb25nCisgICAgICAgICAgICAgICAgLy8gcGF0aHMg
dGhhdCByZWlmeSBsYXp5IHByb3BlcnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBh
bmQgZm9yZ2V0CisgICAgICAgICAgICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkg
Y29tZSBkb3duIHRoaXMgcGF0aC4gVGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKKyAgICAgICAgICAg
ICAgICAvLyBrbm93IGhvdyB0byBtb2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNp
dGlvbnMgKG9yIGFueSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGZv
ciB0aGF0IG1hdHRlcikuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG9sZFN0cnVjdHVyZSk7CisKKyAgICAgICAgICAg
ICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAm
JiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiAh
b2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgIWlzUHJveHkpIHsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVu
Y3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxl
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHBy
b3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCgpLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xv
dC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIHN0
cnVjdHVyZSBpcyBkaWN0aW9uYXJ5LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBi
ZXR3ZWVuIGFuIG9iamVjdCBhbmQgYSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gSWYg
dGhpcyBpcyBOZXdQcm9wZXJ0eSBvcGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9l
cyBub3Qgb2ZmZXIgYW55IGJlbmVmaXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFw
cGVucyBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAg
ICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBpcyBv
dmVycmlkZGVuIGJ5IFVzZXJPYmplY3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVm
ZmVjdCBvbiBKU09iamVjdDo6cHV0LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0UHJv
cGVydHlTbG90IGFzIG5vbi1jYWNoYWVibGUsCisgICAgICAgICAgICAgICAgLy8gdGhlbiBhcmJp
dHJhcnkgc3RydWN0dXJlIHRyYW5zaXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQgb3Bl
cmF0aW9uLCBhbmQgdGhpcyBnZW5lcmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBo
ZXJlIGFzIGlmIG9sZFN0cnVjdHVyZSAtPiBuZXdTdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAg
Ly8gSW4gcmVhbGl0eSwgdGhlIHRyYW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0aGlu
ZyB1bmtub3duIHN0cnVjdHVyZXMgLT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgorICAgICAgICAg
ICAgICAgIC8vIFRvIGd1YXJkIGFnYWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5j
b3JyZWN0IFVzZXJPYmplY3Q6OnB1dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZv
ciB0aGlzIGNvbmRpdGlvbiBhbmQgaWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhl
IHB1dC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUodm0pID09IG5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKHZtKSAhPSBuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0
cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0No
YWluOworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKKyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZv
ckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVz
ZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0No
YWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VD
ZWxsLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNj
ZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3Mo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0
LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50Lmlz
UHJpdmF0ZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVydHlO
YW1lLCBvZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdU
Rk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBzdHViSW5mbyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNo
ZWFibGVTZXR0ZXIoKSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSkgeworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlv
blNldDsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3Rv
dHlwZUFjY2Vzc0NoYWluOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlz
IGV2ZW4gaWYgd2UncmUgYSBzZWxmIGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0
aW9uYXJpZXMKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5mb3Jt
ZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50Cisg
ICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24gcG9pbnRlci4KKyAgICAgICAgICAgICAgICBhdXRv
IGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VD
ZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAg
ICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGds
b2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCks
IGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpO
b25lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nh
c2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIs
IG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICBpbnZhbGlk
T2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1By
b3h5LCBzbG90LmN1c3RvbVNldHRlcigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFnPigp
LCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpKTsKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBj
b25kaXRpb25TZXQ7CisgICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWlu
PiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCisgICAgICAgICAgICAgICAgaWYgKHNsb3Qu
YmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3Rh
dHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90
LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShn
bG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3RvdHlw
ZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2
bSkpLT5nZXQodm0sIGlkZW50LmltcGwoKSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50Lmlt
cGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRp
dGlvbigpLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBv
bGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUo
cHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cisg
ICAgICAgIAorICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6
c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdD
YXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworCisg
ICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVz
dWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5k
Q2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAg
ICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5
Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRC
eUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZVB1dEJ5
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNh
Y2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7
Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUg
YmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEtpbmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEpTQ2Vs
bCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0lu
Zm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJh
c2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0
b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6
CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJT
dG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0
NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Ly8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwor
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5
cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdT
aGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNz
Q2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBn
bG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3ND
YXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwg
bnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51
bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAg
ICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1
ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRl
cjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUg
ZWNtYU1vZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNh
Y2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1
dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKK30K
Kworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xv
dCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsK
KyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
aywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xv
YmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAg
IEFTU0VSVChvbGRTdHJ1Y3R1cmUpOworICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgp
IHx8ICFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRT
dHJ1Y3R1cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZURlbGV0ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAganNDYXN0PEpTT2JqZWN0
Kj4oYmFzZVZhbHVlKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbGRTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAo
c2xvdC5pc0RlbGV0ZUhpdCgpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZz
ZXQgPSBpbnZhbGlkT2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVy
dHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBBU1NF
UlQobmV3T2Zmc2V0ID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5k
OjpQcm9wZXJ0eURlbGV0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkpOworICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7
CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2Rl
QmxvY2ssIHByb3BlcnR5TmFtZSwgbmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVy
ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7CisgICAg
ICAgICAgICBpZiAoZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHByb3Bl
cnR5TmFtZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZhbGlk
T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7CisKKyAgICAgICAgcmVzdWx0ID0g
c3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBl
Y21hTW9kZSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAo
cmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxh
Y2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJT
dHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKK30KKwordm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQg
a2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKwor
ICAgIGlmICh0cnlDYWNoZURlbGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBi
YXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwgZWNt
YU1vZGUpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxC
eVJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxPYmpl
Y3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7
CisgICAgICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZEdl
bmVyaWMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7CisgICAgfQor
fQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGlt
aXppbmdJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlk
T3B0aW1pemU7CisgICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6Cisg
ICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQg
a2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkR2VuZXJpYzsKKyAgICBjYXNlIEluQnlLaW5k
OjpCeVZhbDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOworICAgIGNh
c2UgSW5CeUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVHZW5lcmljOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAorICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCog
YmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCisgICAgYm9vbCB3YXNGb3Vu
ZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IEluQnlLaW5kIGtpbmQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworCisgICAgeworICAg
ICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2
bSk7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2UtPnN0
cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5k
ICYmICFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9y
QWJzZW5jZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAK
KyAgICAgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFi
bGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUo
dm0pOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90
b3R5cGVBY2Nlc3NDaGFpbjsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0OworICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIElubGluZUNh
Y2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICAgICAg
aWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0
aW9uOworCisgICAgICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICAgICAgICAg
IGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAg
ICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICAgICAmJiBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRT
ZXQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywg
c3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewor
ICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUpOworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2Nr
ZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJh
c2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBh
cmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rp
b25hcnkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAg
ICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6
dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0
cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVy
dHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFz
ZUNvbmRpdGlvbigpLm9mZnNldCgpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFz
ZSwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMt
PnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9
IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygK
KyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nl
c3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09
IGJhc2UpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmNyZWF0ZSgKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2Fz
ZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQgPyBz
bG90LmNhY2hlZE9mZnNldCgpIDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25T
ZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKworICAgICAgICByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVD
TUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAg
ICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5kOjpC
eUlkKQorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdh
dGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJl
c3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVV
cE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEluQnkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNGb3Vu
ZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IEluQnlLaW5kIGtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh0
cnlDYWNoZUluQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3BlcnR5
TmFtZSwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7
CisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VPYmpl
Y3QtPmNsYXNzSW5mbyhnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVC
cmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3Vu
ZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisK
KyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkp
CisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2FjaGVB
Y3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rp
b24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAg
ICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVBy
b3BlcnR5KSk7CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFj
Y2Vzc0Nhc2U6OkluTWlzcywgYnJhbmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7IH0s
IHsgfSk7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIs
IGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdU
Rk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUo
KSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNj
ZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVz
dWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5k
Q2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAg
ICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5
Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9i
amVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1Yklu
Zm8pID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAorICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVj
dCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
QWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgeworICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Cisg
ICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
LT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFj
dGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0Nh
Y2hlKQorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICBib29sIGlzQmFzZVBy
b3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFu
ZEFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9w
ZXJ0eSkpOworCisgICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
Y3JlYXRlQ2hlY2tQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0dXJl
KTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92
ZShuZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7
CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdp
dGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsK
KworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAg
ICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFu
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNP
YmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKKworICAgIGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0gR2l2
ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMpOworfQorCitzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisg
ICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrLCB2bSk7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQor
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBBU1NF
UlQob2xkU3RydWN0dXJlKTsKKworICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkKKyAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAgSW5s
aW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAg
IGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9u
OworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OnNldEJyYW5kVHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRT
dHJ1Y3R1cmUsIGJyYW5kSUQudWlkKCkpOworICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKKyAg
ICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUp
OworICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5z
aXRpb25LaW5kOjpTZXRCcmFuZCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2Jq
ZWN0KCkpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Cisg
ICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xk
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAg
ICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2YXRl
QnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUp
OworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3Zl
KG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsK
KyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhK
dW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7
CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNv
ZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNo
U2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKwor
ICAgIGlmICh0cnlDYWNoZVNldFByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
YmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9u
Q2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZUluc3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBw
cm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2Fz
Rm91bmQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFs
dWUuaXNDZWxsKCkpOyAvLyBzaG91bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2VsbHMu
CisgICAgCisgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworICAgIAorICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAKKyAgICAg
ICAgSlNDZWxsKiB2YWx1ZSA9IHZhbHVlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdmFsdWUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIFJlZlB0cjxBY2Nl
c3NDYXNlPiBuZXdDYXNlOworICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWlj
Q2FzdDxKU09iamVjdCo+KHZtLCBwcm90b3R5cGVWYWx1ZSk7CisgICAgICAgIGlmIChwcm90b3R5
cGUpIHsKKyAgICAgICAgICAgIGlmICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNy
ZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5z
dGFuY2VPZk1pc3MsIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgcHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Ry
dWN0dXJlLT5wcm90b3R5cGVRdWVyaWVzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogVGVhY2ggdGhpcyB0byBkbyBwb2x5IHByb3RvLgorICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKKyAgICAg
ICAgICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUsIHdh
c0ZvdW5kID8gcHJvdG90eXBlIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5z
dGFuY2VPZigKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZSwgd2FzRm91bmQpOworCisgICAgICAgICAgICAgICAgaWYg
KGNvbmRpdGlvblNldC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9
IEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nlc3ND
YXNlOjpJbnN0YW5jZU9mSGl0IDogQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmICghbmV3Q2FzZSkKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hlYWJs
ZUlkZW50aWZpZXIoKSk7CisgICAgICAgIAorICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3Rh
bmNlT2ZBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkp
KTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9j
a2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRy
LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJh
dGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9m
UmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7
CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZv
LCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZl
VXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVw
YXRjaEluc3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1
ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQpCit7Cisg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIGlmICh0
cnlDYWNoZUluc3RhbmNlT2YoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUsIHBy
b3RvdHlwZVZhbHVlLCBzdHViSW5mbywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5z
dGFuY2VPZkdlbmVyaWMpOworfQorCit2b2lkIGxpbmtEaXJlY3RDYWxsKAorICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxs
ZWVDb2RlQmxvY2ssCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNv
ZGVQdHIpCit7CisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKyAgICAKKyAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisKKyAg
ICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgQVNTRVJUKCFjYWxs
TGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldENvZGVCbG9jayh2bSwg
Y2FsbGVyQ29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjYWxsZWVDb2RlQmxv
Y2spKTsKKyAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykp
CisgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxs
ZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJE
dW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7
CisKKyAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CisKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQor
ICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAmY2Fs
bExpbmtJbmZvKTsKK30KKwordm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNJiB2
bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2Fs
bExpbmtJbmZvKTsKK30KKworc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKworICAg
IGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spLAor
ICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVy
Q29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7CisKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENU
SVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICByZXZlcnRDYWxsKHZt
LCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CisgICAgY2FsbExpbmtJbmZvLnNldENsZWFy
ZWRCeVZpcnR1YWwoKTsKK30KKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRyIHsK
KyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKK307Cit9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCisK
K3ZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENhbGxWYXJp
YW50IG5ld1ZhcmlhbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLmFsbG93
U3R1YnMoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIC8vIER1
cmluZyBleGVjdXRpb24gb2YgbGlua1BvbHltb3JwaGljQ2FsbCwgd2Ugc3Ryb25nbHkgYXNzdW1l
IHRoYXQgd2UgbmV2ZXIgZG8gR0MuCisgICAgLy8gR0MgamV0dGlzb25zIENvZGVCbG9ja3MsIGNo
YW5nZXMgQ2FsbExpbmtJbmZvIGV0Yy4gYW5kIGJyZWFrcyBhc3N1bXB0aW9uIGRvbmUgYmVmb3Jl
IGFuZCBhZnRlciB0aGlzIGNhbGwuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDRm9yQVdo
aWxlKHZtKTsKKyAgICAKKyAgICBpZiAoIW5ld1ZhcmlhbnQpIHsKKyAgICAgICAgbGlua1ZpcnR1
YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUu
IFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxl
ZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7
CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxv
Y2soKTsKKyAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxl
ckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSk7CisKKyAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBz
dHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgorICAgIEpTQ2VsbCogb3duZXIgPSBp
c1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXND
ZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOworICAgIEFTU0VSVChvd25lcik7CisKKyAgICBDYWxs
VmFyaWFudExpc3QgbGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0
dWIgPSBjYWxsTGlua0luZm8uc3R1YigpKQorICAgICAgICBsaXN0ID0gc3R1Yi0+dmFyaWFudHMo
KTsKKyAgICBlbHNlIGlmIChKU09iamVjdCogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxl
ZSgpKQorICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZhcmlhbnQob2xkQ2Fs
bGVlKSB9OworICAgIAorICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3QsIG5l
d1ZhcmlhbnQpOworCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNhbGxzIHRoZW4g
aXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBjYWxscy4KKyAg
ICAvLyBUaGlzIG1ha2VzIHN3aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQgYWxzbyBwcm9k
dWNlcyBwcm9maWxpbmcgdGhhdCdzIGVhc2llciBvbiB0aGUgREZHOworICAgIC8vIHRoZSBERkcg
ZG9lc24ndCByZWFsbHkgd2FudCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBvZiBjbG9zdXJl
IGFuZCBub24tY2xvc3VyZSBjYWxsZWVzLgorICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZhbHNl
OworICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpICB7CisgICAgICAgIGlmICh2
YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICAgICAgbGlzdCA9IGRlc3BlY2lmaWVk
VmFyaWFudExpc3QobGlzdCk7CisgICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChpc0Nsb3N1
cmVDYWxsKQorICAgICAgICBjYWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1cmUoKTsKKyAgICAK
KyAgICBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOworICAgIFZlY3Rvcjxp
bnQ2NF90PiBjYXNlVmFsdWVzOworICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIgY2Fz
ZXMgYXJlLgorICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpIHsKKyAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAodmFyaWFudC5leGVj
dXRhYmxlKCkgJiYgIXZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7Cisg
ICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHZhcmlhbnQuZXhlY3V0YWJs
ZSgpOworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICAvLyBJZiB3ZSBj
YW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgQ29k
ZUJsb2NrIG9yIGJlY2F1c2UgYXJpdHkgbWlzbWF0Y2gsCisgICAgICAgICAgICAvLyBhc3N1bWUg
dGhhdCBpdCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhIHZpcnR1YWwgY2Fs
bC4KKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAg
IGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50NjRf
dCBuZXdDYXNlVmFsdWUgPSAwOworICAgICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAgICAg
ICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmV4ZWN1
dGFibGUoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBwYXRo
IGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTMxMQorICAgICAgICAg
ICAgaWYgKCFuZXdDYXNlVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb24gPSB2YXJpYW50LmZ1bmN0
aW9uKCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0
cl90PihmdW5jdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3Q2Fz
ZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmludGVybmFsRnVuY3Rpb24o
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAg
ICAgIGlmIChjYXNlVmFsdWVzLmNvbnRhaW5zKG5ld0Nhc2VWYWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJFUlJPUjogQXR0ZW1wdCB0byBhZGQgZHVwbGljYXRlIGNhc2UgdmFsdWUu
XG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeGlzdGluZyBjYXNlIHZhbHVlczogIik7
CisgICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgdmFsdWUgOiBjYXNlVmFsdWVzKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KGNvbW1hLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFkZDogIiwgbmV3Q2FzZVZhbHVlLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJWYXJpYW50IGxpc3Q6ICIsIGxpc3REdW1wKGNh
bGxDYXNlcyksICJcbiIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjYWxsQ2FzZXMuYXBw
ZW5kKFBvbHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7CisgICAgICAgIGNh
c2VWYWx1ZXMuYXBwZW5kKG5ld0Nhc2VWYWx1ZSk7CisgICAgfQorICAgIEFTU0VSVChjYWxsQ2Fz
ZXMuc2l6ZSgpID09IGNhc2VWYWx1ZXMuc2l6ZSgpKTsKKworICAgIC8vIElmIHdlIGFyZSBvdmVy
IHRoZSBsaW1pdCwganVzdCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgorICAgIHVuc2lnbmVk
IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZTsKKyAgICBpZiAoaXNXZWJBc3NlbWJs
eSkKKyAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0gT3B0aW9uczo6
bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9yV2ViQXNzZW1ibHlUb0pTKCk7Cisg
ICAgZWxzZSBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6dG9wVGll
ckpJVCgpKQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRp
b25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVyKCk7CisgICAg
ZWxzZQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25z
OjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsKKworICAgIC8vIFdlIHVzZSBs
aXN0LnNpemUoKSBpbnN0ZWFkIG9mIGNhbGxDYXNlcy5zaXplKCkgYmVjYXVzZSB3ZSByZXNwZWN0
IENhbGxWYXJpYW50IHNpemUgZm9yIG5vdy4KKyAgICBpZiAobGlzdC5zaXplKCkgPiBtYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0s
IGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFZlY3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBVbmlx
dWVBcnJheTx1aW50MzJfdD4gZmFzdENvdW50czsKKworICAgIGlmICghaXNXZWJBc3NlbWJseSAm
JiBjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpIHsK
KyAgICAgICAgZmFzdENvdW50cyA9IG1ha2VVbmlxdWVBcnJheTx1aW50MzJfdD4oY2FsbENhc2Vz
LnNpemUoKSk7CisgICAgICAgIG1lbXNldChmYXN0Q291bnRzLmdldCgpLCAwLCBjYWxsQ2FzZXMu
c2l6ZSgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBjYWxs
ZWVHUFIgPSBjYWxsTGlua0luZm8uY2FsbGVlR1BSKCk7CisKKyAgICBib29sIGlzRGF0YUlDID0g
Y2FsbExpbmtJbmZvLmlzRGF0YUlDKCk7CisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoY2FsbGVy
Q29kZUJsb2NrKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4gZnJh
bWVTaHVmZmxlcjsKKyAgICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkgewor
ICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7CisgICAgICAgIGZyYW1l
U2h1ZmZsZXIgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2FsbExp
bmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAg
ICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEg
Y2VsbCwgYW5kIHdlIGNhbgorICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXIg
dGhpcyBidXlzIHVzLgorICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0NlbGwo
KTsKKyNlbmRpZgorICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7Cisg
ICAgfQorCisgICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKKyAgICBpZiAoaXNDbG9zdXJl
Q2FsbCkgeworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAgIGNvbXBhcmlz
b25WYWx1ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RT
Y3JhdGNoR1BSKGNhbGxlZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGNvbXBhcmlzb25WYWx1
ZUdQUiA9IGNhbGxlZUdQUjsKKworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUjsKKyAgICBp
ZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPSBmcmFtZVNodWZm
bGVyLT5hY3F1aXJlR1BSKCk7CisgICAgZWxzZSB7CisgICAgICAgIGZhc3RDb3VudHNCYXNlR1BS
ID0KKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVH
UFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIH0KKyAgICBzdHVi
Sml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3VudHMuZ2V0KCkpLCBm
YXN0Q291bnRzQmFzZUdQUik7CisKKyAgICBpZiAoIWZyYW1lU2h1ZmZsZXIgJiYgY2FsbExpbmtJ
bmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhhdCBj
YWxsZWVHUFIgaXMgbm90IGEgY2FsbGVlIHNhdmUgcmVnaXN0ZXIgaW4gdGhlIHNsb3cgcGF0aC4K
KyAgICAgICAgQVNTRVJUKCFjYWxsZXJDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+
ZmluZChjYWxsZWVHUFIpKTsKKyAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBp
ZiAoaXNDbG9zdXJlQ2FsbCkgeworICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVu
Y3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2hHUFIuCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpCisgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSLCBE
b05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUikpOworI2Vsc2UKKyAg
ICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlz
IGEgY2VsbC4KKyNlbmRpZgorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBw
YXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICBzbG93
UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOworCisg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBjb21wYXJpc29uVmFs
dWVHUFIpOworICAgICAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBzdHViSml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBjb21wYXJpc29uVmFsdWVHUFIsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29tcGFyaXNvblZhbHVlR1BSLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSwgY29tcGFyaXNvblZhbHVlR1BSKTsKKyAgICAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZzdHVi
Sml0KTsKKyAgICB9CisKKyAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25W
YWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoc3R1
YkppdCkpIHsKKyAgICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRjaC5jYXNlSW5k
ZXgoKTsKKyAgICAgICAgCisgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNb
Y2FzZUluZGV4XS52YXJpYW50KCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0
YWJsZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJ
VENvZGVGb3JDYWxsKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb2RlUHRyID0ganNU
b1dhc21JQ0NvZGVQdHIodm0sIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSwgdmFy
aWFudC5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAg
ICAgICBjb2RlUHRyID0gdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JD
YWxsKCktPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkpOwor
ICAgICAgICAgICAgY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKENvZGVGb3JDYWxsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZhc3RD
b3VudHMpIHsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkMzIoCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2YodWludDMyX3Qp
KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG5lZWRzRG9uZUp1bXAgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KHN0dWJKaXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OworICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENh
bGwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Cisg
ICAgICAgICAgICBzdHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAg
IGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNEYXRhSUMpCisgICAgICAgICAgICAgICAgY2Fs
bHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQu
bmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBuZWVkc0RvbmVKdW1wID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIgPSBj
b2RlUHRyOworICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkgeworICAgICAgICAgICAgQVNTRVJU
KCFpc0RhdGFJQyk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CisgICAg
YmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkubGluaygmc3R1YkppdCk7CisKKyAgICBpZiAoZnJh
bWVTaHVmZmxlcikgeworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQ
Uik7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BS
KTsKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVl
SlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKSk7
CisjZWxzZQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1Zh
bHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZsZXIt
PnByZXBhcmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQubW92
ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0KKyAgICBzdHViSml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1Qz
KTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlu
a0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0YUlD
LCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAgLy8g
Mi4gSWYgaXQgaXMgdGFpbC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBk
b25lTG9jYXRpb24gZm9yIHNsb3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0byBw
dXQgaXQgZm9yIHRoZSBzbG93LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAg
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
LmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJl
Z1Q0KTsKKyAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihH
UFJJbmZvOjpyZWdUNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlDKTsK
KyAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6
OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9yZVJl
dHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9CisgICAg
fQorCisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKKyAg
ICAgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAg
aWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgbGlua1ZpcnR1
YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNp
emUoKSk7CisgICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgewor
I2lmIENQVShBUk1fVEhVTUIyKQorICAgICAgICAvLyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcg
ZW5zdXJlcyBwcm9wZXIgbGlua2luZyBvbiBBUk0gVGh1bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBq
dW1wcyB0byBhbiBhZGRyZXNzCisgICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRv
bSBiaXQgYnV0IGEgbm9ybWFsIGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVk
IGJvdHRvbSBiaXQuCisgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2Fs
bC5pc0ZsYWdTZXQoQ0NhbGxIZWxwZXJzOjpDYWxsOjpUYWlsKTsKKyAgICAgICAgdm9pZCogdGFy
Z2V0ID0gaXNUYWlsQ2FsbCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6
IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRh
Zz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3ModGFyZ2V0KSkpOworI2Vsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQ
dHIuY29kZVB0cikpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKCFkb25lLmVtcHR5KCkpIHsK
KyAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9u
ZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKKyAgICB9CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1
YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIAorICAg
IGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKKyAgICAgICAgICAgIGNhbGxlckNvZGVC
bG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAorICAgICAgICAgICAgIlBv
bHltb3JwaGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIs
CisgICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJp
bmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAo
Y2FsbENhc2VzKSkuZGF0YSgpKSwKKyAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAorICAgICAgICBXVEZNb3ZlKGZhc3RD
b3VudHMpKSk7CisKKyAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxl
IG9uIDY0LWJpdHMsIGJ1dCBzdGlsbAorICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNl
IGEgbm9uLWNlbGwgY2FsbGVlIHdpbGwgYWx3YXlzCisgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBw
YXRoCisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisKKyAgICAvLyBJZiB0aGVy
ZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMg
c29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcworICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIg
b24gc3RhY2suCisgICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkp
OworICAgIAorICAgIC8vIFRoZSBjYWxsIGxpbmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2FsbCBj
YWNoZSBhcGFydCBmcm9tIHRoZSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsCisgICAgLy8g
c3R1Yi4KKyAgICBpZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCisgICAgICAgIGNhbGxMaW5r
SW5mby5yZW1vdmUoKTsKK30KKwordm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6
aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBH
ZXRCeUtpbmQ6OkJ5SWQ6CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKKyAgICBj
YXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoK
KyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICBJbmxpbmVBY2Nl
c3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgY2FzZSBHZXRCeUtpbmQ6
OlByaXZhdGVOYW1lOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNj
ZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQoreworICAgIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rp
b25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7
CisgICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5m
bykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZp
ZWxkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZp
ZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5VmFsOiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1p
emVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2Fs
bFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAg
ICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5l
cmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRH
ZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQ
cml2YXRlRmllbGRPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3Bl
cmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVs
ZEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFBy
aXZhdGVGaWVsZE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVk
RnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNj
ZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nl
c3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCByZXNldERlbEJ5
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5
S2luZCBraW5kKQoreworICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemUpOworICAgIGVsc2UKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKKyAgICBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCit7CisgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdJbkJ5RnVuY3Rpb24oa2luZCkpOworICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlk
KQorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8pOworICAgIGVsc2UKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJB
c0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwor
fQorCit2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNp
bmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRDaGVj
a1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQoreworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNjZXNzOjpy
ZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8pOworfQorCit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSk7CisgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVw
YXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45M2EwMzY1MzI2YWJmYmVkZWUwNTc1ODljNDU0MDliMmViMzY1ODk1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKworZW51bSBjbGFzcyBHZXRCeUtp
bmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCisgICAgVHJ5QnlJZCwKKyAgICBCeUlkV2l0aFRo
aXMsCisgICAgQnlJZERpcmVjdCwKKyAgICBQcml2YXRlTmFtZSwKKyAgICBQcml2YXRlTmFtZUJ5
SWQsCit9OworCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwK
K307CisKK2VudW0gY2xhc3MgRGVsQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsCit9Owor
CitlbnVtIGNsYXNzIEluQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorICAgIFByaXZh
dGVOYW1lCit9OworCit2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwordm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1Zh
bHVlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIEdldEJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xv
YmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRC
eUtpbmQsIFB1dEtpbmQpOwordm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBD
b2RlQmxvY2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUp
Owordm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0
KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90
JiwgU3RydWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hIYXNQcml2YXRl
QnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlk
ZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXBh
dGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVj
dCosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0
Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCos
IFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2
b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1
ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNG
b3VuZCk7Cit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4pOwordm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQg
dW5saW5rQ2FsbChWTSYsIENhbGxMaW5rSW5mbyYpOwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxs
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQp
Owordm9pZCByZXNldEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlL
aW5kKTsKK3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEJ5S2luZCk7Cit2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBEZWxCeUtpbmQpOwordm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBJbkJ5S2luZCk7Cit2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChD
b2RlQmxvY2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIEpTT2JqZWN0KiBjYWxsZWUpOworCisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yZWZlN2IxYjMzNzY0YmRmNDJiMmU0ZjAyZDRkZjBjZDllODFjNDllCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmgK
QEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlcGF0Y2guaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBj
YWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBjYWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOworCisgICAgaWYgKGNh
bGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAg
ICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOworICAgICAgICBBU1NF
UlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgICAgIGlmIChj
YWxsRGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKKyAgICAgICAgICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAg
IGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAgICAgICB2
bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihh
c09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAgICAg
ICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgK
KyAgICAgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgIExMSW50Ojpn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLAorICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5m
by0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhl
RnJhbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlID09IENh
bGxEYXRhOjpUeXBlOjpOb25lKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsK
KyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgIHZtLmdldENUSVRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAor
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAg
fQorCisgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29k
ZUZvckNvbnN0cnVjdCk7CisKKyAgICBhdXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1Y3RE
YXRhKHZtLCBjYWxsZWUpOworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgIT0gQ2FsbERh
dGE6OlR5cGU6OkpTKTsKKworICAgIGlmIChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6
OlR5cGU6Ok5hdGl2ZSkgeworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsZWVGcmFtZSk7CisgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3Qo
Y2FsbGVlKSk7CisgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZt
KSwgY2FsbGVlRnJhbWUpOworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQoCisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVl
RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY29uc3RydWN0RGF0
YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3Qs
IGNhbGxlZSkpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgIHZtLmdldENUSVRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
LAorICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKK30KKwor
QUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxl
ZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbykKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxs
ZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIFJFTEVB
U0VfQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOworCisgICAgSlNWYWx1ZSBjYWxs
ZWVBc1ZhbHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7CisgICAg
SlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1
ZSk7CisgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkgeworICAgICAgICBpZiAoYXV0byog
aW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBj
YWxsZWVBc1ZhbHVlKSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihraW5kKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CisKKyAgICAg
ICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0U2VlbigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxs
cHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKKworICAgICAgICAgICAgdm9pZCogbGlu
a2VkVGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNh
bGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUg
OiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2Fs
bGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogY2Fs
bGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgSlNT
Y29wZSogc2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKKworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gbnVsbHB0cjsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewor
ICAgICAgICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7Cisg
ICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5l
bnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworCisgICAgICAgIGF1dG8gaGFuZGxlVGhy
b3dFeGNlcHRpb24gPSBbJl0gKCkgeworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2
bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9OworCisg
ICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0
QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgeworICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RB
Q29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICAgICAgcmV0
dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxv
Y2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwor
ICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25F
eGVjdXRhYmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9u
KCkpOworCisgICAgICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OworICAgICAgICBBU1NF
UlQoY29kZUJsb2NrKTsKKworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKKyAgICAgICAg
aWYgKGNhbGxlZUZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLT5p
c1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAg
ICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5
KTsKKyAgICB9CisKKyAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBsaW5rTW9ub21vcnBo
aWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUs
IGNvZGVQdHIpOworCisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUo
KSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30K
KworQUxXQVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlv
bihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwp
Cit7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUo
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGNhbGxl
ZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CisgICAg
aWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKKyAgICAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5n
ZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAgIEFT
U0VSVCghIWNvZGVQdHIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5m
by0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhl
RnJhbWUpKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1
ZSwgY2FsbExpbmtJbmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBz
Y29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOworICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWV4
ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZXhlY3V0YWJsZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsm
XSAoKSB7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0Nh
bGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9y
KGdsb2JhbE9iamVjdCwgZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJv
d0V4Y2VwdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2Nr
U2xvdCA9IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKKyAgICAgICAgZnVuY3Rp
b25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0s
IGZ1bmN0aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOworICAgIH0K
KyAgICAvLyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4
ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoCisgICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5KS5l
eGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
TGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDog
S2VlcFRoZUZyYW1lKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggMGQx
OWUyNzkwNTZlNWYzN2U3NzFjNWM0OWEyZGIwZTZjMmQ4NDhkNy4uYWM1NzEyN2JjZjg5MDcyYmUw
Mzg0MTZkYTEzOWI0MWYxNjRhZTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC00MDMsNyArNDAzLDYgQEAgdm9p
ZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyh1bnNpZ25lZCBudW1C
aW5hcnlBcml0aFByb2ZpbGVzLAogCiAjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJyYXlQ
cm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZPUl9F
QUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCi0gICAgICAgIEZPUl9FQUNIX09Q
Q09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAgICAg
ICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wSXRl
cmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0
YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDQwMzk0YTk0Mzk5Mjk5M2Y1NDVh
MmFjNjJjZjZlZGMwOWRmNTU1ZmEuLjFjNTkwNDJlMGQwYzM4MTFiM2M5YmUyMTU4Y2RjNTRjMDFk
YmI4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCkBAIC03NSw3ICs3NSw2IEBAIGNsYXNzIENhY2hlZENvZGVCbG9jazsKIAog
dHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci10eXBlZGVmIHVuc2ln
bmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87CiAKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA1YzcyMDU4ZGNmMjE5NjBkY2Y4
NTNlMGE5MmMyN2U4OWEyZDU2YmVlLi41ZTMyZDJkMjRmMWIzZWQ4NzBjMzMwZjJlZjIzZDg1ZTRl
Y2U0ODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCkBAIC0zMTUsNiArMzE1LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwo
T3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2Fz
ZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2xpbmtfY2FsbF90
cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRf
dmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2dldF9ob3N0X2Nh
bGxfcmV0dXJuX3ZhbHVlOgogICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlv
bjoKICAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBv
bGluZToKQEAgLTMyNSw2ICszMjksOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVs
KE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNh
c2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX3Jl
dHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29u
c3RydWN0X3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xv
d19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9u
OgpAQCAtMzM1LDcgKzM0MSw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBv
cF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9v
cGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93
X3JldHVybl9sb2NhdGlvbjoKLSAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb246
CiAgICAgY2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAg
Y2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKQEAgLTM0Myw4
ICszNDgsOSBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29k
ZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugd2FzbV9mdW5jdGlv
bl9wcm9sb2d1ZToKICAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgogICAg
IGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsOgotICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90
YWlsX2NhbGw6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jf
bmV4dDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKICAgICBjYXNl
IGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGI0NTFjZGI2MWY3
YTExYjMzMDJjMTg1YzY2YmZmMTdhOWZkYmUwOWYuLmU3MjJmOWViZGFjYzg5MzY5MDY1NmQ1YjYz
ZTlmNjI0NDQ2MTVmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTE2NiwxMCArMTY2LDEwIEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29k
ZUJsb2NrKiBiYXNlbGluZUNvCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJO
X0xPQ0FUSU9OKG9wX2NvbnN0cnVjdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdldCA9
IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAg
ICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVj
dFZhcmFyZ3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9O
KG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRhcmdldCA9IExM
SU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsKICAgICAg
ICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlfaWQpCkBA
IC0yMDEsMTAgKzIwMSwxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFt
ZTo6Q2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RW
YXJhcmdzOiB7Ci0gICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9Ci0gICAg
ICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0Zv
ckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8gPSBudWxscHRyOworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
Pm1fbG9jayk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBjYWxs
Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYWxsTGlua0luZm8pOwotCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZv
LT5kb25lTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDk1NmQ2OTQwZTdkMjBiODIwMmYyNTUzZWM1
ZmU3MGI3ZThlOWU2MGEuLmU2MWY4OTRiZTEwOGNjYmZhMTJkYjIwODkyOWVjZGUyYzNkZjBmMjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcApAQCAtODQ3LDEwICs4NDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1pdFN0
b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlu
Zm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAgICAg
aW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2b2lk
KCk+KFsmXXsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZm
bGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9KSk7CiAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0
LmxhYmVsKCk7CiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlKQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAg
aWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIHNjb3Bl
ZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxD
YWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxl
RGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVE
YXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTkwMCw3ICs5MDAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aChtX2pp
dCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKaW5kZXggMGZlN2E3OTA5MTVhNzI0ZjRlMWZmYmQ5NmJhMTRlN2E4NWNiOGM3
OS4uNzcwNzNmMzRhZmJmZGY5NWZlNTgyNWEzYzg5ODljMzIyM2RkYWE1YSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC05Mzgs
MTAgKzkzOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsK
ICAgICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogCi0g
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0
LCBbJl0geworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBA
IC05ODEsNyArOTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAo
aXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2Fs
bExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBzY29wZWRM
YW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2Fs
bCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShz
aHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTk4OSw3ICs5ODksNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1f
aml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVw
YXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAg
ICB9KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRl
eCBlMWM4MmRmODgzNDE0OTE5ODRiMDk4MzgxYjgwZDVlYTM2NzJkNmViLi4wMThhMmY4NThmNDIx
MWQzODdiNDJiNjkyZTI1YjUxODYxYmU0Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMDQwMywxMCArMTA0MDMsMTAgQEAgSUdOT1JF
X0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFp
bENhbGxGYXN0UGF0aChqaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihb
Jl17CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA1NTksMTAgKzEwNTU5
LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkQ2FsbExpbmtJ
bmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxs
KENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAg
ICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
c2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KSk7CiAKICAgICAgICAg
ICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGF1dG8gc2xvd1Bh
dGhTdGFydCA9IGppdC5sYWJlbCgpOwpAQCAtMTA5MDIsMTAgKzEwOTAyLDEwIEBAIElHTk9SRV9D
TEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAg
ICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZv
aWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAg
ICBkb25lID0gaml0Lmp1bXAoKTsKQEAgLTExMTgzLDEwICsxMTE4MywxMCBAQCBJR05PUkVfQ0xB
TkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAg
ICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lk
KCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQ
UlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAg
ZG9uZSA9IGppdC5qdW1wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKaW5kZXggYzhjYmJlZTA2YmY3ZDY2NjJjMTlhNGE0YThhMThjMjFjZWZkM2Y3
Mi4uZTY0NTg1MzFlYmM5MDRkZTVkZDA0Y2UzYWJhNTNjNWJkM2M3MGIwZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNzQ1LDE4ICs3NDUs
MTggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1AKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlu
a0luZm8qIGluZm8pCiB7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQ
UkluZm86OnJlZ1QzKTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2Jq
ZWN0KHZtLCBpbmZvKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJl
Z1QyKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBH
UFJJbmZvOjpyZWdUMiwgaW5mby0+Y2FsbE1vZGUoKSk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBD
YWxsTW9kZSBjYWxsTW9kZSkKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICBtb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CiAg
ICAgICAgIGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soWz0sICZ2bV0g
KCkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKLSAgICAgICAg
ICAgIGluZm8tPnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2
aXJ0dWFsVGh1bmspKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHVi
Um91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbE1v
ZGUpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFsVGh1
bmsuY29kZSgpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggNjVkZDhlZGVmNzQ3OTk2ZDVmNmQ4ZjE5MjQ2
ZTZhZDkzMzZkNDczOC4uYTQ0YWE1Y2Y5NTRmMmMxNjU0NzllYzJkY2Q5MjNkNWZmNGYzZDFmOCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xNzUy
LDcgKzE3NTIsNyBAQCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3NlbWJs
ZXIgewogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7Ci0gICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0Vmly
dHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgQ2FsbE1vZGUpOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxs
KCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCmluZGV4IDE1ODk2MDNmMTQ5YzI3NmMz
NTllN2JiMjZkNjRmNGQ4NTcyN2YxNTAuLjMwMDNiMDczNTAxODhlNWY3M2ZjYzk2NzIwZDZhOWU3
NDFmOGJjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVK
SVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUu
aApAQCAtNjIsNyArNjIsNiBAQCBjbGFzcyBKSVRDb25zdGFudFBvb2wgewogCiAgICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7CiAgICAgICAgIEdsb2JhbE9iamVjdCwKLSAgICAgICAgQ2Fs
bExpbmtJbmZvLAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKICAgICAgICAgRnVuY3Rpb25E
ZWNsLAogICAgICAgICBGdW5jdGlvbkV4cHIsCkBAIC05Myw3ICs5Miw2IEBAIGNsYXNzIEJhc2Vs
aW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsK
ICAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CiAgICAgUENUb0NvZGVPcmlnaW5NYXAq
IHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1h
cC5nZXQoKTsgfQogCi0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsK
ICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwog
ICAgIEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHVi
SW5mb3M7CiAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURh
dGEuY3BwCmluZGV4IGNmMTVjZTE5OWVkMzc2YWYxNTBlODg3ZjNlZWQwMmZhMTVkYzdiMmEuLjUw
MmY5YTA3MjFkZjFlMzEwNzhmNjk5YTNjZWVkZjUyOTc4OTIxYjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3Qu
aCIKIApAQCAtODIsNiArODMsMzcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KgogICAgIH0KIH0K
IAorQ2FsbEZyYW1lU2h1ZmZsZURhdGEgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJh
c2VsaW5lT3JMTEludFRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCB1bnNpZ25l
ZCBudW1QYXJhbWV0ZXJzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29uc3RleHByIEpT
VmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKKyNlbmRpZgorICAgIENhbGxGcmFtZVNodWZmbGVEYXRh
IHNodWZmbGVEYXRhOworICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5t
X2FyZ2M7CisgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG51bVBhcmFtZXRlcnM7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworI2VuZGlmCisgICAgc2h1ZmZsZURhdGEubnVtTG9j
YWxzID0gYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9m
KFJlZ2lzdGVyKTsKKyAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2Mp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewor
ICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAg
ICAgRGF0YUZvcm1hdEpTKTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzaHVmZmxl
RGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigp
LCBEYXRhRm9ybWF0SlMpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzaHVmZmxlRGF0
YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxs
ZWVKU1IucGF5bG9hZEdQUigpKTsKKyNlbmRpZgorICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOworICAgIHNodWZmbGVEYXRhLnNocmlua1RvRml0KCk7CisgICAgcmV0
dXJuIHNodWZmbGVEYXRhOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmgKaW5kZXggMzM2NTdlMzNhNjRmMzc4MWY0MzA5OThjMTMzMzcxYTFhYTY0Yjc1YS4u
MGJjMTliOTlkNjFlNGJjYmI3MTllYTlmY2MxYmM4YzM3ZmJmZWM1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaApAQCAtMzIsNiArMzIs
OCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IE9wVGFpbENhbGw7CisKIHN0cnVjdCBD
YWxsRnJhbWVTaHVmZmxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CkBAIC00MCw2ICs0Miw4IEBAIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSB7CiAgICAg
ICAgIGFyZ3Muc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgQ2FsbEZyYW1lU2h1
ZmZsZURhdGEgY3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwoY29uc3QgT3BUYWlsQ2Fs
bCYsIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMpOworCiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+
IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25l
ZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApp
bmRleCA5Mjk0MjQ2MDczNDAwOTExYjZjMzU3Yzc4YTRhMGM2YTc0ZTlhYWQ0Li4yOGFlNmY3NzBk
ZGFjZDcxYzZmMTgyYzlkMTc5ZmQxY2NlYjhkZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCkBAIC0xMDEsMTIgKzEwMSw5IEBAIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rCiAgICAgcmV0
dXJuIHN0ZDo6dHVwbGUgeyBzdHViSW5mbywgc3R1YkluZm9JbmRleCB9OwogfQogCi1zdGQ6OnR1
cGxlPFVubGlua2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4gSklU
OjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpCitVbmxpbmtlZENhbGxMaW5rSW5mbyogSklUOjph
ZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpCiB7Ci0gICAgdm9pZCogdW5saW5rZWRDYWxsTGlua0lu
Zm9JbmRleCA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihtX3Vu
bGlua2VkQ2FsbHMuc2l6ZSgpKSk7Ci0gICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSAm
bV91bmxpbmtlZENhbGxzLmFsbG9jKCk7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9JbmRleCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6Q2FsbExpbmtJbmZvLCB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4KTsKLSAgICByZXR1cm4g
c3RkOjp0dXBsZSB7IGluZm8sIGNhbGxMaW5rSW5mb0luZGV4IH07CisgICAgcmV0dXJuICZtX3Vu
bGlua2VkQ2FsbHMuYWxsb2MoKTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTAxMCw3
ICsxMDA3LDYgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENh
bGxzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+KG1fdW5saW5rZWRDYWxscy5z
aXplKCkpOwogICAgIGlmIChtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpCiAgICAg
ICAgIHN0ZDo6bW92ZShtX3VubGlua2VkQ2FsbHMuYmVnaW4oKSwgbV91bmxpbmtlZENhbGxzLmVu
ZCgpLCBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5iZWdpbigpKTsKLSAgICBtX2ppdENvZGUt
Pm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogICAg
IG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8+KG1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKICAgICBpZiAobV9q
aXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSkKICAgICAgICAgc3RkOjptb3ZlKG1f
dW5saW5rZWRTdHViSW5mb3MuYmVnaW4oKSwgbV91bmxpbmtlZFN0dWJJbmZvcy5lbmQoKSwgbV9q
aXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLmJlZ2luKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKaW5kZXggZGUyYzVjZTc3MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlhMS4uNjdiNDNk
OGZhMzBiNzJjYmQ0OTQ0NjIyOGM2NDI5NjRmM2QzMzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCkBAIC0xNTMsNyArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENhbGxD
b21waWxhdGlvbkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0
aW9uOwogICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87
Ci0gICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7
CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24p
OwpAQCAtMjk0LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6
Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29u
c3RhbnQpOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwor
ICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxs
KGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBp
bGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwpAQCAtNzA2LDYgKzcwNSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVu
Y3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2Zp
bGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVybkZyb21CYXNl
bGluZUdlbmVyYXRvcihWTSYpOworCisgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjQsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5l
cmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVy
YXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZv
ck9wR2V0RnJvbVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQpAQCAtOTU4LDcgKzk2MCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
YWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlLCB2b2lkKiBwYXlsb2FkID0g
bnVsbHB0cik7CiAgICAgICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyos
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8o
KTsKLSAgICAgICAgc3RkOjp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIFVubGlu
a2VkQ2FsbExpbmtJbmZvKiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogCiAgICAgICAgIElu
dGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC0xMDI5LDcgKzEwMzEsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBWZWN0b3I8SklUQ29uc3RhbnRQb29sOjpWYWx1ZT4gbV9jb25z
dGFudFBvb2w7CiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmpl
Y3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAg
ICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgICAgICBTZWdt
ZW50ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAgICAg
ICAgU2VnbWVudGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CiAgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkx
NTg0NjhjMGZlMTAyYjVkZmJmYTJiZTRmZTE3MzE5N2UyYi4uNTcxOTYxMjE1NjBhM2EyOWFlM2Qy
MDcxMTNjNjBkY2U2MDgwZDYzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CkBAIC01OSwxNyArNTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0
dXJuVmFsdWVHUFIgKHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1Ip
OwotCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1w
KHZtKCkuZ2V0Q1RJU3R1YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRp
ZgorICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxp
bmVHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAgIEND
YWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
KyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1
bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC04
NCw3ICs4OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2Nh
bGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAm
JiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitK
SVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICB1bnNpZ25l
ZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBpbnQgYXJn
Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNv
ZGUsIGNoZWNrcG9pbnQpOwpAQCAtOTcsNyArMTAxLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsg
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1IpOwogICAg
ICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAgICAgbG9hZDMy
KEFkZHJlc3ModG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgdG1wR1BSKTsKLSAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwg
T3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJ
bmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RT
ZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0
ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmls
ZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAgICAgfQogCkBAIC0xMTAsNyArMTE0LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZv
aWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK0pJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFs
dWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC0xNjAsNyArMTY0LDcgQEAgSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmYKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1Q1LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0
KSwgcmVnVDIpOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDAp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFk
YXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcmVnVDMpOwogICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdU
MywgcmVnVDIpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5m
bzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CkBAIC0yMDMsNjQg
KzIwNywzOSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+
KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJ
bmZvOjpDYWxsLCByZWdUMCk7Ci0KICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUu
bV9hcmd2OwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVv
ZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZFZhbHVlKEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsZWVKU1IpOwogICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmpl
Y3QoKm1fdm0sIGluZm8pOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0g
cmVnVDI7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcENh
bGxFdmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BS
KTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBj
YWxsTGlua0luZm9HUFIsIENhbGxNb2RlOjpSZWd1bGFyKTsKICAgICByZXNldFNQKCk7CiAKICAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJ
bmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7
Ci0gICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAg
c2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFn
UmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSNlbmRpZgotICAgIHNodWZm
bGVEYXRhLT5udW1Mb2NhbHMgPQotICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLT5hcmdz
LnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
eXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9Ci0g
ICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNv
ZGUubV9hcmd2LAotICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7Ci0gICAgfQotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
R1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7Ci0jZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBh
aXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpKTsKLSNlbmRpZgot
ICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENvbnN0YW50KGNh
bGxMaW5rSW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOwotICAgIEp1bXBMaXN0IHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNh
bGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZdIHsKLSAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZXIgc2h1ZmZsZXIgeyAqdGhpcywgKnNodWZmbGVEYXRhIH07CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcFRhaWxDYWxsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBKdW1wTGlz
dCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIHNjb3BlZExhbWJk
YTx2b2lkKCk+KFsmXXsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGEg
PSBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6Y3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwo
Ynl0ZWNvZGUsIG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsIHNodWZmbGVEYXRhIH07CiAgICAg
ICAgIHNodWZmbGVyLmxvY2tHUFIoY2FsbExpbmtJbmZvR1BSKTsKICAgICAgICAgc2h1ZmZsZXIu
cHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgfSk7CisgICAgfSkpOwogICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRocyk7CiAKLSAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKLSAgICBpbmZv
LT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7Ci0KICAgICBhdXRvIGRv
bmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yODgsMTcg
KzI2NywxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgICovCiAKICAgICBVbmxpbmtl
ZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2Fs
bF9ldmFsKSB7Ci0gICAgICAgIHN0ZDo6dGllKGluZm8sIGluZm9Db25zdGFudCkgPSBhZGRVbmxp
bmtlZENhbGxMaW5rSW5mbygpOworICAgICAgICBpbmZvID0gYWRkVW5saW5rZWRDYWxsTGlua0lu
Zm8oKTsKICAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KTsKICAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExp
bmtJbmZvSW5kZXgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxD
b21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOwotICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0g
aW5mb0NvbnN0YW50OwogICAgIH0KLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5m
b0NvbnN0YW50KTsKKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSk7CiAKICAgICAvLyBT
UCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJn
dW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwpAQCAtMzE2LDE2ICsyOTIsMTYgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
Y2FsbGVlSlNSKSk7CiAjZW5kaWYKIAotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUs
IGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQorICAgIGlmIChjb21waWxl
VGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKLSAg
ICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxs
TGlua0luZm9HUFIsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIo
KSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENh
bGxTbG93KGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
bGFiZWwoKTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CkBAIC0zNDQsMTUgKzMyMCwxNiBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1
bnNpZ25lZCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIEFTU0VSVChvcGNvZGVJ
RCAhPSBvcF9jYWxsX2V2YWwpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRh
dGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjYsNyArMzQzLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUUKIAogICAgIHJlc2V0U1AoKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0NTg3ODAzYzI2MThj
NjgwMzk4MzZjZWU2YzdiMzRmZDJjMzA0Li4yZmUyM2M0OWZkMGY5NDA5MWY2ODYwNWI3NTdhZTJj
ZTMyMjAxNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAg
LTM3MCwyMSArMzcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQot
ewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9m
ZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4
dHJhQ1RJVGh1bmspOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOwotfQotI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMGUyZDdkMDhjZmI3NWYz
MjcxZDA2MmIwOTZhYmIwYzM1YzdmMWE4NS4uNmJjZTc0YWI4MmM1NTdkMDA4NTE1MDc4NTFhMDRl
NGUxNDYzMGMwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCkBAIC02MCw3ICs2MCw3IEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKLSNpbmNs
dWRlICJSZXBhdGNoLmgiCisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIKICNpbmNsdWRlICJT
aGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRl
ICJTdXBlclNhbXBsZXIuaCIKQEAgLTE0NDYsMTg2ICsxNDQ2LDkgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLXN0YXRp
YyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBjYWxsZWVG
cmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOwotCi0gICAgaWYgKGNhbGxMaW5rSW5mby0+c3Bl
Y2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgYXV0byBjYWxsRGF0
YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOwotICAgICAgICBBU1NFUlQoY2FsbERhdGEudHlw
ZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOwotCi0gICAgICAgIGlmIChjYWxsRGF0YS50eXBlID09
IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5z
ZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENh
bGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUp
LT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBEaXNhbGxvd0dD
IGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAg
ICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0g
ICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAg
ICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJl
dXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBB
U1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9y
KGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0g
ICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwot
ICAgIH0KLQotICAgIEFTU0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09
IENvZGVGb3JDb25zdHJ1Y3QpOwotCi0gICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0Q29uc3Ry
dWN0RGF0YSh2bSwgY2FsbGVlKTsKLSAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlICE9IENh
bGxEYXRhOjpUeXBlOjpKUyk7Ci0KLSAgICBpZiAoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxE
YXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbGVlRnJhbWUpOwotICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2Jq
ZWN0KGNhbGxlZSkpOwotICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVj
dCh2bSksIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRh
Zz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0
YTo6VHlwZTo6Tm9uZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwg
Y3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKLSAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2Vl
cFRoZUZyYW1lKSk7Ci19Ci0KIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5r
Q2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQogewot
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0g
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
ID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJU
KCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOwotICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNW
YWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOwotICAgIEpTQ2Vs
bCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwot
ICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAgICAgICAgaWYgKGF1dG8qIGludGVy
bmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVl
QXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2lu
ZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOwotCi0gICAgICAgICAg
ICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFNlZW4oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5r
TW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwg
aW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7Ci0KLSAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRh
cmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlu
a0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2Vl
cFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxlZUFz
VmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLQotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpTU2NvcGUq
IHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwotICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG51bGxwdHI7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAg
ICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBraW5kLCBjYWxsZWUpOwotICAgICAg
ICBpZiAoIWNvZGVQdHIpCi0gICAgICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhj
ZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihL
ZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAm
JiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmls
aXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlvbigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGNhbGxl
ZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2Nv
cGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKLQotICAgICAgICBjb2RlQmxvY2sg
PSAqY29kZUJsb2NrU2xvdDsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICAgICAg
QXJpdHlDaGVja01vZGUgYXJpdHk7Ci0gICAgICAgIGlmIChjYWxsZWVGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBh
cml0eSA9IE11c3RDaGVja0FyaXR5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcml0eSA9
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7Ci0gICAgfQotCi0gICAgaWYgKCFjYWxs
TGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwot
ICAgIGVsc2UKLSAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpj
YWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLQotICAgIHJldHVybiBl
bmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVz
ZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci19Ci0KLWlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxs
KiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBj
YWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0
aW9uS2luZCgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVl
ZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rp
b24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCkpIHsKLSAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBj
YWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihraW5kKTsKLSAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/
IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBj
YWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7Ci0gICAgfQotICAgIAot
ICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGVVbmNoZWNr
ZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRh
YmxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQp
KSkgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotCi0gICAgICAgIGF1
dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9pZCogdGhy
b3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9OwotCi0gICAgICAgIGlm
ICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgp
ID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgewotICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0
b3JFcnJvcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm4gaGFu
ZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvZGVCbG9jayoqIGNv
ZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAgICAg
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFi
bGU+KHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsK
LSAgICB9Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5Ci0gICAgcmV0dXJuIGVuY29kZVJl
c3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tB
cml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVG
cmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBn
bG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxs
RnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZDUxY2RhNGUyYTIxYTkyMTc5YjUxNWY5
ODRhZjJjNjhkNmRmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjAyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlcGF0Y2guaCIK
LQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKLSNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
IgotI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiRE9NSklUR2V0
dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiRXhl
Y3V0YWJsZUJhc2VJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRlRMVGh1bmtzLmgiCi0jaW5jbHVkZSAi
RnVsbENvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgotI2luY2x1
ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgot
I2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0YXRzLmgi
Ci0jaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCi0jaW5jbHVkZSAiSW5zdGFuY2VPZkFjY2Vzc0Nh
c2UuaCIKLSNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAi
SklULmgiCi0jaW5jbHVkZSAiSklUSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHkuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgotI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIKLSNpbmNs
dWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgot
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2luY2x1ZGUgIlN0YWNrQWxp
Z25tZW50LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCi0jaW5jbHVkZSAiVGh1bmtH
ZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgotI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLSNpbmNsdWRl
IDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0YXRpYyBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24o
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVyYXRpb24pCi17Ci0gICAgSlNDX1JFVFVS
Tl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJREFUSU9OKG9wZXJhdGlvbik7Ci19Ci0KLXN0
YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdldFdpdGhWYWxp
ZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkKLXsKLSAgICBK
U0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihjYWxsKTsKLX0K
LQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdl
dChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewot
ICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZXR1cm4gcmV0YWdPcGVy
YXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24pOwotICAgIENvZGVM
b2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCA9IHN0dWJJbmZvLm1fc2xvd1BhdGhD
YWxsTG9jYXRpb247Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewotICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVu
a1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5r
UHRyVGFnPihjYWxsKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAg
ICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+dm0oKS5m
dGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkpOwot
ICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7Ci0jZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCi0gICAgcmV0dXJuIHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKGNh
bGwpOwotfQotCi12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsLCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotI2lmIEVOQUJMRShGVExf
SklUKQotICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsK
LSAgICAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgICAgICBGVEw6OlRodW5rcyYg
dGh1bmtzID0gKnZtLmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJU
YWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRh
Zz4oY2FsbCk7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9
IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsKLSAgICAgICAg
a2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFn
Pih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIGtleSkuY29kZSgpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBVTlVTRURfUEFS
QU0oY29kZUJsb2NrKTsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0
aW9uUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbiA9IG5l
d0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19Ci0KLWVu
dW0gSW5saW5lQ2FjaGVBY3Rpb24gewotICAgIEdpdmVVcE9uQ2FjaGUsCi0gICAgUmV0cnlDYWNo
ZUxhdGVyLAotICAgIEF0dGVtcHRUb0NhY2hlCi19OwotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICBUeXBlSW5mbyB0eXBlSW5m
byA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKLSAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYg
KHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgLy8gRmxhdHRlbmluZyBjb3VsZCBoYXZlIGNoYW5nZWQgdGhl
IG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZvciBhbm90aGVyIHRyeS4KLSAgICAgICAgYXNPYmpl
Y3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKLSAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0K
LSAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Ci19Ci0KLXN0YXRpYyBib29sIGZvcmNlSUNGYWls
dXJlKEpTR2xvYmFsT2JqZWN0KikKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1
cmUoKTsKLX0KLQotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2ludHNBbmRD
bGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQmIHJlc3VsdCkKLXsKLSAg
ICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50cygpKSB7Ci0gICAg
ICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHModm0pOwotCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsK
LSAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KGxvY2tlciwgY29kZUJsb2NrKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkKLXsKLSAgICBzd2l0
Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlz
OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAg
Y2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRC
eUlkT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgICAgIHJl
dHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6
OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICBj
YXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWRPcHRpbWl6ZTsKLSAg
ICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotaW5saW5lIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5S2lu
ZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlk
OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5S2luZDo6
QnlJZFdpdGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzOwot
ICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5
R2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljOwotICAgIGNhc2UgR2V0QnlLaW5k
OjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lOwot
ICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2lu
ZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAg
ICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9w
ZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2Vs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEpTQ2VsbCog
YmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgaXNQcml2
YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lIHx8IGtpbmQgPT0gR2V0QnlLaW5k
OjpQcml2YXRlTmFtZUJ5SWQ7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7
Ci0KLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgp
IHsKLSAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAg
ICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAgICAgICAg
ICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKLQotICAgICAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2Vs
bCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgs
IHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNl
bGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hl
YWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3Ry
aW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRT
dHJpbmdMZW5ndGgobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxv
Y2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PERp
cmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0
aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFuZGxlIHRoaXMgYXMgYSBub3JtYWwg
cHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHdpdGggc3Vj
aCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNhc2UgZm9yIHRoYXQgbG9hZCBpZiBu
ZWVkZWQuCi0gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkp
Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChTY29wZWRBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpz
RHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgewotICAgICAgICAg
ICAgICAgIC8vIERpdHRvLgotICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9k
ZVRoaW5ncygpKQotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCwgcHJv
cGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcHJv
cGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNlbGwtPmluaGVyaXRzPEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0
byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5tb2R1bGVOYW1lc3BhY2VTbG90KCkpCi0gICAg
ICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2
bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVj
dCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNlU2xvdC0+ZW52aXJvbm1lbnQsIFNjb3BlT2Zm
c2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3BlT2Zmc2V0KSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkgewotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2Fj
aGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5z
dHJ1Y3R1cmUodm0pOwotCi0gICAgICAgICAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5n
UHJveHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgYmFzZVZhbHVl
ID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOwotICAgICAgICAgICAgICAg
IGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGxvYWRUYXJnZXRG
cm9tUHJveHkgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJbmxpbmVDYWNo
ZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7Ci0gICAgICAgICAg
ICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgICAgIHJldHVybiBh
Y3Rpb247Ci0KLSAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAg
ICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAgICAgICAgICYmIHNs
b3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRj
aHBvaW50U2V0KCkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94
eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okdl
dEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9y
UmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWlu
OwotCi0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/
IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgICAgICBpZiAo
c2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1c3RvbXMsIHdlIG11c3QgZGlzYWxsb3cgZGlj
dGlvbmFyaWVzIGJlY2F1c2Ugd2UKLSAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGluZm9y
bWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hlIHRoZQotICAgICAgICAg
ICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBvaW50ZXIuCi0KLSAgICAgICAgICAgICAgICBp
ZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBzbG90LnNsb3RCYXNlKCks
IHNsb3Quc2xvdEJhc2UoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwg
c2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+Zmxh
dHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpzQ2FzdDxKU09iamVjdCo+KGJhc2VDZWxsKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7IC8vIFdlIG1heSBo
YXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLmdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgLy8gSWYg
YSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERpcmVjdCBvciBHZXRCeUtpbmQ6OlByaXZhdGVOYW1l
LCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3RpZ2F0ZSBwcm90b3R5cGUgY2hhaW5zIGZ1cnRoZXIu
Ci0gICAgICAgICAgICAgICAgLy8gQ2FjaGVhYmlsaXR5IGp1c3QgZGVwZW5kcyBvbiB0aGUgaGVh
ZCBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gR2V0QnlLaW5kOjpCeUlk
RGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0
YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xv
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMgbWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8gZmxhdHRl
bmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlD
cmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWlu
LT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpID09IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW5z
dGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3VsZCBiZSBpbnNpZGUgZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvcGVydHlCbGFoLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8IGNvbmRp
dGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IG9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3Vz
dG9tKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0cmlidXRlcygpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0Z1bmN0aW9uKiBnZXR0ZXIgPSBudWxs
cHRyOwotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAg
ICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgc2xvdC5nZXR0
ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOwotCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPERPTUF0
dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZTsKLSAgICAgICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21BdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAg
ICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJpYnV0ZSgpOwotCi0gICAgICAgICAgICBpZiAo
a2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NDYXNl
OjpBY2Nlc3NUeXBlIHR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVW
YWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xv
dC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNz
Q2FzZTo6R2V0R2V0dGVyOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgdHlwZSwgcHJv
cGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJv
bVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFp
bikpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZyb21Qcm94eSAmJiBnZXR0
ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihz
dHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJ
bnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlO
YW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgZ2V0dGVy
LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhw
ciBib29sIGlzUHJveHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzbG90Lmlz
Q2FjaGVhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpMb2FkLCBwcm9wZXJ0eU5hbWUsIG9mZnNl
dCwgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBpc1By
b3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwg
c2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJs
ZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmlzVW5zZXQoKSA/IEFjY2Vz
c0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0
RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFj
Y2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nl
c3NDYXNlOjpHZXR0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuYXR0cmli
dXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNj
ZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGtp
bmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNlOjpDdXN0
b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0g
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgICAgICAgICAgICAgICAgICAgICAg
c2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IEZ1bmN0aW9u
UHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRlcigpKSA6IG51bGxwdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xv
dC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1vdmUocHJvdG90eXBlQWNj
ZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFt
ZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLQotICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsK
LQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0lu
Zm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgc3dpdGNoIChr
aW5kKSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgICAgIGNh
c2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6
VHJ5QnlJZDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgICAg
ICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
VmFsOgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICAg
ICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5k
Q2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5
Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewotICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBpZiAodHJ5Q2Fj
aGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlv
bihraW5kKSk7Ci19Ci0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlH
ZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKLSAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKLQotICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
Ci0KLSAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgICAgICBp
ZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFyZ3VtZW50c1R5cGUpCi0gICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERpcmVjdEFyZ3VtZW50c0xvYWQ7Ci0gICAgICAg
IGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTY29wZWRBcmd1bWVudHNUeXBlKQotICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTY29wZWRBcmd1bWVudHNMb2FkOwot
ICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU3RyaW5nVHlwZSkKLSAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDsKLSAgICAgICAgZWxz
ZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VU
eXBlKSkgewotICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Ci0gICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKLSAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50OExvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVV
aW50OENsYW1wZWQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6Ci0gICAgICAg
ICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJM
b2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDMy
OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheVVpbnQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8g
QmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0
OgotICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgotICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRl
eGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOwotICAgICAgICAgICAgc3dpdGNoIChpbmRl
eGluZ1NoYXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMkxvYWQ7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgotICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlTG9hZDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c0xvYWQ7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNo
YXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJy
YXlTdG9yYWdlTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxv
Y2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0
ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIp
KTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFz
c0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1
bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRD
bGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2Fj
aGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVl
IGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHRyeUNhY2hl
QXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJ
bmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rp
b24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRL
aW5kIHB1dEtpbmQpCi17Ci0gICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5
S2luZDo6QnlJZDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAgICAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNTRVJUKHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJp
dmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHV0QnlLaW5kOjpC
eVZhbDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5k
OjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljOwotICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKLSAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RH
ZW5lcmljOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYzsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmljOwotICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFT
U0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIH0KLSAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
c3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5n
UHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRC
eUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewotICAg
IGNhc2UgUHV0QnlLaW5kOjpCeUlkOgotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAg
ICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmlj
dE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9w
dGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xv
dC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVs
ZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgot
ICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJl
Y3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXpl
OwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgot
ICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJU
KHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBw
dXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7Ci0g
ICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVy
ZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxl
UHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5pc0NhY2hlYWJsZVNl
dHRlcigpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8gc29tZXRoaW5nIHNtYXJ0ZXIgaGVyZS4uLgotICAg
ICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAvLyBXZSBjYW4ndCBlbmQg
dXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUgcHJvdG90eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBv
d24gcHJvcGVydGllcy4KLSAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHNsb3QuYmFzZSgp
LT5pbmRleGluZ01vZGUoKSkpOwotCi0gICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5wcm9wZXJ0
eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLQotICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotCi0g
ICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNlOwotICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUo
KSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICAgICAgYmFzZUNlbGwgPSBq
c0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICBiYXNlVmFs
dWUgPSBiYXNlQ2VsbDsKLSAgICAgICAgICAgIGlzUHJveHkgPSB0cnVlOwotCi0gICAgICAgICAg
ICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFuZCBKUy9DdXN0b20gU2V0dGVy
cyBvbiBKU1Byb3h5LiBXZSBkb24ndAotICAgICAgICAgICAgLy8gY2FjaGUgdHJhbnNpdGlvbnMg
YmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0cnVjdHVy
ZQotICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCi0gICAgICAg
ICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNs
b3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkKLSAgICAgICAg
ICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKLSAgICAgICAgICAgICAgICB8fCBz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Ci0gICAgICAgICAgICBpZiAoIWlzQ2FjaGVhYmxlUHJv
eHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUp
KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgUmVmUHRyPEFj
Y2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1
ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LnR5cGUo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRjaCBidWdzIGlmIHdlIGFjY2lkZW50YWxseSBmb3Jn
ZXQgdG8gZGlzYWJsZSBjYWNoaW5nCi0gICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSB0cmFuc2l0
aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkuIFRoaXMgaXMgY29tbW9uIGFt
b25nCi0gICAgICAgICAgICAgICAgLy8gcGF0aHMgdGhhdCByZWlmeSBsYXp5IHByb3BlcnRpZXMu
IElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBhbmQgZm9yZ2V0Ci0gICAgICAgICAgICAgICAg
Ly8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkgY29tZSBkb3duIHRoaXMgcGF0aC4gVGhlIFJl
cGxhY2UgSUMgZG9lcyBub3QKLSAgICAgICAgICAgICAgICAvLyBrbm93IGhvdyB0byBtb2RlbCB0
aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKG9yIGFueSBzdHJ1Y3R1cmUKLSAg
ICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGZvciB0aGF0IG1hdHRlcikuCi0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09
IG9sZFN0cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hl
UHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBl
OjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNl
dCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRL
aW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxh
Y2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2Rl
QmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLCBpc1Byb3h5
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFpc1Byb3h5
KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90
OjpOZXdQcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNP
YmplY3QoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIHN0cnVjdHVyZSBpcyBkaWN0aW9uYXJ5LCBpdCBt
ZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBiZXR3ZWVuIGFuIG9iamVjdCBhbmQgYSBzdHJ1
Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBOZXdQcm9wZXJ0eSBvcGVyYXRp
b24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9lcyBub3Qgb2ZmZXIgYW55IGJlbmVmaXQgYmVj
YXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFwcGVucyBhZ2Fpbi4KLSAgICAgICAgICAgICAg
ICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRs
eShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoIW5ld1N0
cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAg
ICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBpcyBvdmVycmlkZGVuIGJ5IFVzZXJPYmplY3QsIFVz
ZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVmZmVjdCBvbiBKU09iamVjdDo6cHV0LCBhbmQg
aXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0UHJvcGVydHlTbG90IGFzIG5vbi1jYWNoYWVibGUs
Ci0gICAgICAgICAgICAgICAgLy8gdGhlbiBhcmJpdHJhcnkgc3RydWN0dXJlIHRyYW5zaXRpb25z
IGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQgb3BlcmF0aW9uLCBhbmQgdGhpcyBnZW5lcmF0ZXMg
d3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBoZXJlIGFzIGlmIG9sZFN0cnVjdHVyZSAtPiBu
ZXdTdHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSW4gcmVhbGl0eSwgdGhlIHRyYW5zaXRp
b24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0aGluZyB1bmtub3duIHN0cnVjdHVyZXMgLT4gYmFz
ZVZhbHVlJ3Mgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIC8vIFRvIGd1YXJkIGFnYWluc3Qg
dGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5jb3JyZWN0IFVzZXJPYmplY3Q6OnB1dCBpbXBs
ZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbiBhbmQgaWYgZm91
bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhlIHB1dC4KLSAgICAgICAgICAgICAgICBBU1NF
UlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG5ld1N0cnVjdHVyZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSAhPSBu
ZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9s
ZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVj
dCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAgICBpZiAo
cHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNl
Q2VsbCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46
OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50LmlzUHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVRyYW5z
aXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBvZmZzZXQsIG9sZFN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
LCBzdHViSW5mbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgewotICAgICAgICAg
ICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotCi0gICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgd2UncmUgYSBzZWxmIGN1c3Rv
bSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMKLSAgICAgICAgICAgICAgICAv
LyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkg
c2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50Ci0gICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24g
cG9pbnRlci4KLSAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90
bykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5
UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3Qu
YmFzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hh
aW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90
b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25k
aXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3Rv
bSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90
LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDog
QWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LAotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1v
dmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1c3RvbVNldHRlcigpLnJl
dGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFnPigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUg
PyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsKLSAgICAgICAgICAgICAg
ICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAg
ICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGlu
ZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT5mbGF0dGVu
ZWREaWN0aW9uYXJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJv
dG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9s
eVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90
LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0No
YWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldCA9IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVj
dHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSkpLT5nZXQodm0sIGlkZW50LmltcGwoKSwg
YXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5
cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRp
b25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0
cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLmF0dHJpYnV0ZXMoKSAmIFByb3Bl
cnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGNv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
b2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1By
b3h5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR19JQygoSUNFdmVu
dDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwg
c2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNs
b3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5
KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1
dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xv
dC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotCi0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBh
dGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1
dEtpbmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwotICAgIAotICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0
QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rp
b24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCi17Ci0gICAgaWYgKCFiYXNlVmFs
dWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFp
bmRleC5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBy
ZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwo
KTsKLQotICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgICAg
IGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKLSAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKLSAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50OFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBl
VWludDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgotICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUlu
dDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVV
aW50MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5VWludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0
QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAgICAgY2FzZSBUeXBl
QmlnSW50NjQ6Ci0gICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJh
c2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7Ci0gICAgICAgICAgICBzd2l0
Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAg
ICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgotICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFw
ZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRp
Z3VvdXNTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJy
YXlTdG9yYWdlU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKLQotICAgICAgICBpZiAocmVz
dWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVu
dGlmaWVyKCkpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7
Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNv
ZGVCbG9jaywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8g
R2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQXJyYXlQ
dXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17Ci0gICAgaWYgKHRyeUNh
Y2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0
dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVy
aWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2Rl
LmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFN
b2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQot
ICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOwotICAg
ICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpIHx8ICFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5
QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZURlbGV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7
Ci0gICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aGFzQmVl
bkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICAgICAganNDYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKS0+ZmxhdHRlbkRpY3Rp
b25hcnlPYmplY3Qodm0pOwotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICBSZWZQdHI8QWNjZXNz
Q2FzZT4gbmV3Q2FzZTsKLQotICAgICAgICBpZiAoc2xvdC5pc0RlbGV0ZUhpdCgpKSB7Ci0gICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwotICAgICAg
ICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghbmV3U3Ry
dWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAg
ICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8
IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBBU1NFUlQobmV3T2Zmc2V0ID09IHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgp
ID09IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFu
c2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsKLSAgICAg
ICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgQVNT
RVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7Ci0gICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgbmV3T2Zm
c2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2xv
dC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpEZWxldGVOb25Db25maWd1cmFibGUsIHByb3BlcnR5TmFtZSwgaW52YWxpZE9mZnNldCwgb2xk
U3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVs
ZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwg
bnVsbHB0cik7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2Nr
ZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgcHJvcGVydHlOYW1lLCBXVEZN
b3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkp
IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkp
OwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RV
c2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBj
b2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygp
ID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoRGVs
ZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17
Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZURlbGV0ZUJ5KGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBzdHViSW5mbywga2luZCwgZWNtYU1vZGUpID09IEdpdmVVcE9uQ2FjaGUpIHsK
LSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZVZh
bHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAgICAgIGlmIChraW5kID09IERlbEJ5
S2luZDo6QnlJZCkKLSAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24oSW5CeUtpbmQg
a2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBJbkJ5S2lu
ZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAg
Y2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQ
cml2YXRlTmFtZU9wdGltaXplOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0
ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQp
IHsKLSAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5C
eUlkR2VuZXJpYzsKLSAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkluQnlWYWxHZW5lcmljOwotICAgIGNhc2UgSW5CeUtpbmQ6OlByaXZhdGVOYW1lOgot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVHZW5lcmljOwotICAgIH0KLSAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVJbkJ5KAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUsCi0gICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9w
ZXJ0eU5hbWUudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFp
bHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5jZSgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKHdhc0ZvdW5kKSB7Ci0g
ICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAKLSAgICAgICAgUmVm
UHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAgICAgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBpZiAod2Fz
Rm91bmQpIHsKLSAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZv
ckNlbGwodm0sIGJhc2UpOwotICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNo
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgICAgICAvLyBPcHRp
bWl6ZSBzZWxmIGFjY2Vzcy4KLSAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9
PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZh
bHVlKCkKLSAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQotICAgICAg
ICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAgICAgICAgICYmICFz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAg
ICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
SW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUt
PnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwotICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2Jq
ZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICBp
ZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNz
Q2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFz
ZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4p
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHBy
b3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0No
YWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFz
ZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNl
dC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hh
aW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBp
ZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAg
ICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlD
cmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAoIXBy
b3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJvdG90eXBlQWNj
ZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKLQotICAgICAgICBSZWY8QWNj
ZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1p
c3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQgPyBzbG90LmNhY2hlZE9mZnNldCgpIDogaW52YWxp
ZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNz
Q2hhaW4pKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tl
ciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlO
YW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNv
bWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1
bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAg
ICAgICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQotICAgICAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVk
ZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJl
c3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7
Ci19Ci0KLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZUluQnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQsIHNsb3QsIHN0dWJJ
bmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6
SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VPYmplY3QtPmNsYXNzSW5mbyhnbG9iYWxPYmplY3Qt
PnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0g
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlh
dGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlk
ZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgaWYg
KGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVy
ZSh2bSk7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2Vs
bCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAg
ICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0
cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFj
Y2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgd2Fz
Rm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgYnJhbmRJRCwg
aW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7IH0sIHsgfSk7Ci0KLSAgICAgICAgcmVzdWx0ID0g
c3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBF
Q01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAg
IGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQs
IGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5j
b2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nl
c3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBh
dGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBi
cmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0g
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotCi0gICAgaWYg
KHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2Jq
ZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFz
UHJpdmF0ZUJyYW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1
bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5k
SUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShn
bG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAg
IElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAg
ICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgcmV0dXJuIGFj
dGlvbjsKLQotICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZEFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJlZjxBY2Nl
c3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlQ2hlY2tQcml2YXRlQnJhbmQodm0s
IGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0dXJlKTsKLQotICAgICAgICByZXN1bHQgPSBzdHVi
SW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFN
b2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRl
ZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQu
c2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQot
Ci12b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJs
ZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0
cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2Jq
ZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVC
cmFuZEdlbmVyaWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVTZXRQ
cml2YXRlQnJhbmQoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZy
b21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChm
b3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlKTsKLQotICAgICAg
ICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0
aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2Fj
aGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgICAgICAKLSAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnNldEJyYW5kVHJhbnNpdGlvbkZyb21FeGlz
dGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGJyYW5kSUQudWlkKCkpOwot
ICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7Ci0gICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlQobmV3U3RydWN0
dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpTZXRCcmFuZCk7Ci0gICAg
ICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAKLSAgICAgICAg
Ym9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0
UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRl
bnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2Ug
PSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJ
RCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJ
bmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1v
ZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAo
cmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVh
clN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5
Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9i
amVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJ
RCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNoZVNldFByaXZhdGVC
cmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCAg
YnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kR2Vu
ZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluc3RhbmNlT2Yo
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFsdWUuaXNDZWxsKCkpOyAvLyBzaG91bGRDb25z
aWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2VsbHMuCi0gICAgCi0gICAgaWYgKGZvcmNlSUNGYWls
dXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIAot
ICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jaywgdm0pOwotICAgICAgICAKLSAgICAgICAgSlNDZWxsKiB2YWx1ZSA9IHZhbHVlVmFs
dWUuYXNDZWxsKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUtPnN0cnVj
dHVyZSh2bSk7Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwotICAgICAgICBK
U09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBwcm90b3R5
cGVWYWx1ZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUpIHsKLSAgICAgICAgICAgIGlmICghanNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBuZXdD
YXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsIHN0cnVjdHVyZSwgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBl
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVRdWVyaWVzQXJl
Q2FjaGVhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGVhY2ggdGhpcyB0byBk
byBwb2x5IHByb3RvLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKLSAgICAgICAgICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JD
YWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUsIHdhc0ZvdW5kID8gcHJvdG90eXBlIDogbnVsbHB0
cik7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKLSAgICAgICAgICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZSwgd2Fz
Rm91bmQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpjcmVh
dGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mSGl0IDogQWNjZXNz
Q2FzZTo6SW5zdGFuY2VPZk1pc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkKLSAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hlYWJsZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgIAot
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgCi0gICAgICAgIHJlc3Vs
dCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgZmlyZVdhdGNocG9pbnRzQW5k
Q2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAg
Ci0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBS
ZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCi0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFs
dWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIGlmICh0cnlDYWNoZUluc3RhbmNlT2YoZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUsIHByb3RvdHlwZVZhbHVlLCBzdHViSW5mbywgd2Fz
Rm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwotfQotCi1zdGF0
aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCi17Ci0g
ICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29kZSgp
LnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwotfQotCi1zdGF0aWMgdm9pZCBs
aW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IpCi17Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5m
bywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZv
KTsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwot
ICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0
ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3du
ZXIoSlNDZWxsKiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIC8vIEVh
Y2ggV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc2hhcmVzIHRoZSBzdHVicyBmcm9tIHRoZWlyIFdlYkFz
c2VtYmx5Lk1vZHVsZSwgd2hpY2ggYXJlIHRoZXJlZm9yZSB0aGUgYXBwcm9wcmlhdGUgb3duZXIu
Ci0gICAgcmV0dXJuIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2FsbGVlKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci19Ci0KLXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbCgKLSAgICBWTSYgdm0sIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVD
b2RlQmxvY2ssCi0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yigp
KTsKLQotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1l
KCk7Ci0gICAgLy8gT3VyIGNhbGxlciBtdXN0IGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hl
biBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlz
IGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQot
ICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygp
OwotCi0gICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENv
ZGVCbG9jay4KLSAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseU1vZHVsZShjYWxsZXJG
cmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+
Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFTU0VSVChvd25lcik7
Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0lu
Zm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUsIGNvZGVQdHIpOwotICAg
IGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7Ci0KLSAg
ICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCi0gICAgICAg
IGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxv
Y2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxl
ZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7Ci0KLSAgICBp
ZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWlu
Z0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8pOwotCi0gICAgaWYgKGNhbGxMaW5rSW5m
by5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxs
b3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxp
bmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci19Ci0KLXZvaWQgbGlu
a0RpcmVjdENhbGwoCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLXsKLSAgICBBU1NFUlQoIWNhbGxMaW5r
SW5mby5zdHViKCkpOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKLQotICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0o
KTsKLSAgICAKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxs
TGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlv
bkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9jaykpOwotICAgIGlmIChzaG91bGREdW1wRGlzYXNz
ZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKLSAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxs
IGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVP
cmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlw
b2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKLQotICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RD
YWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKLQot
ICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0lu
Y29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0luZm8pOwotfQotCi12b2lkIGxpbmtTbG93
Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsK
LSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUo
KS0+Y29kZUJsb2NrKCk7Ci0gICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAg
IAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCi1zdGF0aWMgdm9pZCBy
ZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKLXsKLSAgICBpZiAoY2Fs
bExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29kZUJs
b2NrKCk7Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpCi0g
ICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0g
ICAgICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKLQot
ICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCi0gICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsKLSAgICAgICAgfQotICAgICAgICBjYWxsTGlu
a0luZm8uY2xlYXJDYWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hl
IGJvdGggZm9yIGRhdGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgotICAgIH0KLSAgICBjYWxsTGlu
a0luZm8uY2xlYXJTZWVuKCk7Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOwotICAgIGNh
bGxMaW5rSW5mby5jbGVhclNsb3dTdHViKCk7Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlz
dCgpKQotICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgdW5saW5rQ2Fs
bChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwg
UmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7Ci0gICAgCi0gICAgcmV2ZXJ0Q2FsbCh2bSwgY2Fs
bExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxG
b3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUoKTsKLSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2Rl
QmxvY2soKTsKLQotICAgIGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxs
ZXJDb2RlQmxvY2spLAotICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENv
ZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7Ci0K
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxU
aHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExpbmtJbmZvLnNldFNs
b3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1bmspKTsK
LSAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwotfQotCi1uYW1lc3BhY2Ug
ewotc3RydWN0IENhbGxUb0NvZGVQdHIgewotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotfTsKLX0g
Ly8gYW5ub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVChjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKTsKLQotICAgIENhbGxGcmFtZSogY2Fs
bGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotCi0gICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBsaW5rUG9seW1vcnBo
aWNDYWxsLCB3ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBHQy4KLSAgICAvLyBH
QyBqZXR0aXNvbnMgQ29kZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8gZXRjLiBhbmQgYnJl
YWtzIGFzc3VtcHRpb24gZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2FsbC4KLSAgICBEZWZl
ckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUodm0pOwotICAgIAotICAgIGlmICghbmV3VmFy
aWFudCkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0lu
Zm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gT3VyIGNhbGxlciBtdXN0IGJl
IGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9t
IFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGJvb2wgaXNXZWJBc3NlbWJseSA9
IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKTsKLQot
ICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxv
Y2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVy
KGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7Ci0gICAg
QVNTRVJUKG93bmVyKTsKLQotICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OwotICAgIGlmIChQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkpCi0gICAg
ICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOwotICAgIGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRD
YWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCi0gICAgICAgIGxpc3QgPSBDYWxsVmFyaWFu
dExpc3QgeyBDYWxsVmFyaWFudChvbGRDYWxsZWUpIH07Ci0gICAgCi0gICAgbGlzdCA9IHZhcmlh
bnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7Ci0KLSAgICAvLyBJZiB0aGVyZSBh
cmUgYW55IGNsb3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCBhbGwgb2Yg
dGhlbSBhcyBjbG9zdXJlIGNhbGxzLgotICAgIC8vIFRoaXMgbWFrZXMgc3dpdGNoaW5nIG9uIGNh
bGxlZSBjaGVhcGVyLiBJdCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0J3MgZWFzaWVyIG9u
IHRoZSBERkc7Ci0gICAgLy8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50IHRvIGRlYWwgd2l0
aCBhIGNvbWJpbmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNhbGxlZXMuCi0gICAg
Ym9vbCBpc0Nsb3N1cmVDYWxsID0gZmFsc2U7Ci0gICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50
IDogbGlzdCkgIHsKLSAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7Ci0gICAg
ICAgICAgICBsaXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsKLSAgICAgICAgICAg
IGlzQ2xvc3VyZUNhbGwgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpCi0gICAgICAgIGNhbGxMaW5rSW5mby5z
ZXRIYXNTZWVuQ2xvc3VyZSgpOwotICAgIAotICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNl
PiBjYWxsQ2FzZXM7Ci0gICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7Ci0gICAgCi0gICAg
Ly8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCi0gICAgZm9yIChDYWxsVmFyaWFudCB2
YXJpYW50IDogbGlzdCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7
Ci0gICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFudC5leGVjdXRhYmxl
KCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2sgPSBq
c0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwo
KTsKLSAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGVpdGhlciBi
ZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBhcml0eSBtaXNtYXRj
aCwKLSAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlzIHdob2xl
IHRoaW5nIHRvIGJlIGEgdmlydHVhbCBjYWxsLgotICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2sg
fHwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmlzVmFy
YXJncygpKSB7Ci0gICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwg
Y2FsbExpbmtJbmZvKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7Ci0gICAgICAgIGlm
IChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9z
dXJlIGNhbGwuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc5MzExCi0gICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1ZSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNl
VmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChB
U1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMuY29udGFpbnMobmV3
Q2FzZVZhbHVlKSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9SOiBBdHRlbXB0IHRv
IGFkZCBkdXBsaWNhdGUgY2FzZSB2YWx1ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2co
IkV4aXN0aW5nIGNhc2UgdmFsdWVzOiAiKTsKLSAgICAgICAgICAgICAgICBDb21tYVByaW50ZXIg
Y29tbWE7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhc2VWYWx1ZXMpCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8g
YWRkOiAiLCBuZXdDYXNlVmFsdWUsICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIlZh
cmlhbnQgbGlzdDogIiwgbGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50
LCBjb2RlQmxvY2spKTsKLSAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3Q2FzZVZhbHVlKTsK
LSAgICB9Ci0gICAgQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZhbHVlcy5zaXplKCkp
OwotCi0gICAgLy8gSWYgd2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVzZSBhIG5vcm1hbCB2
aXJ0dWFsIGNhbGwuCi0gICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RT
aXplOwotICAgIGlmIChpc1dlYkFzc2VtYmx5KQotICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxW
YXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNp
emVGb3JXZWJBc3NlbWJseVRvSlMoKTsKLSAgICBlbHNlIGlmIChjYWxsZXJDb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCi0gICAgICAgIG1heFBvbHltb3JwaGlj
Q2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRM
aXN0U2l6ZUZvclRvcFRpZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIG1heFBvbHltb3JwaGljQ2Fs
bFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0
U2l6ZSgpOwotCi0gICAgLy8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQgb2YgY2FsbENhc2Vz
LnNpemUoKSBiZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBmb3Igbm93LgotICAg
IGlmIChsaXN0LnNpemUoKSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSkgewot
ICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+IGNhbGxzKGNh
bGxDYXNlcy5zaXplKCkpOwotICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBmYXN0Q291bnRzOwot
Ci0gICAgaWYgKCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpICE9
IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkgewotICAgICAgICBmYXN0Q291bnRzID0gbWFrZVVuaXF1
ZUFycmF5PHVpbnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgpKTsKLSAgICAgICAgbWVtc2V0KGZhc3RD
b3VudHMuZ2V0KCksIDAsIGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWludDMyX3QpKTsKLSAg
ICB9Ci0gICAgCi0gICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5mby5jYWxsZWVHUFIo
KTsKLQotICAgIGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRhSUMoKTsKLSAgICBD
Q2FsbEhlbHBlcnMgc3R1YkppdChjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOwotICAgIGlmIChjYWxsTGlua0lu
Zm8uZnJhbWVTaHVmZmxlRGF0YSgpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8uaXNU
YWlsQ2FsbCgpKTsKLSAgICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1l
U2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKTsKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hl
Y2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCi0gICAgICAgIC8vIHVz
ZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCi0gICAgICAgIGZyYW1lU2h1
ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgpOwotI2VuZGlmCi0gICAgICAgIGZyYW1lU2h1ZmZs
ZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgY29tcGFyaXNvblZh
bHVlR1BSOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgIGlmIChmcmFtZVNodWZm
bGVyKQotICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNx
dWlyZUdQUigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIg
PSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwotCi0gICAgR1BSUmVn
IGZhc3RDb3VudHNCYXNlR1BSOwotICAgIGlmIChmcmFtZVNodWZmbGVyKQotICAgICAgICBmYXN0
Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPQotICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZv
OjpyZWdUMyk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKLQotICAgIGlmICgh
ZnJhbWVTaHVmZmxlciAmJiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgIC8v
IFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBjYWxsZWUgc2F2ZSBy
ZWdpc3RlciBpbiB0aGUgc2xvdyBwYXRoLgotICAgICAgICBBU1NFUlQoIWNhbGxlckNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOwotICAgICAgICBzdHVi
Sml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgIC8v
IFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUg
aW4gc2NyYXRjaEdQUi4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoY2FsbExpbmtJ
bmZvLmlzVGFpbENhbGwoKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJy
YW5jaElmTm90Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENl
bGwoY2FsbGVlR1BSKSk7Ci0jZWxzZQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkg
Y2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0gICAgICAgIC8vIEZJ
WE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBj
bG9zdXJlIGNhbGwuCi0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90
RnVuY3Rpb24oY2FsbGVlR1BSKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9y
UmFyZURhdGEoKSksIGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gaGFzRXhlY3V0
YWJsZSA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNvbXBhcmlz
b25WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURh
dGFUYWcpKTsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
b21wYXJpc29uVmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgp
IC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVHUFIpOwotICAgICAg
ICBoYXNFeGVjdXRhYmxlLmxpbmsoJnN0dWJKaXQpOwotICAgIH0KLQotICAgIEJpbmFyeVN3aXRj
aCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0
Y2g6OkludFB0cik7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAgIHdoaWxl
IChiaW5hcnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkgewotICAgICAgICBzaXplX3QgY2FzZUlu
ZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOwotICAgICAgICAKLSAgICAgICAgQ2FsbFZh
cmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKLSAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwot
ICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2
YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwgY2FsbExpbmtJbmZv
LnNwZWNpYWxpemF0aW9uS2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOwotICAgICAgICAgICAg
aWYgKCFjb2RlUHRyKQotICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFi
bGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVj
a05vdFJlcXVpcmVkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YXJp
YW50LmludGVybmFsRnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoZmFzdENvdW50cykgewotICAgICAgICAgICAgc3R1YkppdC5h
ZGQzMigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNh
c2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
bmVlZHNEb25lSnVtcCA9IGZhbHNlOwotICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikgewotICAg
ICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+c25hcHNo
b3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhd
LmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2UgaWYgKGNhbGxM
aW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOwotICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1Ykpp
dC5uZWFyVGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc0Rh
dGFJQykKLSAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5l
YXJUYWlsQ2FsbCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2FsbHNb
Y2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIG5l
ZWRzRG9uZUp1bXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNh
bGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7Ci0gICAgICAgIGlmIChuZWVkc0RvbmVK
dW1wKQotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgIH0KLSAg
ICAKLSAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICBiaW5hcnlTd2l0Y2guZmFsbFRo
cm91Z2goKS5saW5rKCZzdHViSml0KTsKLQotICAgIGlmIChmcmFtZVNodWZmbGVyKSB7Ci0gICAg
ICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKLSAgICAgICAgZnJhbWVT
aHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOwotICAgICAgICBmcmFtZVNo
dWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVl
UmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKLSNlbHNlCi0gICAgICAgIGZy
YW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJl
Z1QwKSk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRo
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5m
bzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVn
VDEpOwotI2VuZGlmCi0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIHN0dWJKaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJl
Z1QyKTsKLSAgICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsK
LSAgICAgICAgLy8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRoLCBnZXQgcmlkIG9m
IGFueSByZW1uYW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBleGlzdC4gVGhpcyBy
ZWFsbHkgb25seSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAgICAgICAgLy8gU1Ag
Zm9yIGNhbGxzLgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2Fs
bChHUFJJbmZvOjpyZWdUNCk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0
YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKLSAgICAKLSAgICBzdHViSml0LnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKLSAgICBBc3NlbWJs
eUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJ
bmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZy
YW1lLCBjYWxsTGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKLSAgICBmb3Ig
KENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7Ci0jaWYgQ1BVKEFSTV9USFVN
QjIpCi0gICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBs
aW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJl
c3MKLSAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3Jt
YWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KLSAg
ICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2Fs
bEhlbHBlcnM6OkNhbGw6OlRhaWwpOwotICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxs
ID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5j
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJn
ZXQpKSk7Ci0jZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2Fs
bCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENU
SVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAK
LSAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICBjYWxsZXJD
b2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAg
ICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMg
JXMiLAotICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHkiIDogdG9D
U3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlv
bigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3RE
dW1wKGNhbGxDYXNlcykpLmRhdGEoKSksCi0gICAgICAgIHZtLCBvd25lciwgY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKLSAgICAgICAgV1RGTW92ZShm
YXN0Q291bnRzKSkpOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHNsb3cgcGF0aCBpcyB1bnJlYWNo
YWJsZSBvbiA2NC1iaXRzLCBidXQgc3RpbGwKLSAgICAvLyByZWFjaGFibGUgb24gMzItYml0cyBz
aW5jZSBhIG5vbi1jZWxsIGNhbGxlZSB3aWxsIGFsd2F5cwotICAgIC8vIHRyaWdnZXIgdGhlIHNs
b3cgcGF0aAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotCi0gICAgLy8gSWYg
dGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQgb25lIHdpbGwgZGll
IGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKLSAgICAvLyB0aGF0IGl0J3Mgbm8gbG9u
Z2VyIG9uIHN0YWNrLgotICAgIGNhbGxMaW5rSW5mby5zZXRTdHViKFdURk1vdmUoc3R1YlJvdXRp
bmUpKTsKLSAgICAKLSAgICAvLyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhhcyBhIGNh
bGwgY2FjaGUgYXBhcnQgZnJvbSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbAotICAg
IC8vIHN0dWIuCi0gICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQotICAgICAgICBjYWxs
TGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKLXsKLSAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNh
c2UgR2V0QnlLaW5kOjpCeUlkOgotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0g
ICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJl
Y3Q6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgSW5saW5l
QWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgIGNhc2UgR2V0QnlL
aW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJ
bkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2luZCkKLXsKLSAgICBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOwotICAgIHN3aXRj
aCAoa2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7Ci0gICAgICAgIHVzaW5nIEZ1
bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1p
emUpOwotICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1
YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKLSAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxk
U3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0
aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHV0QnlL
aW5kOjpCeVZhbDogewotICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9w
dGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJ
Q0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0g
ICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9w
dGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAg
ICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlm
ICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZp
ZWxkR2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsRGVm
aW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9
IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGVs
c2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRl
RmllbGRHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxT
ZXRQcml2YXRlRmllbGRPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAgICAgIG9wdGlt
aXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAg
c3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIElubGlu
ZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgSW5saW5l
QWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgcmVzZXRE
ZWxCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBE
ZWxCeUtpbmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBEZWxCeUtpbmQ6OkJ5SWQpCi0gICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7Ci0gICAg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewot
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVP
cHRpbWl6aW5nSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICBpZiAoa2luZCA9PSBJbkJ5S2luZDo6
QnlJZCkKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvKTsKLSAgICBlbHNlCi0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
KTsKLX0KLQotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwot
ICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEluc3RhbmNlT2YoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBy
ZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0
Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vz
czo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0
aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQotewotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKLSAgICBpZiAoIWNhbGxlZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
aWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
IChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24q
Pih2bSwgY2FsbGVlKSkKLSAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlw
b2ludCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVOVVNFRF9QQVJBTShr
aW5kKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKLSNlbmRpZgotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2UzNzdlZTEwYTJl
Zjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisr
KyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEpJVCkK
LQotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJDYWxsVmFyaWFu
dC5oIgotI2luY2x1ZGUgIlB1dEtpbmQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWVudW0gY2xh
c3MgR2V0QnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotICAgIFRyeUJ5SWQsCi0gICAg
QnlJZFdpdGhUaGlzLAotICAgIEJ5SWREaXJlY3QsCi0gICAgUHJpdmF0ZU5hbWUsCi0gICAgUHJp
dmF0ZU5hbWVCeUlkLAotfTsKLQotZW51bSBjbGFzcyBQdXRCeUtpbmQgewotICAgIEJ5SWQsCi0g
ICAgQnlWYWwsCi19OwotCi1lbnVtIGNsYXNzIERlbEJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBC
eVZhbAotfTsKLQotZW51bSBjbGFzcyBJbkJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBCeVZhbCwK
LSAgICBQcml2YXRlTmFtZQotfTsKLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2Jh
bE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0
dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90Jiwg
U3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoQXJyYXlQdXRCeVZh
bChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRl
eCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Ci12b2lkIHJlcGF0Y2hQ
dXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENh
Y2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKLXZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpTR2xvYmFs
T2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgU3RydWN0
dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQs
IEVDTUFNb2RlKTsKLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sq
LCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFBy
b3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXBhdGNo
SGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJlU3R1YkluZm8mKTsK
LXZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2Nr
KiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwot
dm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENvZGVCbG9j
ayosIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IGJvb2wgd2FzRm91bmQpOwotdm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKFZNJiwgQ2FsbEZyYW1l
KiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua0RpcmVjdENhbGwoQ2FsbEZy
YW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZv
Jik7Ci12b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgbGlua1BvbHlt
b3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENh
bGxWYXJpYW50KTsKLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBQdXRCeUtpbmQpOwotdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKLXZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldEluc3RhbmNlT2YoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFNldFByaXZhdGVCcmFu
ZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBmdGxUaHVua0F3YXJlUmVw
YXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoVk0mLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCogY2FsbGVlKTsKLQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1ZjdiNzg2NDEx
ZDg1NWIyYTFkZTQ3Yy4uZGJkNWFiZDM3ODhkNzFiODAzMDViYjg1MWZiY2MyNzEzZTg3YjAwZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAt
MzQ0LDQ4ICszNDQsMjUgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGwoVk0mIHZtKQogICAgIHJldHVybiB2aXJ0
dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0Zv
clJlZ3VsYXJDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Io
dm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yVGFpbENh
bGwoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpU
YWlsLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QoVk0mIHZtKQotewotICAg
IHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBDb2RlRm9yQ29uc3Ry
dWN0KTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1
YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNhbGwpOwotfQotCiBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtG
b3JDb25zdHJ1Y3RDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtG
b3Iodm0sIENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihW
TSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTW9kZSBj
YWxsTW9kZSkKIHsKLSAgICBhdXRvIG1vZGUgPSBjYWxsTGlua0luZm8uY2FsbE1vZGUoKTsKLSAg
ICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgYXV0
byBnZW5lcmF0b3IgPSBbJl0gKCkgLT4gVGh1bmtHZW5lcmF0b3IgewotICAgICAgICBzd2l0Y2gg
KG1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChjYWxsTW9kZSkgewogICAgICAgICBjYXNlIENhbGxN
b2RlOjpSZWd1bGFyOgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsOwotICAgICAgICAg
ICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3Q7CisgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6
OlRhaWw6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENhbGw7Ci0gICAgICAgICAgICByZXR1cm4g
dmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdDsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFs
VGh1bmtGb3JUYWlsQ2FsbDsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgotICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENhbGw7CiAgICAgICAgICAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yQ29uc3RydWN0Q29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuaAppbmRleCAwZjlmNmUyZDM2ZjZkZDIzZTE4NzI2YWNlNjMxNGEzMGEyMDFkYmNl
Li5hYjdjZjY2YzQyMTUxZWUwMTk1OGMxYWIyMmYyOWZjZDhkZDcwMTRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IoVk0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtG
b3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbE1vZGUpOwogCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0mKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2VuZXJh
dG9yKFZNJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4
IGU4ZGFmZjdkODhiMzBjNmJmODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQwYjM3Mzg5MjFhNGYw
MDE1MTJlN2RlZTNhODQ0M2M1MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludERhdGEuY3BwCkBAIC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIgdm9pZCB3YXNtX2Vu
dHJ5KHZvaWQqLCB2b2lkKiwgdm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb0phdmFT
Y3JpcHRUcmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVRy
YW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhU
cmFtcG9saW5lKHZvaWQpOworZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0aG91dFVudGFnSlNF
bnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0aW9uSGFuZGxlclRy
YW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxMSW50VHJhbXBvbGlu
ZSh2b2lkKTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAg
ICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9u
czo6dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2Fs
bEdhdGUoSlNFbnRyeVB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3Jl
YXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcu
bGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5
UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC0x
NjEsMTEgKzE2MiwxOSBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAgICAg
ICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlTbG93UGF0
aFB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxH
YXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29k
ZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0
cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2Fs
bEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZpZy5sbGlu
dC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlTbG93
UGF0aFB0clRhZyldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICB9CisgICAgeworICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOworICAgICAgICBp
ZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVh
dGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAg
Z19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFp
bENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4g
Y29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMWE5NWQxZGQwZWE1ZWYz
NDMxMDYxNWI2OTFlYmM5YTFlYWI4MmE2YS4uZjlkMWRiNWE0NjkzNGM2NjcxNmVmNjc1ODBhNWM1
YTIyOGMxZDRiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRl
ICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5oIgogI2luY2x1ZGUg
IlNoYWRvd0NoaWNrZW4uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJW
TUlubGluZXMuaCIKQEAgLTU4Miw2ICs1ODMsMTcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3Rh
Y2tfY2hlY2spCiAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbEZyYW1lKTsKIH0KIAorZXh0
ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bywgSlNDZWxsKikKK3sKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwganNDYXN0PEpT
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgY2FsbExpbmtJbmZvKTsKK30KKworZXh0ZXJu
ICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bywgSlNDZWxsKikKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsK
KyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihqc0Nhc3Q8SlNHbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpLCBjYWxsZWVGcmFtZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbElnbm9yZWQpOworfQorCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3
X29iamVjdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTgxOSw3ICsxODMxLDggQEAgc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZy
YW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUo
YXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5W
YWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxP
YmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93
R0M7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZy
YW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBjYWxs
ZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOwor
ICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJ
bnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBz
bG93UGF0aExvZygiQ2FsbCBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwgIlxu
Iik7CkBAIC0xODM4LDcgKzE4NTEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRs
ZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgICAg
ICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS5l
bmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKICAgICAg
ICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9i
YWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5
cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAg
ICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnM7CisgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2Fs
bGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc2xv
d1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVl
LCAiXG4iKTsKQEAgLTE4NDcsNyArMTg2MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUg
aGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsCiAg
ICAgTExJTlRfQ0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVy
cm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiB9CiAKLWlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlLCBMTEludENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gbnVsbHB0cikKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENh
bGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJh
bWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTg1OSwxNyArMTg3MywxMiBAQCBpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lh
bGl6YXRpb25LaQogICAgIAogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRK
U0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwp
IHsKLSAgICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PElu
dGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKKyAgICAgICAgaWYgKGNhbGxl
ZUFzVmFsdWUuaW5oZXJpdHM8SW50ZXJuYWxGdW5jdGlvbj4odm0pKSB7CiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUlu
dGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEh
Y29kZVB0cik7Ci0KLSAgICAgICAgICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYm
IGNhbGxMaW5rSW5mbykgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsK
LSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQ
dHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBMTElOVF9D
QUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2FsbGVyU1AgPSBj
YWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAg
ICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGNhbGxlZUZyYW1lLCBj
YWxsZWVBc1ZhbHVlLCBraW5kKSk7CiAgICAgfQpAQCAtMTkwNCw3NCArMTkxMyw5IEBAIGlubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENv
ZGVTcGVjaWFsaXphdGlvbktpCiAgICAgfQogCiAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAg
Ci0gICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2sp
OwotICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVl
LCBjb2RlUHRyKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAgICAgIGNvZGVCbG9j
ay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgfQotCiAg
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFt
ZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWNDYWxs
KENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgT3AmJiBieXRlY29k
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgg
PSAwKQotewotICAgIC8vIFRoaXMgbmVlZHMgdG86Ci0gICAgLy8gLSBTZXQgdXAgYSBjYWxsIGZy
YW1lLgotICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBpbGUgaXQgaWYg
bmVjZXNzYXJ5LgotICAgIC8vIC0gSWYgcG9zc2libGUsIGxpbmsgdGhlIGNhbGwncyBpbmxpbmUg
Y2FjaGUuCi0gICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0
byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVB
c1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGNhbGxlZUZvcihieXRlY29kZSwgY2hlY2tw
b2ludEluZGV4KSk7Ci0gICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFt
ZSAtIHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5k
ZXgpOwotICAgIAotICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludEluZGV4
KSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+c2V0Q2Fs
bGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwg
a2luZCwgY2FsbGVlQXNWYWx1ZSwgJmNhbGxMaW5rSW5mb0ZvcihtZXRhZGF0YSwgY2hlY2twb2lu
dEluZGV4KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsKQotewot
ICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmpl
Y3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2Rl
QmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKLX0KLQot
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCkKLXsKLSAgICBMTElOVF9C
RUdJTl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxs
RnJhbWUsIHBjLT5hczxPcFRhaWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQotCi1MTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0KQotewotICAgIExMSU5UX0JFR0lOX05P
X1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwg
cGMtPmFzPE9wQ29uc3RydWN0PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7Ci19Ci0KLUxMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpCi17Ci0gICAgTExJTlRf
QkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwg
cGMtPmFzPE9wSXRlcmF0b3JPcGVuPigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRvck9wZW46OnN5
bWJvbENhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9y
X25leHRfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWND
YWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck5leHQ+KCksIENvZGVG
b3JDYWxsLCBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQpKTsKKyAgICBhdXRvKiBjYWxsZXJT
UCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAg
IExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKQpAQCAtMjA0Myw4ICsxOTg3LDggQEAg
ZW51bSBjbGFzcyBTZXRBcmd1bWVudHNXaXRoIHsKICAgICBDdXJyZW50QXJndW1lbnRzCiB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJn
c1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgU2V0QXJndW1lbnRzV2l0aCBzZXQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPcCwgU2V0QXJndW1lbnRzV2l0aCBzZXQ+CitpbmxpbmUgU2xvd1BhdGhSZXR1cm5U
eXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24q
IHBjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9Q
QygpOwogCkBAIC0yMDUzLDExICsxOTk3LDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
dmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAg
ICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5k
IHRoZSBuZXcgY2FsbCBmcmFtZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3A+KCk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAg
IEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5t
X2NhbGxlZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gdm0ubmV3Q2FsbEZyYW1l
UmV0dXJuVmFsdWU7Ci0KLSAgICBpZiAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCkg
eworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdm0udmFyYXJnc0xl
bmd0aCArIDE7CisgICAgaWYgY29uc3RleHByIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2Jq
ZWN0KSB7CiAgICAgICAgIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5t
X3RoaXNWYWx1ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2FyZ3VtZW50cyks
IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwogICAgICAgICBMTElO
VF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogICAgIH0gZWxzZQpAQCAtMjA2
NywyNyArMjAxMiwzMCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2FsbGVlRnJhbWUt
PnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2Fs
bGVlQXNWYWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwogCi0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwg
Y2FsbGVlQXNWYWx1ZSkpOworICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLnVwZGF0ZU1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKwor
ICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnM7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbGVyU1ApOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVy
biB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGws
IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcENh
bGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwgcGMsIENvZGVG
b3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbF92
YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3M+KGNh
bGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOworICAg
IHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6
Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogewotICAgIHJl
dHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGNhbGxGcmFtZSwg
cGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzKTsKKyAg
ICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBTZXRBcmd1
bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7
CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncykK
IHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncz4oY2FsbEZyYW1l
LCBwYywgQ29kZUZvckNvbnN0cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICBy
ZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncywgU2V0QXJndW1lbnRzV2l0aDo6
T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
cmV0dXJuUG9pbnQpCkBAIC0yMTEwLDcgKzIwNTgsOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5U
eXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlv
bgogICAgIAogICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZW5j
b2RlKGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNvZGUubV9lY21hTW9kZSkp
OwogICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9i
YWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5
cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAg
YXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJl
Z2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBM
TEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfY2FsbF9ldmFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuaAppbmRleCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4OGFhNmFhOTY0ZmI2ZTA5
YjY2Li5kNDM4ZmNiMzM5ZGFmZTM3YTNjMTQxZGJlMjRhNmFkMjExMjliYjhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMzgsNiArMzgsOCBA
QCBuYW1lc3BhY2UgTExJbnQgewogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGlu
dF90cmFjZV9vcGVyYW5kKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IGZyb21X
aGVyZSwgaW50IG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CiBleHRlcm4gIkMiIFNsb3dQ
YXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVj
dGlvbiosIGludCBmcm9tV2hlcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBSRUZFUkVOQ0VE
X0ZST01fQVNNOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxs
KENhbGxGcmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOworZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSosIEpTQ2Vs
bCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOwogZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dyaXRl
X2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUqLCBKU0NlbGwqKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdU
Rl9JTlRFUk5BTDsKIAogI2RlZmluZSBMTElOVF9TTE9XX1BBVEhfREVDTChuYW1lKSBcCkBAIC0x
MTksOSArMTIxLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9uZXdfYXN5bmNfZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9zZXRfZnVuY3Rpb25fbmFtZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF90YWlsX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb25z
dHJ1Y3QpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1l
X2Zvcl92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2l6
ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMTMxLDggKzEzMCw2IEBAIExMSU5UX1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MpOwogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpOwogTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTE2KTsKIExMSU5UX1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUzMik7Ci1MTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCk7Ci1MTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCk7CiBMTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX2FyZ3VtZW50cyk7CiBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBMTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCA0NjJjYmZiZTRlMzQ1Njg0NWUw
NWFhOGJjMGM0ODExNTNjYmI4ZDBhLi4xNjAzYzJjNzg1NGM5OTliZTllNmM1NzA1MzM2Y2ZmNzQy
NzI5MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVu
a3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAK
QEAgLTM0Niw5ICszNDYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiBwb2ludGVyLCBQdAogewogICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMywgdGFnKTsKLSAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJl
Z1QzKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywgT3BlcmF0aW9uUHRyVGFnKTsK
KyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUNSwgdGFnKTsKKyAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJlZ1Q1KTsKKyAgICBqaXQu
ZmFySnVtcChHUFJJbmZvOjpyZWdUNSwgT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OkxMSW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRp
dmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKQEAg
LTM2NiwxMyArMzY2LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQ
dHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCogcG9pbnRlciwKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAiTExJbnQgJXMg
d2FzbSBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyB0YWcpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2Fs
bEdhdGUoUHRyVGFnIHRhZywgYm9vbCB1bnRhZykKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0Owog
Ci0gICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQVJNNjRSZWdpc3RlcnM6
OmxyKTsKLSAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJlZ2lzdGVyczo6bHIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDAsIHRh
Zyk7CisgICAgaWYgKHVudGFnKSB7CisgICAgICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjphcmd1
bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAgIGppdC52YWxpZGF0ZVVudGFn
Z2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICB9
CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6YXJndW1lbnRHUFI3LCB0YWcpOwogCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50IHRhaWwgY2FsbCBnYXRlIHRodW5rIik7CkBA
IC01NzMsOCArNTc1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJl
dHVybkxvY2F0aW9uVGh1bmsoT3Bjb2RlSUQgb3Bjb2RlSUQsIE9wY28KICAgICBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfaXRlcmF0b3Jfb3BlbikKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04o
b3BfaXRlcmF0b3JfbmV4dCkKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0
KQotICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdykKLSAgICBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdykKKyAgICBMTElO
VF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKQorICAgIExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3Bf
Z2V0X2J5X2lkKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlfdmFsKQogICAg
IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFRodW5rcy5oCmluZGV4IGI4N2M0MjBjYmU0MDJhMWYwY2YwODY4MTA3YjVh
ZmQ2ZGJjZjU0YWMuLjA1ZWM2MDFjMDE2NGNiOTU0YjczYTIxYzczNTFmZjAxMGZlYTcxMGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCkBAIC04OCw3ICs4OCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGppdENhZ2VQ
dHJUaHVuaygpOwogI2lmIENQVShBUk02NEUpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiwgUHRyVGFnLCBjb25zdCBj
aGFyKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVh
dGVXYXNtR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJU
YWcpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRl
VGFpbENhbGxHYXRlKFB0clRhZywgYm9vbCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPiBsb29wT1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKTsK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IHdhc21PU1JFbnRy
eUdhdGVUaHVuaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGJiODhiNmZkYjA5OWI0OTlhZTZmZjRlODEwMTAxNTA0
ZGFhNmQ0ZTMuLjMwN2I0MWYxN2FmMzg4NmY2M2JkOGE4NjRiNTNiYWM1ZDU0ODRhN2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KQEAgLTU1MSw2ICs1NTEsNyBAQCBjb25zdCBTeW1ib2xUeXBlID0gY29uc3RleHByIFN5bWJv
bFR5cGUKIGNvbnN0IE9iamVjdFR5cGUgPSBjb25zdGV4cHIgT2JqZWN0VHlwZQogY29uc3QgRmlu
YWxPYmplY3RUeXBlID0gY29uc3RleHByIEZpbmFsT2JqZWN0VHlwZQogY29uc3QgSlNGdW5jdGlv
blR5cGUgPSBjb25zdGV4cHIgSlNGdW5jdGlvblR5cGUKK2NvbnN0IEludGVybmFsRnVuY3Rpb25U
eXBlID0gY29uc3RleHByIEludGVybmFsRnVuY3Rpb25UeXBlCiBjb25zdCBBcnJheVR5cGUgPSBj
b25zdGV4cHIgQXJyYXlUeXBlCiBjb25zdCBEZXJpdmVkQXJyYXlUeXBlID0gY29uc3RleHByIERl
cml2ZWRBcnJheVR5cGUKIGNvbnN0IFByb3h5T2JqZWN0VHlwZSA9IGNvbnN0ZXhwciBQcm94eU9i
amVjdFR5cGUKQEAgLTExNTEsMjcgKzExNTIsMjcgQEAgbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9u
KG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmkK
ICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxsZWUKICAgICBlbHNpZiBBUk02NEUKICAg
ICAgICAgbWFjcm8gY2FsbE5hcnJvdygpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNv
bnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6
JW9wY29kZU5hbWUlKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZl
VG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcg
KyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdh
dGU6OiVvcGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9s
aW5lXyVvcGNvZGVOYW1lJToKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAg
ICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8g
Y2FsbFdpZGUxNigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6
Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUl
X3dpZGUxNikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklU
R2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29u
c3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjol
b3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwg
TmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1w
b2xpbmVfJW9wY29kZU5hbWUlX3dpZGUxNjoKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJU
YWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAg
ICAgbWFjcm8gY2FsbFdpZGUzMigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0
ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9w
Y29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBq
bXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAg
X2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUzMjoKLSAgICAgICAgICAgIGNhbGwgdDMs
IGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5k
CiAKLSAgICAgICAgbW92ZSBjYWxsZWUsIHQzCisgICAgICAgIG1vdmUgY2FsbGVlLCB0NQogICAg
ICAgICBzaXplKGNhbGxOYXJyb3csIGNhbGxXaWRlMTYsIGNhbGxXaWRlMzIsIG1hY3JvIChnZW4p
IGdlbigpIGVuZCkKICAgICBlbHNlCiAgICAgICAgIGNhbGwgY2FsbGVlLCBjYWxsUHRyVGFnCkBA
IC0xMjA5LDEyICsxMjEwLDIzIEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAgICAgZW5kCiBl
bmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0
ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCi0gICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwg
c3AKK21hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1w
NCkKIGVuZAogCi0jIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lCi1tYWNybyBwcmVwYXJlRm9y
VGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykK
K21hY3JvIGludm9rZUZvclJlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVj
dCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVl
LCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIGNhbGxQdHJUYWcpCitlbmQKKworIyB0NSBpcyBtZXRh
ZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93UmVndWxh
ckNhbGwoKQorZW5kCisKKyMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUgKyBDYWxsZXJGcmFt
ZUFuZFBDU2l6ZQorIyBXZSBsZWF2ZSBjZnIgdGVtcDQgdG8gdXNlIGl0IGZvciB1bnRhZ2dpbmcu
CittYWNybyBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCiAg
ICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogCiAgICAgbG9hZGkgUGF5bG9hZE9m
ZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzW2Nmcl0sIHRlbXAyCkBAIC0xMjMyLDE4
ICsxMjQ0LDE3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1w
MiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIG1vdmUgY2ZyLCB0ZW1wMQogICAgIGFk
ZHAgdGVtcDIsIHRlbXAxCiAKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXNbc3BdLCB0ZW1wMgorICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIENhbGxlckZyYW1lQW5kUENTaXplW3NwXSwgdGVtcDIK
ICAgICAjIFdlIGFzc3VtZSA8IDJeMjggYXJndW1lbnRzCiAgICAgbXVsaSBTbG90U2l6ZSwgdGVt
cDIKICAgICBhZGRpIFN0YWNrQWxpZ25tZW50IC0gMSArIENhbGxGcmFtZUhlYWRlclNpemUsIHRl
bXAyCiAgICAgYW5kaSB+U3RhY2tBbGlnbm1lbnRNYXNrLCB0ZW1wMgogCiAgICAgaWYgQVJNdjcg
b3IgQVJNNjQgb3IgQVJNNjRFIG9yIENfTE9PUCBvciBDX0xPT1BfV0lOIG9yIE1JUFMgb3IgUklT
Q1Y2NAotICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAogICAgICAgICBzdWJp
IENhbGxlckZyYW1lQW5kUENTaXplLCB0ZW1wMgogICAgICAgICBsb2FkcCBDYWxsZXJGcmFtZUFu
ZFBDOjpyZXR1cm5QQ1tjZnJdLCBscgogICAgIGVsc2UKLSAgICAgICAgYWRkcCBQdHJTaXplLCBz
cAorICAgICAgICBzdWJwIFB0clNpemUsIHNwCiAgICAgICAgIHN1YmkgUHRyU2l6ZSwgdGVtcDIK
ICAgICAgICAgbG9hZHAgUHRyU2l6ZVtjZnJdLCB0ZW1wMwogICAgICAgICBzdG9yZXAgdGVtcDMs
IFtzcF0KQEAgLTEyNzAsOSArMTI4MSwxMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2Fs
bGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBlbmQKIAog
ICAgIG1vdmUgdGVtcDEsIHNwCitlbmQKKworbWFjcm8gaW52b2tlRm9yVGFpbENhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFnKQogICAgIGlm
IEFSTTY0RQotICAgICAgICBtb3ZlIHRlbXA0LCBhMgotICAgICAgICBtb3ZlIGNhbGxlZSwgYTAK
KyAgICAgICAgbW92ZSBtYXliZU9sZENGUiwgYTIKKyAgICAgICAgbW92ZSBjYWxsZWUsIGE3CiAg
ICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdH
YXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbCVjYWxsUHRyVGFnJSkgKiBQdHJTaXpl
LCBhMQogICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJU
YWclCiAgICAgZWxzZQpAQCAtMTI4MCw2ICsxMjk0LDIyIEBAIG1hY3JvIHByZXBhcmVGb3JUYWls
Q2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAg
IGVuZAogZW5kCiAKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQb2x5bW9ycGhp
Y1RhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFt
ZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbFB0clRhZykKKyAgICBpZiBBUk02
NEUKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5m
by51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTcKKyAgICAgICAg
bGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAg
KyAoY29uc3RleHByIEdhdGU6OnRhaWxDYWxsV2l0aG91dFVudGFnJWNhbGxQdHJUYWclKSAqIFB0
clNpemUsIGExCisgICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyAlY2Fs
bFB0clRhZyUKKyAgICBlbHNlCisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0
NV0sIGExCisgICAgICAgIGptcCBhMSwgY2FsbFB0clRhZworICAgIGVuZAorZW5kCisKK21hY3Jv
IHByZXBhcmVGb3JTbG93VGFpbENhbGwoKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc1VzZWRCeUxM
SW50KCkKK2VuZAorCiBtYWNybyBzbG93UGF0aEZvckNvbW1vbkNhbGwob3Bjb2RlTmFtZSwgc2l6
ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIHNs
b3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwg
bV9kc3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiBlbmQKQEAgLTEyOTEsNyAr
MTMyMSw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1CiAgICAgICAgIG1hY3JvIChjYWxsZWUs
IGNhbGxlZUZyYW1lUHRyKQogICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRV
cGRhdGVTUAogICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKLSAgICAgICAgICAg
IHByZXBhcmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlTbG93UGF0aFB0clRh
ZykKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQogICAgICAgICAuZG9u
dFVwZGF0ZVNQOgogICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9z
bG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQogICAgICAgICBl
bmQpCkBAIC0xODIwLDEyICsxODUwLDE2IEBAIGlmIEFSTTY0RQogICAgIGdsb2JhbCBfdGFpbENh
bGxKU0VudHJ5VHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lOgogICAg
ICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5UHRyVGFn
CisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpT
RW50cnlTbG93UGF0aFRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFt
cG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBK
U0VudHJ5U2xvd1BhdGhQdHJUYWcKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCisKKyAg
ICBnbG9iYWwgX3RhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUKKyAgICBfdGFp
bENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZToKKyAgICAgICAgam1wIGE3LCBKU0Vu
dHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lCiAgICAg
X2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lOgpAQCAtMjMyNSwxNyArMjM1OSwxNyBAQCBlbmQp
CiAKIAogIyB3ZSBjYW4ndCB1c2UgY2FsbE9wIGJlY2F1c2Ugd2UgY2FuJ3QgcGFzcyBgY2FsbGAg
YXMgdGhlIG9wY29kZSBuYW1lLCBzaW5jZSBpdCdzIGFuIGluc3RydWN0aW9uIG5hbWUKLWNvbW1v
bkNhbGxPcChvcF9jYWxsLCBfbGxpbnRfc2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCitjb21tb25DYWxsT3Aob3BfY2Fs
bCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
aW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBw
cmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJy
YXlQcm9maWxlRm9yQ2FsbChPcENhbGwsIGdldHUpCiBlbmQpCiAKIAotbWFjcm8gY2FsbE9wKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGZuKQotICAgIGNvbW1vbkNhbGxP
cChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKK21hY3JvIGNhbGxPcChvcGNvZGVOYW1lLCBvcGNvZGVT
dHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBh
cmVTbG93Q2FsbCwgZm4pCisgICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1lJSwgX2xsaW50
X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9r
ZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBmbikKIGVuZAogCiAK
LWNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8g
KGdldHUsIG1ldGFkYXRhKQorY2FsbE9wKHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZv
clRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENh
bGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBh
cnJheVByb2ZpbGVGb3JDYWxsKE9wVGFpbENhbGwsIGdldHUpCiAgICAgY2hlY2tTd2l0Y2hUb0pJ
VEZvckVwaWxvZ3VlKCkKICAgICAjIHJlbG9hZCBtZXRhZGF0YSBzaW5jZSBjaGVja1N3aXRjaFRv
SklURm9yRXBpbG9ndWUoKSBtaWdodCBoYXZlIHRyYXNoZWQgdDUKQEAgLTIzNDMsNyArMjM3Nyw3
IEBAIGNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFj
cm8gKGdldHUsIG1ldGFkYXRhKQogZW5kKQogCiAKLWNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3Ry
dWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQor
Y2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52
b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVw
YXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCiBt
YWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCkBAIC0yMzU0LDQ3ICsyMzg4
LDI5IEBAIG1hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKIC5ub0V4Y2Vw
dGlvbjogICAgCiBlbmQKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBv
cGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNh
bGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCi0gICAgYnJhbmNoSWZFeGNlcHRp
b24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCi0gICAgIyBjYWxsZWVG
cmFtZSBpbiByMQotICAgIGlmIEpTVkFMVUU2NAotICAgICAgICBtb3ZlIHIxLCBzcAotICAgIGVs
c2UKLSAgICAgICAgIyBUaGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUg
ZG93biBieSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGlnbgotICAgICAgICBpZiBBUk12Nwot
ICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCi0gICAgICAgICAg
ICBtb3ZlIHQyLCBzcAotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSwgc3AKLSAgICAgICAgZW5kCi0gICAgZW5kCi0gICAgc2xvd1BhdGhGb3JD
b21tb25DYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCkKLWVuZAotCiAKLWxsaW50T3Aob3BfY2FsbF92YXJhcmdzLCBPcENh
bGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJhcmdz
KG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgT3BDYWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9z
bG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3Zh
cmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfY2Fs
bF92YXJhcmdzLCBPcENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKKyAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwg
Z2V0LCBPcENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0
aF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNh
bGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3Vs
YXJDYWxsKQogZW5kKQogCi1sbGludE9wKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxs
VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRh
KG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVw
aWxvZ3VlKCkKICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQg
b2YgcHJlcGFyaW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBm
b3IgYSBjYWxsIG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3Ms
IHNpemUsIE9wVGFpbENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXpl
X2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzLCBw
cmVwYXJlRm9yVGFpbENhbGwpCisgICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJn
cywgc2l6ZSwgZ2V0LCBPcFRhaWxDYWxsVmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9s
bGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52
b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9y
U2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cywgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAg
ICAgIyBXZSBsaWUgYW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmlu
ZyBpdCBzaW5jZSB3ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBv
cGNvZGUKLSAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywg
c2l6ZSwgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19w
YXRoX3NpemVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRoX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsKQorICAgIGRvQ2Fs
bFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBnZXQsIE9wVGFp
bENhbGxGb3J3YXJkQXJndW1lbnRzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9s
bGludF9zbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFp
bENhbGwsIGludm9rZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwg
cHJlcGFyZUZvclNsb3dUYWlsQ2FsbCkKIGVuZCkKIAogCi1sbGludE9wKG9wX2NvbnN0cnVjdF92
YXJhcmdzLCBPcENvbnN0cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQot
ICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIE9wQ29uc3RydWN0
VmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJn
cywgX2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJD
YWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25zdHJ1
Y3RWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
KyAgICBkb0NhbGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ29u
c3RydWN0VmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxp
bnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29u
c3RydWN0X3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNh
bGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3Vs
YXJDYWxsKQogZW5kKQogCiAKQEAgLTI1MTAsNiArMjUyNiw5MSBAQCBvcChsbGludF9pbnRlcm5h
bF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBpbnRlcm5hbEZ1
bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5jdGlvbkZvckNvbnN0
cnVjdCkKIGVuZCkKIAorIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlz
IENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3JvIGxp
bmtTbG93UGF0aEZvcihmdW5jdGlvbikKKyAgICBmdW5jdGlvblByb2xvZ3VlKCkKKyAgICBsb2Fk
cCBKU0dsb2JhbE9iamVjdDo6bV92bVt0M10sIHQxCisgICAgc3RvcmVwIGNmciwgVk06OnRvcENh
bGxGcmFtZVt0MV0KKyAgICBtb3ZlIHQyLCBhMgorICAgIG1vdmUgdDMsIGExCisgICAgbW92ZSBj
ZnIsIGEwCisgICAgY0NhbGw0KGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uRXBpbG9ndWUoKQorICAg
IHVudGFnUmV0dXJuQWRkcmVzcyBzcAorICAgIGJ0cHogcjEsIC5kb05vdFRyYXNoCisgICAgcHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKQorICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0
MSwgdDIsIHQzLCB0NCkKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MgdDQKKy5kb05vdFRyYXNoOgor
ICAgIGptcCB0MCwgSlNFbnRyeVB0clRhZworZW5kCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEp
IGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xv
YmFsT2JqZWN0CittYWNybyB2aXJ0dWFsVGh1bmtGb3Iob2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5
Q2hlY2ssIGludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lLCBwcmVwYXJlQ2FsbCwgc2xvd0Nhc2Up
CisgICAgYWRkaSAxLCBDYWxsTGlua0luZm86Om1fc2xvd1BhdGhDb3VudFt0Ml0KKyAgICBpZiBK
U1ZBTFVFNjQKKyAgICAgICAgbW92ZSBOb3RDZWxsTWFzaywgdDEKKyAgICAgICAgYnRxbnogdDAs
IHQxLCBzbG93Q2FzZQorICAgIGVsc2UKKyAgICAgICAgYmluZXEgdDEsIENlbGxUYWcsIHNsb3dD
YXNlCisgICAgZW5kCisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBKU0Z1bmN0aW9uVHlw
ZSwgLm5vdEpTRnVuY3Rpb24KKyAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVPclJh
cmVEYXRhW3QwXSwgdDEKKyAgICBidHB6IHQxLCAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVE
YXRhVGFnKSwgLmlzRXhlY3V0YWJsZQorICAgIGxvYWRwIChGdW5jdGlvblJhcmVEYXRhOjptX2V4
ZWN1dGFibGUgLSAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSlbdDFdLCB0MQor
LmlzRXhlY3V0YWJsZToKKyAgICBsb2FkcCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja1t0
MV0sIHQxCisgICAgYnRweiB0MSwgc2xvd0Nhc2UKKy5jYWxsQ29kZToKKyAgICBwcmVwYXJlQ2Fs
bCh0NSwgdDIsIHQzLCB0NCkKKyAgICBqbXAgdDEsIEpTRW50cnlQdHJUYWcKKy5ub3RKU0Z1bmN0
aW9uOgorICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgSW50ZXJuYWxGdW5jdGlvblR5cGUs
IHNsb3dDYXNlCisgICAgcHJlcGFyZUNhbGwodDUsIHQyLCB0MywgdDQpCisgICAgam1wIGludGVy
bmFsRnVuY3Rpb25UcmFtcG9saW5lCitlbmQKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMg
Y2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxP
YmplY3QKK29wKGxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGxpbmtT
bG93UGF0aEZvcihfbGxpbnRfbGlua19jYWxsKQorZW5kKQorCisjIDY0Yml0OnQwIDMyYml0KHQw
LHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBK
U0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgp
CisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1h
Y3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nh
c2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMg
NjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisj
IHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX2NvbnN0cnVj
dF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFz
ZTo6bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMs
IHRlbXA0KSBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3Io
X2xsaW50X3ZpcnR1YWxfY2FsbCkKK2VuZCkKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMg
Y2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxP
YmplY3QKK29wKGxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisg
ICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3Jv
ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKKyAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKHRlbXAxKQorICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRl
bXAyLCB0ZW1wMywgdGVtcDQpCisgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0ZW1wNAorICAg
IGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRf
dmlydHVhbF9jYWxsKQorZW5kKQogCiBpZiBKSVQKICAgICBtYWNybyBsb2FkQmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGMwNGZmZDZiMGJjM2YyNmUxOTJmMDZmMmJiZjc0YjA2
NGRjYjI3OWEuLjk4NzZlZjZlZjc0MmFjZWVkYWUyNjlhMmFiNDU0YzViNjJjZDUxNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5j
cHAKQEAgLTEyOSw2ICsxMjksOCBAQCB1c2luZyBXZWJDb25maWc6OmdfY29uZmlnOwogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgQ2FsbExpbmtJbmZvOworCiAvLz09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KIC8vIENMb29wUmVnaXN0ZXIgaXMgdGhlIHN0b3JhZ2UgZm9yIGFuIGVtdWxhdGVkIENQVSBy
ZWdpc3Rlci4KIC8vIEl0IGRlZmluZXMgdGhlIHBvbGljeSBvZiBob3cgaW50cyBzbWFsbGVyIHRo
YW4gaW50cHRyX3QgYXJlIHBhY2tlZCBpbnRvIHRoZQpAQCAtMTY2LDYgKzE2OCw3IEBAIGNsYXNz
IENMb29wUmVnaXN0ZXIgewogICAgIG9wZXJhdG9yIFByb3RvQ2FsbEZyYW1lKigpIHsgcmV0dXJu
IGJpdHdpc2VfY2FzdDxQcm90b0NhbGxGcmFtZSo+KG1fdmFsdWUpOyB9CiAgICAgb3BlcmF0b3Ig
UmVnaXN0ZXIqKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lzdGVyKj4obV92YWx1ZSk7IH0K
ICAgICBvcGVyYXRvciBWTSooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Vk0qPihtX3ZhbHVlKTsg
fQorICAgIG9wZXJhdG9yIENhbGxMaW5rSW5mbyooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2Fs
bExpbmtJbmZvKj4obV92YWx1ZSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnRwdHJfdCk+Pgog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcj0oVCB2YWx1ZSkgeyBtX3ZhbHVlID0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDkwM2U1
YTQ1YjFiNjY4MmZkMjg3OGI5Nzk0ODUyYWVmZDY3NTFkNWUuLmQ4YjYzMDhhM2U2ZmQ0NWYyYzM1
ZDBiMjdhNDQ5NGI5OGRhNjAzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMTgsNyArMTE4LDkg
QEAgbWFjcm8gY0NhbGwyVm9pZChmdW5jdGlvbikKIGVuZAogCiBtYWNybyBjQ2FsbDQoZnVuY3Rp
b24pCi0gICAgaWYgQVJNdjcgb3IgTUlQUworICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCisg
ICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMKKyAgICBl
bHNpZiBBUk12NyBvciBNSVBTCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYg
b3IgWDg2X1dJTgogICAgICAgICBwdXNoIGEzCkBAIC0yMTUxLDM1ICsyMTUzLDYwIEBAIG1hY3Jv
IGFycmF5UHJvZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGJpbmVxIFRoaXNB
cmd1bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAg
ICBsb2FkaSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0
MAogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVpIHQw
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxl
Lm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRv
bmU6CiBlbmQKIAotbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxs
LCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwg
Z2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEodDUsIHQwKQotICAg
IGdldENhbGxlZSh0MCkKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCittYWNybyBjYWxsSGVscGVyKG9w
Y29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZp
cnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhp
YywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwg
Z2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgZ2V0
Q2FsbGVlKHQzKQogCi0gICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0sIHQyCi0gICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQzLCAub3BD
YWxsU2xvdykKLSAgICBiaW5lcSB0MywgdDIsIC5vcENhbGxTbG93CisgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MywgdDEsIHQwKQorCisgICAgIyBBbGlnbmVkIHRvIEpJVDo6Y29t
cGlsZVNldHVwRnJhbWUKICAgICBnZXRBcmd1bWVudFN0YXJ0KHQzKQogICAgIGxzaGlmdGkgMywg
dDMKICAgICBuZWdpIHQzCiAgICAgYWRkcCBjZnIsIHQzICAjIHQzIGNvbnRhaW5zIHRoZSBuZXcg
dmFsdWUgb2YgY2ZyCi0gICAgc3RvcmVpIHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3QzXQot
ICAgIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKSAgICAKLSAgICBzdG9yZWkgUEMs
IEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBnZXRBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyh0MikKICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KLSAgICBzdG9yZWkgQ2VsbFRhZywgQ2Fs
bGVlICsgVGFnT2Zmc2V0W3QzXQorCisgICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2Fs
bGVlfCwgYW5kIGNvbmZpZ3VyZSBzcC4KKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZWkgdDAsIENhbGxlZSArIFBheWxv
YWRPZmZzZXRbdDNdCisgICAgc3RvcmVpIHQxLCBDYWxsZWUgKyBUYWdPZmZzZXRbdDNdCiAgICAg
bW92ZSB0Mywgc3AKLSAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
Y2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCB0MSwgSlNF
bnRyeVB0clRhZykKLSAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNo
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVU
YXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQorICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUs
IHNwCisKKyAgICBiaW5lcSB0MSwgQ2VsbFRhZywgLm9wQ2FsbFNsb3cKKyAgICBsb2FkcCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tb
dDVdLCB0MworICAgIGJ0cHogdDMsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhp
Y0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAjIHByZXBhcmVDYWxsIGluIExMSW50
IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQg
aW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVu
dGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9u
ZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICBwcmVwYXJlUG9seW1vcnBoaWMo
b3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0
dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAgIGptcCAuZ29Qb2x5bW9y
cGhpYworCisubm90UG9seW1vcnBoaWM6CisgICAgYnBuZXEgdDAsIHQzLCAub3BDYWxsU2xvdwor
ICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisuZ29Qb2x5bW9ycGhpYzoKKyAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1f
bW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGludm9rZUNhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCiAKIC5vcENhbGxTbG93Ogot
ICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVl
UHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVw
YXJlQ2FsbCkKKyAgICAjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAjIHQy
IGlzIENhbGxMaW5rSW5mbyoKKyAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0Cisg
ICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIg
IyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2Jq
ZWN0W3QzXSwgdDMKKyAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlv
biglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKIGVuZAog
ICAgICAgICAKLW1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2Rl
U3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCittYWNybyBjb21tb25DYWxsT3Aob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHBy
ZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIApA
QCAtMjE4OCw3ICsyMjE1LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQ
YXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5kLCBt
ZXRhZGF0YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICBnZXQo
bV9jYWxsZWUsIHQwKQorICAgICAgICAgICBnZXQobV9jYWxsZWUsIGRzdCkKICAgICAgICAgZW5k
CiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3QpCkBAIC0yMTk5LDEwICsyMjI2
LDY4IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3Ry
dWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29k
ZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogICAgICAgICAKLSAgICAgICAgY2Fs
bEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1f
ZHN0LCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdl
dEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCisgICAgICAgICMgdDUgaG9sZHMgbWV0
YWRhdGEKKyAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3Ry
dWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBv
bHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0
Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVuZCkKIGVu
ZAogCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBw
cmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJh
bWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93
X3BhdGhfdHJhbXBvbGluZSkKKyAgICAjIGNhbGxlZUZyYW1lIGluIHIxCisgICAgaWYgSlNWQUxV
RTY0CisgICAgICAgIG1vdmUgcjEsIHNwCisgICAgZWxzZQorICAgICAgICAjIFRoZSBjYWxsZWVG
cmFtZSBpcyBub3Qgc3RhY2sgYWxpZ25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZyYW1lQW5kUENT
aXplIHRvIGFsaWduCisgICAgICAgIGlmIEFSTXY3CisgICAgICAgICAgICBzdWJwIHIxLCBDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSwgdDIKKyAgICAgICAgICAgIG1vdmUgdDIsIHNwCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorICAgICAg
ICBlbmQKKyAgICBlbmQKKyAgICBjYWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBzbG93UGF0aCwK
KyAgICAgICAgIyBUaG9zZSBhcmUgcjAgYW5kIHIxCisgICAgICAgIG1hY3JvIChyZXN0b3JlZFBD
T3JUaHJvdywgY2FsbGVlRnJhbWVQdHIpCisgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRy
LCAuZG9udFVwZGF0ZVNQCisgICAgICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAg
ICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCisgICAgICAgICAgICBnZXQobV9jYWxs
ZWUsIHQyKQorICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDEs
IHQwKQorICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisgICAgICAgICAgICBiaW5lcSB0
MSwgQ2VsbFRhZywgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQzCisg
ICAgICAgICAgICBidHB6IHQzLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWND
YWxsZWVNYXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAgICAgICAgICAjIHByZXBhcmVDYWxsIGlu
IExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFn
IHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAgICAgICAgICMgQnV0IHdl
IHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0
IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgorICAgICAgICAg
ICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFs
dWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgSlNFbnRyeVB0clRh
ZykKKyAgICAgICAgICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisgICAgICAgIC5ub3RQb2x5bW9y
cGhpYzoKKyAgICAgICAgICAgIGJwbmVxIHQwLCB0MywgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAg
IHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisgICAgICAgIC5nb1BvbHltb3JwaGljOgor
ICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5m
by51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAg
ICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJU
YWcpCisKKyAgICAgICAgLm9wQ2FsbFNsb3c6CisgICAgICAgICAgICAjIDY0Yml0OnQwIDMyYml0
KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgorICAg
ICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgICAgICAgICAgYWRk
cCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxs
TGlua0luZm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAg
ICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgICAgICAgICBsb2FkcCBDb2Rl
QmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAgICAgIHByZXBhcmVTbG93Q2Fs
bCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5kb250VXBkYXRlU1A6CisgICAg
ICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKKyAgICAg
ICAgZW5kKQorZW5kCisKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICBnZXQobV92
YWx1ZSwgdDIpCkBAIC0yODY2LDcgKzI5NTEsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0
ZXJhdG9yX29wZW4sIE9wSXRlcmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAog
ICAgICAgICBtb3ZlIDEsIGRzdAogICAgIGVuZAogCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRv
cl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9w
ZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQor
ICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9s
bGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVy
YXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9y
UmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9y
U2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1
ZGluZ1RoaXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9yZU5leHRBbmRE
aXNwYXRjaCh2YWx1ZVRhZywgdmFsdWVQYXlsb2FkKQpAQCAtMjkyNyw3ICszMDEzLDggQEAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBh
cyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCi0gICAgY2Fs
bEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRf
Y2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwg
Z2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNs
dWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3Bf
aXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRl
cmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxh
ckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFy
Q2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3Bv
aW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwg
Z2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CiAgICAgbWFj
cm8gc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWVUYWcsIGRvbmVWYWx1ZVBheWxv
YWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCmluZGV4IGE5MTMxNGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJlMmY1OWMwYTgz
NzAuLjM5MjVjN2MzNmM0ZTM4MDAyODM3MmZiZjZiZGY1ZTcxNGM5NjViNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CkBAIC0xNDMsNyArMTQzLDkgQEAgZW5kCiAjIFRoaXMgYmFyZWx5IHdvcmtzLiBhcmczIGFuZCBh
cmc0IHNob3VsZCBwcm9iYWJseSBiZSBpbW1lZGlhdGVzLgogbWFjcm8gY0NhbGw0KGZ1bmN0aW9u
KQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHQ0LCAweGJhZDBjMDA0KQotICAgIGlm
IFg4Nl82NCBvciBBUk02NCBvciBBUk02NEUgb3IgUklTQ1Y2NAorICAgIGlmIENfTE9PUCBvciBD
X0xPT1BfV0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBh
MiwgYTMKKyAgICBlbHNpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKICAg
ICAgICAgY2FsbCBmdW5jdGlvbgogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBPbiBX
aW42NCwgcmN4LCByZHgsIHI4LCBhbmQgcjkgYXJlIHVzZWQgZm9yIHBhc3NpbmcgdGhlIGZpcnN0
IGZvdXIgcGFyYW1ldGVycy4KQEAgLTMwOSwxMiArMzExLDEyIEBAIG1hY3JvIG1ha2VKYXZhU2Ny
aXB0Q2FsbChlbnRyeSwgcHJvdG9DYWxsRnJhbWUsIHRlbXAxLCB0ZW1wMikKICAgICBpZiBDX0xP
T1Agb3IgQ19MT09QX1dJTgogICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAg
ZWxzaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgZW50cnksIHQzCi0gICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGEyCi0gICAgICAgIGptcCBb
YTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisgICAgICAgIG1vdmUg
ZW50cnksIHQ1CisgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0
T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0
KSAqIFB0clNpemUsIGE3CisgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcg
IyBKU0VudHJ5UHRyVGFnCiAgICAgICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1w
b2xpbmUKICAgICAgICAgX3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lOgotICAgICAgICBj
YWxsIHQzLCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGNhbGwgdDUsIEpTRW50cnlQdHJUYWcKICAg
ICBlbHNlCiAgICAgICAgIGNhbGwgZW50cnksIEpTRW50cnlQdHJUYWcKICAgICBlbmQKQEAgLTIz
NjAsNDEgKzIzNjIsNTggQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3Qs
IGdldHUpCiAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAg
IGJ0cW56IHQwLCBub3RDZWxsTWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0
dXJlSURbdDBdLCB0MwotICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisg
ICAgc3RvcmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1f
bGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3JvIGNhbGxIZWxwZXIo
b3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KQotICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisjIHQ1IGhvbGRzIG1l
dGFkYXRhLgorbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBp
bnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIGdldENhbGxlZSh0MSkKIAotICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2Fs
bGVlV2l0aExpbmtCaXRbdDVdLCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDAsIHQzKQotICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQxLCB0MCkKIAorICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lCiAgICAgZ2V0QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAg
ICAgbmVncCB0MwogICAgIGFkZHAgY2ZyLCB0MwotICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQog
ICAgIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKQotICAgIHN0b3JlUEMoKQogICAg
IHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3Qz
XQorCisgICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3Vy
ZSBzcC4KKyAgICBzdG9yZVBDKCkKKyAgICBzdG9yZXEgdDAsIENhbGxlZVt0M10KICAgICBtb3Zl
IHQzLCBzcAotICAgIGlmIEFSTTY0RQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAg
ICBwcmVwYXJlQ2FsbCh0MCwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAg
IGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5l
Q29kZVRhcmdldFt0NV0sIHQwCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rl
ciwgZGlzcGF0Y2gsIHQwLCBKU0VudHJ5UHRyVGFnKQotICAgIGVsc2UKLSAgICAgICAgcHJlcGFy
ZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVD
b2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNh
bGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJv
ZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQ
dHJUYWcpCi0gICAgZW5kCi0ub3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAgICBhZGRwIENh
bGxlckZyYW1lQW5kUENTaXplLCBzcAorCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDEKKyAgICBidHB6
IHQxLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5v
dFBvbHltb3JwaGljCisgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyBy
ZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5l
IHNlcGFyYXRlbHkuCisgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5
bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3Jw
aGljIHRodW5rIHNpZGUuCisgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgSlNFbnRyeVB0clRhZykKKyAgICBqbXAgLmdvUG9seW1vcnBoaWMKIAotbWFjcm8gY29t
bW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxs
LCBwcm9sb2d1ZSkKKy5ub3RQb2x5bW9ycGhpYzoKKyAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxT
bG93CisgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgor
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRh
SUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworLm9wQ2FsbFNs
b3c6CisgICAgIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgIyB0MiBpcyBD
YWxsTGlua0luZm8qCisgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgIGFk
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2Fs
bExpbmtJbmZvKiBpbiB0MgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHQzCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0
M10sIHQzCisgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9w
Y29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCitlbmQKKworbWFj
cm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBh
cmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwg
cHJvbG9ndWUpCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAg
ICBtZXRhZGF0YSh0NSwgdDApCiAKQEAgLTI0MDMsNyArMjQyMiw3IEBAIG1hY3JvIGNvbW1vbkNh
bGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJv
bG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVl
KGRzdCkKLSAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAgICBnZXQobV9j
YWxsZWUsIGRzdCkKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFy
dChkc3QpCkBAIC0yNDE0LDEwICsyNDMzLDY3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVO
YW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAg
ICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVu
ZAogCi0gICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVj
dCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQorICAgICAg
ICAjIHQ1IGhvbGRzIG1ldGFkYXRhCisgICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xv
d1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIGludm9r
ZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRj
aCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3Vu
dCkKICAgICBlbmQpCiBlbmQKIAorbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXpl
LCBnZXQsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVy
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2Fs
bCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwpCisgICAg
Y2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50
X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgIyBjYWxsZWVGcmFtZSBpbiBy
MQorICAgIGlmIEpTVkFMVUU2NAorICAgICAgICBtb3ZlIHIxLCBzcAorICAgIGVsc2UKKyAgICAg
ICAgIyBUaGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUgZG93biBieSBD
YWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGlnbgorICAgICAgICBpZiBBUk12NworICAgICAgICAg
ICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCisgICAgICAgICAgICBtb3ZlIHQy
LCBzcAorICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBD
U2l6ZSwgc3AKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgY2FsbENhbGxTbG93UGF0aCgKKyAg
ICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhvc2UgYXJlIHIwIGFuZCByMQorICAgICAgICBt
YWNybyAocmVzdG9yZWRQQ09yVGhyb3csIGNhbGxlZUZyYW1lUHRyKQorICAgICAgICAgICAgYnRw
eiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAorICAgICAgICAgICAgcmVzdG9yZVN0YXRl
QWZ0ZXJDQ2FsbCgpCisgICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAorICAgICAg
ICAgICAgZ2V0KG1fY2FsbGVlLCB0MSkKKyAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDEsIHQwKQorICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisgICAgICAg
ICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2Fs
bGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgICAgICAgICAgYnRweiB0MSwgKGNvbnN0ZXhwciBD
YWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9ycGhpYworICAg
ICAgICAgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1cm4gYWRk
cmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNlcGFyYXRl
bHkuCisgICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHlt
b3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBo
aWMgdGh1bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rl
ciwgZGlzcGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAgICBqbXAgLmdvUG9seW1vcnBo
aWMKKworICAgICAgICAubm90UG9seW1vcnBoaWM6CisgICAgICAgICAgICBicW5lcSB0MCwgdDEs
IC5vcENhbGxTbG93CisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKKwor
ICAgICAgICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0
aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisgICAgICAgIC5vcENhbGxTbG93OgorICAg
ICAgICAgICAgIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgICAgICAgICAj
IHQyIGlzIENhbGxMaW5rSW5mbyoKKyAgICAgICAgICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9i
YWxPYmplY3QKKyAgICAgICAgICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBpbiB0MgorICAgICAgICAgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0
MworICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisg
ICAgICAgICAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0
aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5h
bWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRyVGFnKQorICAg
ICAgICAuZG9udFVwZGF0ZVNQOgorICAgICAgICAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lCisgICAgICAgIGVuZCkKK2VuZAorCiBsbGludE9wKG9wX3JldCwg
T3BSZXQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQogICAgIGNoZWNrU3dpdGNoVG9KSVRG
b3JFcGlsb2d1ZSgpCiAgICAgZ2V0KG1fdmFsdWUsIHQyKQpAQCAtMzA0Niw4ICszMTIyLDggQEAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJhdG9yT3BlbiwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QKICAgICBlbmQKIAot
Ci0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJh
dG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJh
dG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwg
bWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFy
Z3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxs
SGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9j
YWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9y
cGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0
QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5n
VGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldEJ5SWRTdGFy
dDoKICAgICBtYWNybyBzdG9yZU5leHRBbmREaXNwYXRjaCh2YWx1ZSkKQEAgLTMxMDQsNyArMzE4
MCw4IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3BJdGVyYXRvck5l
eHQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgZW5kCiAKICAgICAjIFVzZSBtX3Zh
bHVlIHNsb3QgYXMgYSB0bXAgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHRvIGl0IGxhdGVy
LgotICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVy
YXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3Zh
bHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwg
bWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFy
Z3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxs
SGVscGVyKG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9j
YWxsLCBPcEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFy
ZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3Jw
aGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRE
b25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdU
aGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0
OgogICAgIG1hY3JvIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUoZG9uZVZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgppbmRleCBjYWQyMTVhZTM0M2NjODZi
M2ExMGE1ZmFmNjYyODQyNGE5YzAyZjI4Li5jNzAxNjY0YWIyYmZmZjIwN2QxMmU1ZTIyMmY5NjRj
ZmE5MTJhMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9j
bG9vcC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgpA
QCAtNTcyLDYgKzU3MiwxNCBAQCBkZWYgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9pZChvcGVyYW5k
cykKICAgICAkYXNtLnB1dGMgIiN7b3BlcmFuZHNbMF0uY0xhYmVsfSgje29wZXJhbmRzWzFdLmNs
RHVtcH0sICN7b3BlcmFuZHNbMl0uY2xEdW1wfSk7IgogZW5kCiAKK2RlZiBjbG9vcEVtaXRDYWxs
U2xvd1BhdGg0KG9wZXJhbmRzKQorICAgICRhc20ucHV0YyAieyIKKyAgICAkYXNtLnB1dGMgIiAg
ICBjbG9vcFN0YWNrLnNldEN1cnJlbnRTdGFja1BvaW50ZXIoc3AudnAoKSk7IgorICAgICRhc20u
cHV0YyAiICAgIFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSAje29wZXJhbmRzWzBdLmNMYWJl
bH0oI3tvcGVyYW5kc1sxXS5jbER1bXB9LCAje29wZXJhbmRzWzJdLmNsRHVtcH0sICN7b3BlcmFu
ZHNbM10uY2xEdW1wfSwgI3tvcGVyYW5kc1s0XS5jbER1bXB9KTsiCisgICAgJGFzbS5wdXRjICIg
ICAgZGVjb2RlUmVzdWx0KHJlc3VsdCwgdDAsIHQxKTsiCisgICAgJGFzbS5wdXRjICJ9IgorZW5k
CisKIGNsYXNzIEluc3RydWN0aW9uCiAgICAgZGVmIGxvd2VyQ19MT09QCiAgICAgICAgIGNhc2Ug
b3Bjb2RlCkBAIC0xMTc1LDYgKzExODMsOSBAQCBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgd2hl
biAiY2xvb3BDYWxsU2xvd1BhdGhWb2lkIgogICAgICAgICAgICAgY2xvb3BFbWl0Q2FsbFNsb3dQ
YXRoVm9pZChvcGVyYW5kcykKIAorICAgICAgICB3aGVuICJjbG9vcENhbGxTbG93UGF0aDQiCisg
ICAgICAgICAgICBjbG9vcEVtaXRDYWxsU2xvd1BhdGg0KG9wZXJhbmRzKQorCiAgICAgICAgICMg
Rm9yIGRlYnVnZ2luZyBvbmx5LiBUaGlzIGlzIHVzZWQgdG8gaW5zZXJ0IGluc3RydW1lbnRhdGlv
biBpbnRvIHRoZQogICAgICAgICAjIGdlbmVyYXRlZCBMTEludEFzc2VtYmx5LmggZHVyaW5nIGxs
aW50IGRldmVsb3BtZW50IG9ubHkuIERvIG5vdCB1c2UKICAgICAgICAgIyBmb3IgcHJvZHVjdGlv
biBjb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5z
dHJ1Y3Rpb25zLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rp
b25zLnJiCmluZGV4IDljYmE1ZDY4ZjNjYWQzMWNmYTJkOTZlYTRjOWJiYThkZmU5ZGE5YjIuLmMw
MGI1MTZiMzNlYzVhZDEyOWQ1NmMzZmZkMjNlOWY1ZWMyMDVmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKQEAgLTQ1OSw2ICs0NTks
NyBAQAogICAgICAiY2xvb3BDYWxsTmF0aXZlIiwgICAgICAgICAjIG9wZXJhbmRzOiBjYWxsZWUK
ICAgICAgImNsb29wQ2FsbFNsb3dQYXRoIiwgICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwg
Y3VycmVudEZyYW1lLCBjdXJyZW50UEMKICAgICAgImNsb29wQ2FsbFNsb3dQYXRoVm9pZCIsICAg
IyBvcGVyYW5kczogY2FsbFRhcmdldCwgY3VycmVudEZyYW1lLCBjdXJyZW50UEMKKyAgICAgImNs
b29wQ2FsbFNsb3dQYXRoNCIsICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgYTAsIGExLCBh
MiwgYTMKIAogICAgICAjIEZvciBkZWJ1Z2dpbmcgb25seToKICAgICAgIyBUYWtlcyBubyBvcGVy
YW5kcyBidXQgc2ltcGx5IGVtaXRzIHdoYXRldmVyIGZvbGxvd3MgaW4gLy8gY29tbWVudHMgYXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCmluZGV4
IDk1ODEwNWQzMjY2ZGRmZjg1YmU1ZDc2ZDg3Y2RlNWNiMzMxMzE0YzMuLjQ4ZmQ5MmY4YjZhOGVk
Mjk0NGE3MjQ4YjE1N2QyYWY3Mjc3M2M1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaApAQCAtNTcsNiArNTcsNyBAQCBpbmxpbmUgYm9vbCBp
c0NhbGwoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogCiBjbGFzcyBFeGVjdXRhYmxlQmFz
ZSA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBw
cm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5oCmluZGV4IDVhYTU0MmExMmYyNzFkYmRmZjAyMGI5MTBlZGJjYzlhMTFjODM2
NTYuLjJlOWI1MDY2MDVjZmM2ZjFjNWVkZDIyZGFkOTczZTczZWFhOGY2MTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0y
Niw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0YWJsZS5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlIDx3dGYvQm94Lmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKaW5kZXggZjZhMDViMDY1ZTMyZDhhZWNk
NTY3YmY2YWI3NGFhZTYzODk5Nzc3OC4uZTQ3NzkyYjg3NjRlOTFkNTA2MTBlNGNkZGFlMzIzMWMx
NDU5ZTIwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaApAQCAtMzMsNiArMzMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KGppdENhZ2VQdHIsIE5vUHRyVGFnKSBcCiAgICAg
dih0YWlsQ2FsbEpTRW50cnlQdHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50
cnlTbG93UGF0aFB0clRhZywgTm9QdHJUYWcpIFwKKyAgICB2KHRhaWxDYWxsV2l0aG91dFVudGFn
SlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KGxvb3BPU1JFbnRyeSwgTm9QdHJUYWcp
IFwKICAgICB2KGVudHJ5T1NSRW50cnksIE5vUHRyVGFnKSBcCiAgICAgdih3YXNtT1NSRW50cnks
IE5vUHRyVGFnKSBcCkBAIC00NiwyMCArNDcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZp
bmUgSlNDX0pTX0dBVEVfT1BDT0RFUyh2KSBcCiAgICAgdihvcF9jYWxsLCBKU0VudHJ5UHRyVGFn
KSBcCi0gICAgdihvcF90YWlsX2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NvbnN0
cnVjdCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfaXRlcmF0b3JfbmV4dCwgSlNFbnRyeVB0
clRhZykgXAogICAgIHYob3BfaXRlcmF0b3Jfb3BlbiwgSlNFbnRyeVB0clRhZykgXAotICAgIHYo
b3BfY2FsbF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2Fs
bF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NvbnN0cnVjdF9zbG93
LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBK
U0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3cs
IEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0
X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3Zh
cmFyZ3MsIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzLCBKU0Vu
dHJ5UHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2
KG9wX3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3Rf
c2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0Vu
dHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50cnlQdHJUYWcp
IFwKKyAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihv
cF90YWlsX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3Bf
Y29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY2FsbF9l
dmFsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3JfbmV4
dF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX29wZW5f
c2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5Y2Y1ZmVhMDE5ODQ5ZGI2
ZTY2MDkxMGJiOTQ1MWNkMjdjMjVmYmM1Li5lYzQ4MjJmNWE5MDNkNGZiODVjYjQ4NDFhNGNkNjhm
MGMxMGJmYmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xMzgsNiAr
MTM4LDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRo
U2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludEV4Y2VwdGlv
bnMuaCIKICNpbmNsdWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgogI2luY2x1ZGUgIk1v
ZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5oIgpAQCAtOTEwLDYgKzkxMSw0MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZAogICAgIHJl
dHVybiBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRlcm5hbF9mdW5j
dGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJTGlua0NhbGwoKQoreworI2lmIEVOQUJMRShKSVQpCisg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwor
I2VuZGlmCisgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50
X2xpbmtfY2FsbF90cmFtcG9saW5lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IFZNOjpnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKQorewor
I2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1
cm4gZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnRl
bXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICByZXR1cm4gTExJ
bnQ6OmNhbGxUb1Rocm93KCp0aGlzKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigp
OworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IFZNOjpn
ZXRDVElWaXJ0dWFsQ2FsbChDYWxsTW9kZSBjYWxsTW9kZSkKK3sKKyNpZiBFTkFCTEUoSklUKQor
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zv
cigqdGhpcywgY2FsbE1vZGUpOworI2VuZGlmCisgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAg
IGNhc2UgQ2FsbE1vZGU6OlJlZ3VsYXI6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOwor
ICAgIGNhc2UgQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGlu
ZSk7CisgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgorICAgICAgICByZXR1cm4gTExJbnQ6
OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY29uc3RydWN0
X3RyYW1wb2xpbmUpOworICAgIH0KKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsKK30KKwogVk06
OkNsaWVudERhdGE6On5DbGllbnREYXRhKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCmluZGV4IDllZjM4MmM2MGVlODM0ZmNiYjFkOTA4MWM3ODE4ZmQ3ODY3ZmE0MDguLjNhYmY3
MTFhNjU1MmJlNGIzMWFmZTQ3ZTA1OWYzMzFlMDg5OTE5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaApAQCAtMTA2LDYgKzEwNiw4IEBAIGNsYXNzIEJhc2ljQmxvY2tMb2NhdGlvbjsK
IGNsYXNzIEJ1aWx0aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnk7CiBjbGFzcyBDYWxsRnJhbWU7CitjbGFzcyBDYWxsTGlua0luZm87CitlbnVtIGNsYXNzIENh
bGxNb2RlOwogc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJs
b2NrOwogY2xhc3MgQ29kZUNhY2hlOwpAQCAtOTAyLDYgKzkwNCw5IEBAIGNsYXNzIFZNIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2Rl
PFZNPiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNG
dW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiBnZXRDVElMaW5rQ2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiBnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1YWxDYWxs
KENhbGxNb2RlKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgZXhjZXB0aW9uT2Zmc2V0KCkKICAg
ICB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGI0M2ZkNzU5ZWIzNzU5MDU0N2EzOGRlOGVjMjIxNmM4MDJiMDJhYjYuLjFhOTQ0ODJmZjJj
Njk1Zjg1NzA5NzYxZjNiNjMyYzdiMjBmMDNhOWIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMTEtMTIg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBVc2Ug
Q2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHN0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdh
cmUtb2YtcHJveHkuanM6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20t
bmFtZS1zZWN0aW9uLmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmls
ZXIudm0uaXNXYXNtU3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmls
ZXItd2FzbS5qczoKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnZt
LmlzV2FzbVN1cHBvcnRlZCk6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3Nh
bXBsaW5nUHJvZmlsZXIuanM6CisgICAgICAgIChkb2VzVHJlZUhhdmVTdGFja1RyYWNlKToKKyAg
ICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rp
b24uanM6CisKIDIwMjEtMTEtMTEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+
CiAKICAgICAgICAgSW5saW5lIFJlZ0V4cC50ZXN0IEpJVCBjb2RlIGluIERGRyBhbmQgRlRMCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUt
YXdhcmUtb2YtcHJveHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVl
ZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMKaW5kZXggNTBjYWVlZDExNDg0MjlmZDFiNWNlMGIw
ZmVhZTZiZGRkZTY3MTBiOC4uOTRkYWI0NmQyZDcxODRmMzVkNDNlMmRiNGEyZGQ1NjQxOThiZWZm
NSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRv
LWJlLWF3YXJlLW9mLXByb3h5LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWlu
LWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcwpAQCAtMSw0ICsxLDQgQEAKLS8vQCBy
dW5EZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIC0tdXNlQ29uY3VycmVudEpJVD1mYWxz
ZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAi
LCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJt
VXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZv
ckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXpl
U29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKKy8v
QCBydW5EZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIiwgIi0tdXNlQ29uY3VycmVudEpJ
VD1mYWxzZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNv
b249MTAiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZv
ck9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVz
aG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9w
dGltaXplU29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVl
IikKIAogZnVuY3Rpb24gbWFpbigpIHsKICAgICBsZXQgdjE2MjsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzIGIvSlNUZXN0
cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKaW5kZXggNjg5
YTAwNWFiNTU1YTFmYzYwMWE1NGU0ZWJmOTRlOTlhNjY4Zjc3ZS4uNWMyMjBmZDc2Y2RjNWM0MGU1
OWNjNjZlNTczNDJjNzJkOGM3ZjNhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxp
bmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKQEAgLTY5LDUgKzY5LDUgQEAKICAg
ICB2YXIgd2FzbUVudHJ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5l
eHBvcnRzLl9wYXJyb3QoMSk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRyeSwgWyJfc2ls
bHkiLCAiKHVua25vd24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8Pz4ud2FzbS1m
dW5jdGlvbltfYmFjb25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8Pz4ud2FzbS1m
dW5jdGlvbltfcGFycm90XSIsICJ3YXNtLXN0dWIiLCAiMjQiLCAid2FzbUVudHJ5Il0pOworICAg
IHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVu
Y3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVu
Y3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwgIih1bmtub3duKSIs
ICJ3YXNtRW50cnkiXSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1w
cm9maWxlci13YXNtLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5q
cwppbmRleCBjZDIxZjI4OGMxNDhhNGI3NDA1YmY4NjhkZWY5YjU0NTczNDA1MDQ1Li4wNmRmMDEy
NDk1OTY5ZTI4NDIxODc3ODY5MDEzNWJmMDkwMTBlYzZkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0
cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBs
aW5nLXByb2ZpbGVyLXdhc20uanMKQEAgLTgsNSArOCw1IEBACiAgICAgdmFyIHdhc21FbnRyeSA9
IGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5sb29wKDEwMDAw
MDAwKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0aW9u
WzBdIiwgIndhc20tc3R1YiIsICIwIiwgIndhc21FbnRyeSJdKTsKKyAgICBydW5UZXN0KHdhc21F
bnRyeSwgWyI8Pz4ud2FzbS1mdW5jdGlvblswXSIsICIodW5rbm93bikiLCAid2FzbUVudHJ5Il0p
OwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxp
bmdQcm9maWxlci5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5n
UHJvZmlsZXIuanMKaW5kZXggOTY0MmRkYzdjMWU2ZjA2ZTNiMTMyNzljMGU0YTAyNWI1NGRjYWJm
MS4uMWI5MmU5NDg1NGFmNjNmNjdkMDhmNTQ4ODdjNTIxNzkxNGVlMmJmNSAxMDA2NDQKLS0tIGEv
SlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcworKysg
Yi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCkBA
IC03MCwxMSArNzAsMTMgQEAgZnVuY3Rpb24gY2hlY2sobm9kZSkgewogICAgIAogICAgIGxldCBu
b2RlID0gdHJlZTsKICAgICBmb3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5ndGg7IGktLTsgKSB7
CisgICAgICAgIGxldCBwcmV2ID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRyZW5b
c3RhY2tUcmFjZVtpXV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgaWYgKFZF
UkJPU0UpIHsKICAgICAgICAgICAgICAgICBwcmludCgiZmFpbGluZyBvbiAiICsgaSArICIgOiAi
ICsgc3RhY2tUcmFjZVtpXSk7CiAgICAgICAgICAgICAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnko
dHJlZSkpOworICAgICAgICAgICAgICAgIHByaW50KE9iamVjdC5rZXlzKHByZXYuY2hpbGRyZW4p
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpA
QCAtMTA4LDcgKzExMCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3RhY2tUcmFjZU9yU3Ry
aW5nKSB7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwg
dGltZVRvRmFpbCk7CiAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkocm9vdCwgdW5kZWZpbmVkLCAy
KSk7Ci0gICAgZG9lc1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNlLCB0cnVlLCB0
cnVlKTsKKyAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2VPclN0cmlu
ZywgdHJ1ZSwgdHJ1ZSk7CiAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhY2sgdHJhY2UiKTsK
IH0KIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9u
LmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCmluZGV4IDY4
MDVlNjg5ZjVjODc5ZTJjYTUwOWM4OGQzZTdiMzc2ZGUwOWZhYWEuLjMzYzg2YmYxY2RlOWE4ZGFi
MTE4ZTBlNGNiMGJhY2Q1OWI3NDkxZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlv
bi10ZXN0cy9uYW1lU2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMv
bmFtZVNlY3Rpb24uanMKQEAgLTY5LDQgKzY5LDQgQEAKIGFzc2VydC5lcShzdGFja3RyYWNlWzNd
LCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVxKHN0
YWNrdHJhY2VbNF0sICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV1AW3dhc20gY29kZV0iKTsKIGFz
c2VydC5lcShzdGFja3RyYWNlWzVdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF1AW3dhc20g
Y29kZV0iKTsKLWFzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVd
Iik7IC8vIHdhc20gZW50cnkKK2Fzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFtu
YXRpdmUgY29kZV0iKTsgLy8gd2FzbSBlbnRyeQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444101</attachid>
            <date>2021-11-12 13:22:29 -0800</date>
            <delta_ts>2021-11-12 17:13:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211112132228.patch</filename>
            <type>text/plain</type>
            <size>412066</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDVkZDgyYWRiMWUzNWI4NmIyZTdmMzk1ZTI4ZTMzNmE5YTk0MWE5Li5mMGRmYWUxYWY1YWNiNDEw
ZTgzN2Q5YWZiOTU2YTA2NWNlYWI2NDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzkgQEAKKzIwMjEtMTEtMTIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludGVncmF0
ZXMgbm9ybWFsIENhbGxMaW5rSW5mbyBpbnRvIExMSW50IGFuZCByZW1vdmUgYWRob2MgTExJbnRD
YWxsTGlua0luZm8uCisgICAgICAgIFNvIHRoYXQgd2UgY2FuIHNpbXBsaWZ5IG91ciBJQyBzb2Z0
d2FyZSBzdGFjaywgYW5kIHVuaWZ5aW5nIGNhbGwgSUMgbWVjaGFuaXNtIGludG8gb25lIENhbGxM
aW5rSW5mby4KKworICAgICAgICAxLiBMTEludCBjYW4gZnVsbHkgdXNlIG91ciBwb2x5bW9ycGhp
YyBjYWxsIElDLCBhbmQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gcmVzZXQgY2FsbCBJQyB3aGVuCisg
ICAgICAgICAgIHRpZXJpbmcgdXAgZnJvbSBMTEludCB0byBCYXNlbGluZSBKSVQgc2luY2UgYm90
aCBub3cgdXNlcyB0aGUgc2FtZSBDYWxsTGlua0luZm8gZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAg
ICAgIERGRyBhbmQgRlRMIGNhbiBhbHNvIHJldHJpZXZlIGNhbGwgaW5mb3JtYXRpb24gZnJvbSB0
aGlzIENhbGxMaW5rSW5mby4KKyAgICAgICAgMi4gTExJbnQgdmFyYXJncyBjYWxscyBnZXQgdGhl
IHNhbWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIEJhc2VsaW5lLiBQcmV2aW91c2x5IGl0IGRv
ZXMgbm90IGhhdmUKKyAgICAgICAgICAgY2FsbCBJQy4KKyAgICAgICAgMy4gV2hlbiBKSVQgaXMg
ZGlzYWJsZWQsIHdlIGRpc2FibGUgcG9seW1vcnBoaWMgY2FsbCBJQyBzaW5jZSBpdCByZXF1aXJl
cyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSBv
bmx5IHVzZSBtb25vbW9ycGhpYyBvbmUsIHdoaWNoIGlzIHRoZSBzYW1lIHRvIHRoZSBvbGQgTExJ
bnRDYWxsTGlua0luZm8uCisgICAgICAgIDQuIENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uIGlz
IHNldCB1cCBvbmx5IGFmdGVyIEJhc2VsaW5lIEpJVC4gV2UgYWRqdXN0IGNhbGwgSUMgY29kZSBz
byB0aGF0CisgICAgICAgICAgIHdlIG5vIGxvbmdlciByZWx5IG9uIGRvbmVMb2NhdGlvbiB3aGVu
IHVzaW5nIERhdGFJQy4gVGhpcyBhbGxvd3MgdXMgdG8gc21vb3RobHkgdGllcmluZyB1cAorICAg
ICAgICAgICBmcm9tIExMSW50IHRvIEJhc2VsaW5lIEpJVCB3aGlsZSB1c2luZyB0aGUgc2FtZSBD
YWxsTGlua0luZm8uCisgICAgICAgICAgIFdlIHNldCB1cCBkb25lTG9jYXRpb24gaW4gQmFzZWxp
bmUgSklUIGp1c3QgYmVjYXVzZSBERkcgT1NSIGV4aXQgcmVxdWlyZXMgd2hlbiBleGl0aW5nIHRv
CisgICAgICAgICAgIEJhc2VsaW5lIEpJVCBjb2RlLgorICAgICAgICA1LiBXZSByZW1vdmUgQ2Fs
bExpbmtJbmZvIGZyb20gSklUIGNvbnN0YW50IHBvb2wsIGFuZCB3ZSBzdG9yZSBDYWxsTGlua0lu
Zm8gaW4gbWV0YWRhdGEgc28gdGhhdAorICAgICAgICAgICBMTEludCBhbmQgQmFzZWxpbmUgSklU
IHF1aWNrbHkgYWNjZXNzIHRvIHRoYXQgYW5kIGtlZXBpbmcgdW5saW5rZWQgQmFzZWxpbmUgSklU
IHdvcmtpbmcuCisgICAgICAgIDYuIFdlIGltcGxlbWVudCBMTEludCB2ZXJzaW9uIG9mIGNhbGwg
SUMgdGh1bmtzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiBKSVQgaXMgZGlzYWJs
ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIGFzc2VtYmxlci9Db2RlTG9jYXRpb24uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlu
a0J1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OnNob3VsZER1bXBEaXNhc3NlbWJseUZvcik6IERl
bGV0ZWQuCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcDoKKyAgICAgICAgKEpTQzo6c2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6ZHVtcFdpdGhOYW1l
IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6
Y2FsbExpbmtJbmZvRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmNsZWFyU3R1Yik6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0TW9ub21vcnBoaWNDYWxsZWUpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp2aXNpdFdl
YWspOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjppbml0aWFsaXplRGF0YUlDKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6
cmV2ZXJ0Q2FsbFRvU3R1Yik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aXNMaW5rZWQgY29uc3QpOgorICAgICAgICAoSlND
OjpDYWxsTGlua0luZm86OnN0dWIgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpmb3JFYWNoRGVwZW5kZW50Q2VsbCBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6c2V0U2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmNsZWFyU2xvd1N0dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGcm9tTExJbnQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3Rh
dHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0
dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFs
aXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5k
ZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVBy
b2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVBy
ZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9y
RWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL09wY29k
ZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2guY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcC4KKyAgICAgICAgKEpTQzo6bGlua1Nsb3dQ
YXRoVG8pOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAgIChKU0M6OndlYkFz
c2VtYmx5T3duZXIpOgorICAgICAgICAoSlNDOjpsaW5rTW9ub21vcnBoaWNDYWxsKToKKyAgICAg
ICAgKEpTQzo6cmV2ZXJ0Q2FsbCk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAg
ICAoSlNDOjpqc1RvV2FzbUlDQ29kZVB0cik6CisgICAgICAgIChKU0M6OmxpbmtWaXJ0dWFsRm9y
KToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUmVwYXRjaC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmguCisgICAgICAgICogYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OmhhbmRsZUhvc3RDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAg
ICAgIChKU0M6OnZpcnR1YWxGb3JXaXRoRnVuY3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFs
bG9jYXRlU2hhcmVkUHJvZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYWxsZXJSZXR1cm5QQyk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRW
aXJ0dWFsQ2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVs
cGVycy5oOgorICAgICAgICAqIGppdC9CYXNlbGluZUpJVENvZGUuaDoKKyAgICAgICAgKiBqaXQv
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
RGF0YTo6Y3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwpOgorICAgICAgICAqIGppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmFkZFVubGlua2VkQ2FsbExpbmtJbmZvKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpyZXR1
cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpvcF9y
ZXRfaGFuZGxlckdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAg
ICAoSlNDOjpoYW5kbGVIb3N0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxG
b3JXaXRoRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwOgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3IpOgorICAgICAgICAoSlNDOjp2aXJ0
dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dmly
dHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1
YWxUaHVua0ZvckNvbnN0cnVjdENhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dl
bmVyYXRvcnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
OgorICAgICAgICAoSlNDOjpMTEludDo6bGxpbnRfbGlua19jYWxsKToKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmxsaW50X3ZpcnR1YWxfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVI
b3N0Q2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAoSlND
OjpMTEludDo6dmFyYXJnc1NldHVwKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1df
UEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNvbW1vbkNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmdlbmVyaWNDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9M
TEludFNsb3dQYXRocy5oOgorICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmNyZWF0ZUpTR2F0ZVRodW5rKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmNyZWF0ZVRhaWxDYWxsR2F0ZSk6CisgICAgICAgIChKU0M6OkxMSW50OjpyZXR1cm5Mb2NhdGlv
blRodW5rKToKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5oOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpDTG9vcFJlZ2lzdGVyOjpvcGVyYXRvciBDYWxsTGlu
a0luZm8qKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogb2Zm
bGluZWFzbS9jbG9vcC5yYjoKKyAgICAgICAgKiBvZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYjoK
KyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGVCYXNlLmg6CisgICAgICAgICogcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0dhdGUuaDoKKyAgICAgICAg
KiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmdldENUSUxpbmtDYWxsKToKKyAg
ICAgICAgKEpTQzo6Vk06OmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCk6Cisg
ICAgICAgIChKU0M6OlZNOjpnZXRDVElWaXJ0dWFsQ2FsbCk6CisgICAgICAgICogcnVudGltZS9W
TS5oOgorCiAyMDIxLTExLTExICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgVk06OndyaXRlQmFycmllcigpIGFuZCBWTTo6bXV0YXRvckZlbmNlKCkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTJjNGE1YzgyNzdjYTc3MDFkODQ5ZWZm
NjQ2N2JkODg3OTU5MDAwOC4uY2M0MWZjMDNkMGEwODZjYzc3Y2U0ZTdkMDAyZGUxN2M4NjQzMjAx
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNjU5LDcgKzY1OSw2IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgYnl0ZWNv
ZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgKICAgICBieXRlY29kZS9JdGVy
YXRpb25Nb2RlTWV0YWRhdGEuaAogICAgIGJ5dGVjb2RlL0p1bXBUYWJsZS5oCi0gICAgYnl0ZWNv
ZGUvTExJbnRDYWxsTGlua0luZm8uaAogICAgIGJ5dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCiAgICAgYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaAogICAgIGJ5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA4OWM5YzE3NGJiMjIzYjM2YzM5NmJhZmM0NmZlMTE2NmE2ODIw
ZjQzLi4zMTViNGYwZjk2ZTQxNzM3ZjM3YjAxMTlmNzBjNmI2OTk3MTQ4OGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ3LDcgKzE0Nyw2IEBACiAJCTBGMENBRUZDMUVDNERB
NkIwMDk3MEQxMiAvKiBKU0hlYXBGaW5hbGl6ZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDQUVGQTFFQzREQTYyMDA5NzBEMTIgLyog
SlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMENBRUZGMUVDNERBODgwMDk3MEQxMiAvKiBIZWFwRmluYWxp
emVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRD
MjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExp
bmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEwRjFBMzFDNDIwQkYw
MDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjEwRjFBMjFDNDIwQkYwMDAxQzA3RDIgLyogQWlyQ3VzdG9tLmggKi87
IH07CiAJCTBGMTJERTEwMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEyREUwRTE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdD
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzNkQ0
QjE3NEFENjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODYsNyArMTg1LDYgQEAKIAkJMEYyNEU1NDQxN0VB
OUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NEQx
N0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNEU1NEYxN0VFMjc0OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NDgxN0VFMjc0
OTAwQUJCMjE3IC8qIFRlbXBSZWdpc3RlclNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBh
dGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0
RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovOyB9OwogCQkwRjI0RTU1MjE3RUUy
NzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0QjE3RUUyNzQ5MDBBQkIyMTcg
LyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NTYxN0YwQjcxQzAwQUJCMjE3IC8qIElubGlu
ZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2
MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZD
MzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmggKi87IH07CkBAIC0xODkyLDYgKzE4OTAsNyBAQAogCQlFMzNGNTA4NzFCODQ0OUVGMDA0
MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzM0Y1MDg2MUI4NDQ5RUYwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovOyB9OwogCQlFMzQwMEVD
MTIyQTFDQzdCMDA5REVENTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0MDBFQzAyMkExQ0M3ODAw
OURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMuaCAqLzsgfTsKIAkJRTM0OUE3ODEy
NDkxRjE2MTAwMUJBMzM2IC8qIERGR0NvZGVPcmlnaW5Qb29sLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzQ5QTc4MDI0OTFGMTVBMDAxQkEzMzYgLyog
REZHQ29kZU9yaWdpblBvb2wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFMzREMUFFNTI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEQxQUU0
MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oICovOyB9OwogCQlFMzRFNjU3NTIw
NjY4RUFBMDBGQjgxQUMgLyogUGFyc2VIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRFNjU3MzIwNjY4RThEMDBGQjgxQUMgLyogUGFyc2VIYXNo
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM0
RURCRjcxREI1RkZDOTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0RURCRjYxREI1RkZDMTAwREM4N0E1IC8q
IEZyYW1lVHJhY2Vycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUUzNEY5MzBFMjMyMkQ4ODIwMDJCOERCNCAvKiBKU0dlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0RjkzMEMyMzIyRDg4
MTAwMkI4REI0IC8qIEpTR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MDYsNiArMTkwNSw3IEBACiAJCUUzNUEwQjlEMjIwQUQ4
N0EwMEFDNDQ3NCAvKiBFeGVjdXRhYmxlQmFzZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUEwQjlDMjIwQUQ4N0EwMEFDNDQ3NCAvKiBF
eGVjdXRhYmxlQmFzZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFMzVDQTE1NDFEQkMzQTVDMDBGODM1MTYgLyogRE9NSklUSGVhcFJh
bmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVD
QTE1MjFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1Q0ExNTYxREJDM0E1RjAwRjgz
NTE2IC8qIERPTUpJVEFic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM1Q0ExNTAxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3Ry
YWN0SGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUUzNUUzNjNFMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0Mg
LyogUmVwYXRjaC5oICovOyB9OwogCQlFMzVFODlGRDI1QzUwRjg3MDA3MUVFMUUgLyogQmlnSW50
NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM1RTg5RkIyNUM1MEY4NjAwNzFFRTFFIC8qIEJpZ0ludDY0QXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzVFODlGRTI1QzUwRjg3MDA3
MUVFMUUgLyogQmlnVWludDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzNUU4OUZDMjVDNTBGODcwMDcxRUUxRSAvKiBCaWdVaW50NjRBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUz
NjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzYzN0VFNzIzNkU1NkIwMDA5NkJE
MEEgLyogTGlua1RpbWVDb25zdGFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0yMzkxLDcgKzIzOTEsNiBAQAogCQkwRjBDQUVGRTFFQzREQTg1
MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAg
LyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTBGMUEyMUM0MjBCRjAwMDFDMDdEMiAvKiBBaXJD
dXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ3VzdG9tLmg7IHBh
dGggPSBiMy9haXIvQWlyQ3VzdG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvbkZ1enouY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6
ei5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25GdXp6Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDU0LDggKzI0NTMsNiBAQAogCQkwRjI0RTU0
NTE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUT3BlcmF0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0ODE3RUUyNzQ5MDBBQkIyMTcgLyogVGVtcFJl
Z2lzdGVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBSZWdpc3Rl
clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjI0RTU0OTE3RUUyNzQ5MDBB
QkIyMTcgLyogUmVwYXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZXBhdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyNEU1NEExN0VF
Mjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVwYXRjaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0QjE3RUUy
NzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1MzE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2Fs
bEZyYW1lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGlu
ZUNhbGxGcmFtZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTU0
MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQ2FsbEZyYW1lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MjA3LDYgKzUyMDQsNyBAQAogCQlFMzQwMEVDMDIyQTFDQzc4MDA5REVE
NTQgLyogRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bkV4ZWN1dGFibGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNDlB
NzdGMjQ5MUYxNTkwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdDb2RlT3JpZ2luUG9vbC5jcHA7IHBhdGggPSBkZmcvREZHQ29kZU9yaWdpblBv
b2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzQ5QTc4MDI0OTFGMTVBMDAx
QkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29kZU9yaWdp
blBvb2wuaDsgcGF0aCA9IGRmZy9ERkdDb2RlT3JpZ2luUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMzREMUFFNDI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8qIFBh
cnNlSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUhhc2guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0RTY1NzQyMDY2OEU4RTAwRkI4MUFDIC8q
IFBhcnNlSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJz
ZUhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRFREJGNjFEQjVGRkMx
MDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZyYW1lVHJhY2Vycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTIyOSw2
ICs1MjI3LDggQEAKIAkJRTM1Q0ExNTAxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEFic3RyYWN0
SGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01KSVRBYnN0cmFjdEhl
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1Q0ExNTExREJDM0E1NjAwRjgz
NTE2IC8qIERPTUpJVEhlYXBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzVDQTE1MjFEQkMzQTU2MDBGODM1MTYgLyogRE9NSklUSGVhcFJhbmdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUpJVEhlYXBSYW5nZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUzNUUzNjNEMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFODlGQjI1QzUwRjg2MDA3MUVFMUUgLyogQmlnSW50
NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaWdJbnQ2NEFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUU4OUZDMjVDNTBGODcwMDcxRUUx
RSAvKiBCaWdVaW50NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aWdVaW50NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzYzN0VFNzIz
NkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02NDU4LDggKzY0NTgsNiBAQAogCQkJCTYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAv
KiBSZWdpc3Rlck1hcC5oICovLAogCQkJCTBGQzMxNDE0MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdp
c3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVy
U2V0LmggKi8sCi0JCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICov
LAotCQkJCTBGMjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8sCiAJCQkJMEZB
N0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8s
CiAJCQkJMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oICovLAogCQkJCTBGRUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFt
ZS5jcHAgKi8sCkBAIC04ODE1LDcgKzg4MTMsNiBAQAogCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAogCQkJCUUzNjM3RUU4MjM2RTU2
QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmNwcCAqLywKIAkJCQlFMzYzN0VFNzIzNkU1
NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovLAotCQkJCTBGMEZDNDU4MTRCRDE1
RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovLAogCQkJCTUzRkEyQUUyMUNGMzgw
MzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwICovLAogCQkJCTUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkxNEY3OUY2RTIxNkVB
RDUwMDAwNDZEMzkgLyogTWV0YWRhdGFUYWJsZS5jcHAgKi8sCkBAIC04ODYyLDYgKzg4NTksOSBA
QAogCQkJCTBGNDRBN0FBMjBCRjY4NUUwMDIyQjE3MSAvKiBSZWNvcmRlZFN0YXR1c2VzLmggKi8s
CiAJCQkJMEZGNjBBQkYxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICov
LAogCQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8s
CisJCQkJRTM1RTM2M0QyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guY3BwICovLAorCQkJCUUz
NUUzNjNDMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmggKi8sCisJCQkJRTM0RDFBRTQyNzNE
QzkxRjAwMDVCQjkxIC8qIFJlcGF0Y2hJbmxpbmVzLmggKi8sCiAJCQkJODY1REEwQzkyNUI4OTYy
QTAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0YXR1cy5jcHAgKi8sCiAJCQkJODY1REEwQzcy
NUI4OTYwQzAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFN0YXR1cy5oICovLAogCQkJCTg2NURB
MEM2MjVCODk1OUUwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcCAqLywKQEAg
LTk3NDcsNiArOTc0Nyw3IEBACiAJCQkJRkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVn
Z2VyUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDREREUxOTgzMkQzNDAwN0Q0
QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2
OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTlGQTdDNTI3M0M4
QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcx
MkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJj
ZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODc1MUU3MERERUMwMEYxMkFDMSAvKiBE
ZWZlcnJlZFdvcmtUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDMyMyw4ICsxMDMyNCw2IEBA
CiAJCQkJQTM4RDI1MEUyNTgwMEQ0NDAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKLQkJ
CQk2NTNCQzQzRjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTM5RkI4QkExQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MzlERDdGNTIzQzFCQkI1MDA5MDVGMTMgLyogSlNBcnJheUl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyog
SlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTI2LDcgKzEwNTI1LDYgQEAK
IAkJCQlFMzYzN0VFOTIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwREU5QTA5MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFz
c2VtYmx5LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyog
TExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJC
MTZDMDBCRkUyNzIgLyogTExJbnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQz
MTRCQkQxNjcwMEJGRTI3MiAvKiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMTA3MjYs
NyArMTA3MjQsOCBAQAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBS
ZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5MkY1NkI3MUU0
RTg0QjIwMDM1OTUzQiAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTM1RTM2M0UyNzNEQzhDNjAwREIyNENDIC8qIFJlcGF0Y2guaCBpbiBIZWFk
ZXJzICovLAorCQkJCUUzNEQxQUU1MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5RjNGQjkyNjEzQzc4OTAwNjlFODlGIC8qIFJlc291cmNl
RXhoYXVzdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkND
IC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0I2NDJGMjVENkZCNEQwMDFB
RERCNCAvKiBSb290TWFya1JlYXNvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDc4NCw3ICsxMDc4
Myw2IEBACiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJv
dmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFG
IC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTlGQTdD
NTI3M0M4QjI2MDA1RDlFNzAgLyogRGVmZXJHQ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5
IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLApAQCAtMTEwNTIsNiArMTEw
NTAsOCBAQAogCQkJCUUzMjgyQkJCMUZFOTMwQUYwMEVEQUY3MSAvKiBZYXJyRXJyb3JDb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBM0ZGOUJDNzIyMzQ3NDkxMDBCMUE5QUIgLyogWWFyckZsYWdz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFycklu
dGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0Ig
LyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIw
IC8qIFlhcnJKSVRSZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRjBGQzk1MjZBMTFC
NEEwMDk5RkZBMCAvKiBZYXJyTWF0Y2hpbmdDb250ZXh0SG9sZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3OTNmNDZmN2JjNThlNTA4
Y2RhNmNiOTAxNWFhMDkyZThjOTg2MGQ5Li5iNjk1NTU3YWZlNjBmMTQ3NTEwMDliMWI1MDVmNTUx
MzM0MDViOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNzMsNiArMjczLDcg
QEAgYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCiBieXRlY29kZS9QdXRCeVZhcmlhbnQuY3BwCiBi
eXRlY29kZS9SZWNvcmRlZFN0YXR1c2VzLmNwcAogYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5j
cHAKK2J5dGVjb2RlL1JlcGF0Y2guY3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRTdGF0dXMu
Y3BwCiBieXRlY29kZS9TZXRQcml2YXRlQnJhbmRWYXJpYW50LmNwcAogYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwCkBAIC02NzYsNyArNjc3LDYgQEAgaml0L1JlZy5jcHAKIGppdC9SZWdpc3Rl
ckF0T2Zmc2V0LmNwcAogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAogaml0L1JlZ2lzdGVy
U2V0LmNwcAotaml0L1JlcGF0Y2guY3BwCiBqaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cAogaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAogaml0L1Nsb3dQYXRoQ2FsbC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IGE2Y2E1
YzgxYzUxMDk1ZjgxOThkOWI4MmRiMTRhNTgxYTI1Y2U2MDkuLjA3NTA0YmEwNGU1OWI2ZDFkY2Ey
MzU4OGJlZmI1NGRmMTkxODVhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Db2RlTG9jYXRpb24uaApAQCAtMjcsOCArMjcsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCiAKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQotCiBuYW1lc3BhY2Ug
SlNDIHsKIAogZW51bSBjbGFzcyBOZWFyQ2FsbE1vZGUgOiB1aW50OF90IHsgUmVndWxhciwgVGFp
bCB9OwpAQCAtMjY5LDUgKzI2NywzIEBAIGlubGluZSBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxv
YWQ8cmVzdWx0VGFnPiBDb2RlTG9jYXRpb25Db21tb248dGFnPjo6Y29udmVydGliCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCmluZGV4IDA2MjQwZTg3
NDM2Mzg3M2I5ZGYyY2M5ZjM3ZjM4MjkxOGZlN2UyOWUuLmZmOTMwNTg5ZGIyNzExODBkMDk5ZTIz
NTZjOTk3ZGM1OWIzNTZlNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVk
ZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgogCiAjaWYgT1MoTElOVVgpCiAjaW5jbHVkZSAiUGVy
ZkxvZy5oIgpAQCAtNDMsMjkgKzQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBzaXplX3QgTGlua0J1
ZmZlcjo6c19wcm9maWxlQ3VtbXVsYXRpdmVMaW5rZWRTaXplc1tMaW5rQnVmZmVyOjpudW1iZXJP
ZlByb2ZpbGVzXTsKIHNpemVfdCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtl
ZENvdW50c1tMaW5rQnVmZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIAotYm9vbCBzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKGNvZGVCbG9j
ayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9w
dGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7Ci19Ci0KLWJvb2wgc2hvdWxkRHVtcERp
c2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIGlmIChPcHRp
b25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwg
T3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZToKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNh
c2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU6Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpk
dW1wT01HRGlzYXNzZW1ibHkoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBMaW5rQnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQ
dHJUYWc+IExpbmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKQog
ewogICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmgKaW5kZXggNWEzZjAwZjA1YzY4NTgyOTU3NzI2NjdmYzIyMzU2
N2Y2OGU5MmI4Ny4uMjg1ZGYwZDFhMTgwOWRiMjBiNDc5NGNkMzEyMDU5ZWZjNmVlMDBlMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKQEAgLTQzLDEy
ICs0Myw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1lbnVtIGNs
YXNzIENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3Q7Ci19Ci0KLWNsYXNzIENvZGVCbG9jazsKLQog
Ly8gTGlua0J1ZmZlcjoKIC8vCiAvLyBUaGlzIGNsYXNzIGFzc2lzdHMgaW4gbGlua2luZyBjb2Rl
IGdlbmVyYXRlZCBieSB0aGUgbWFjcm8gYXNzZW1ibGVyLCBvbmNlIGNvZGUgZ2VuZXJhdGlvbgpA
QCAtNDQ2LDggKzQ0MCw2IEBAIGNsYXNzIExpbmtCdWZmZXIgewogICAgICAgICA6IChsaW5rQnVm
ZmVyUmVmZXJlbmNlKS5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFn
PigpKQogI2VuZGlmCiAKLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayop
OwotCiAjZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlclJlZmVy
ZW5jZSwgcmVzdWx0UHRyVGFnLCAuLi4pICBcCiAgICAgRklOQUxJWkVfQ09ERV9JRigoc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKGNvZGVCbG9jaykgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJs
eSgpKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApA
QCAtNDc2LDggKzQ2OCw2IEBAIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9j
ayopOwogI2RlZmluZSBGSU5BTElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCBy
ZXN1bHRQdHJUYWcsIGRhdGFMb2dGQXJndW1lbnRzRm9ySGVhZGluZykgIFwKICAgICBGSU5BTEla
RV9DT0RFX0lGKEpTQzo6T3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCks
IGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JI
ZWFkaW5nKQogCi1ib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlv
bk1vZGUpOwotCiAjZGVmaW5lIEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNl
LCByZXN1bHRQdHJUYWcsIC4uLikgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKChKU0M6Ok9wdGlv
bnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBKU0M6Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
IHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2Us
IHJlc3VsdFB0clRhZywgX19WQV9BUkdTX18pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAppbmRleCA1ZDU2
NzQxZWZlNjY0MjZlZmNhMjA1MmFjMjUwOTgzMjIwMjM3N2QwLi43MGRiMGQwMzllYTdlZDYxMWM4
YTZlNWQ4MDg5MTNmMGFkNWJkNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0yNiw4ICsyNiwx
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgi
CisjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQ1B0clRhZy5oIgorI2luY2x1ZGUg
Ildhc21Db21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC02Myw1ICs2NiwyOCBAQCBDU3RyaW5nIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZkJhc2U6OmRpc2Fzc2VtYmx5KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNh
c3NlbWJseQogICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7CiB9CiAKK2Jvb2wgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChjb2RlQmxv
Y2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBP
cHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpOworfQorCitib29sIHNob3VsZER1bXBE
aXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAoT3B0
aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8
IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1v
ZGU6CisgICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHkoKTsKKyAgICBj
YXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlOgorICAgICAgICByZXR1cm4gT3B0aW9uczo6
ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCmluZGV4IDkyNTU5MThiMWJhMTc1YTFmNDlkYzMwMjVlYzZmY2E4ODkzOWQzNjQuLjFlYTMy
NDU0MTVhYjA4YTQ1YzdkM2U1OTU5NjBjNDQ1YjE5ZmY3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAt
NTQsNiArNTQsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2Vu
dW0gY2xhc3MgQ29tcGlsYXRpb25Nb2RlIDogdWludDhfdDsKK30gLy8gbmFtZXNwYWNlIFdhc20K
KworY2xhc3MgQ29kZUJsb2NrOwogdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI7CiAKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKQEAgLTM3Nyw3ICszODIsMTAg
QEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHJCYXNlIHsKIAogICAgIHZvaWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHJCYXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCks
IG5hbWUsIG91dCk7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFM
b2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwg
b3V0KTsKICAgICB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBk
dW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOyB9CkBAIC01MzcsNiArNTQ1LDkgQEAgaW5saW5l
IEZ1bmN0aW9uUHRyPHRhZz46OkZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+
IHB0cikKIHsKIH0KIAorYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7
Citib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCBiZTJlOGM4MTFkNmRkZDBj
MTg0YmE1ZWQ0ZDk1NzkzNmZkMjI1OGEyLi4wMTM4NjBiNjZjMmIxOWE4Y2JiNTk1M2E1ZDBlNDRk
ZDI3N2ZiZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QucmIKQEAgLTI2LDYgKzI2LDcgQEAKIAogICAgIDpCYXNpY0Jsb2NrTG9jYXRpb24sCiAg
ICAgOkJvdW5kTGFiZWwsCisgICAgOkNhbGxMaW5rSW5mbywKICAgICA6RGVidWdIb29rVHlwZSwK
ICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCkBAIC00NCw3ICs0
NSw2IEBACiAgICAgOkpTU2NvcGUsCiAgICAgOkpTVHlwZSwKICAgICA6SlNWYWx1ZSwKLSAgICA6
TExJbnRDYWxsTGlua0luZm8sCiAgICAgOlJlc3VsdFR5cGUsCiAgICAgOk9wZXJhbmRUeXBlcywK
ICAgICA6UHJpdmF0ZUZpZWxkUHV0S2luZCwKQEAgLTg0MCw3ICs4NDAsOCBAQAogICAgICAgICBh
cmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5r
SW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJ
bmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODUyLDcgKzg1Myw4IEBACiAgICAgICAgIGFy
Z3Y6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJ
bmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0lu
Zm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NjUsNyArODY3LDggQEAKICAgICAgICAgZWNt
YU1vZGU6IEVDTUFNb2RlLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExp
bmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlu
a0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9m
aWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQogCkBAIC04NzksNiArODgyLDcgQEAKICAgICAgICAg
Zmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxM
aW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MDAsNiArOTA0
LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2Zp
bGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0s
CkBAIC05MjEsNiArOTI2LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAogICAgIH0KQEAgLTkzMyw3ICs5MzksOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRD
YWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAg
ICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9m
aWxlLAogICAgIH0KIApAQCAtOTQ3LDYgKzk1NCw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBp
bnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxM
aW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHBy
b2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAtMTI0OSw3ICsxMjU3LDggQEAKICAgICBt
ZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFk
YXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKLSAgICAgICAgY2Fs
bExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxs
TGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBp
dGVyYXRvclByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRC
eUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBuZXh0UHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAt
MTI3Miw3ICsxMjgxLDggQEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRh
ZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAg
ICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTog
QXJyYXlQcm9maWxlLAogICAgICAgICBuZXh0UmVzdWx0UHJvZmlsZTogVmFsdWVQcm9maWxlLAog
ICAgICAgICBkb25lTW9kZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBk
b25lUHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTM5Myw2ICsxNDAzLDkgQEAKIG9wIDpsbGlu
dF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDQKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJu
X2Zyb21fanNfNDUKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDYKK29wIDps
bGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDcKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0
dXJuX2Zyb21fanNfNDgKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDkKIAog
ZW5kX3NlY3Rpb24gOkNMb29wSGVscGVycwogCkBAIC0xNDE1LDYgKzE0MjgsMTAgQEAKIG9wIDps
bGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5j
dGlvbl9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1
Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRf
dmlydHVhbF9jYWxsX3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFt
cG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNr
cG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9p
bnRfb3NyX2V4aXRfdHJhbXBvbGluZQogb3AgOm5vcm1hbF9vc3JfZXhpdF90cmFtcG9saW5lCkBA
IC0xNDIzLDYgKzE0NDAsOCBAQAogb3AgOmxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24K
IG9wIDpvcF9jYWxsX3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9j
YXRpb24KK29wIDpvcF9jYWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY29uc3Ry
dWN0X3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRp
b24KIG9wIDpvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uCkBAIC0xNDM4LDE1ICsxNDU3LDE1
IEBACiBvcCA6b3BfY29uc3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0
b3Jfb3Blbl9zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2l0ZXJhdG9yX25leHRfc2xvd19y
ZXR1cm5fbG9jYXRpb24KLW9wIDpvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3Bf
dGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRp
b24KIAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbAotb3AgOmpzX3RyYW1wb2xpbmVfb3BfdGFp
bF9jYWxsCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3QKK29wIDpqc190cmFtcG9saW5l
X29wX2NhbGxfdmFyYXJncworb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3MK
IG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQKIG9wIDpqc190cmFtcG9saW5lX29w
X2l0ZXJhdG9yX29wZW4KIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAppbmRleCA0ZjQ3YzhiY2NmOGU1NzQ4YWE5YjBmMzZlNmYzNjMwNWFk
YzMwMDExLi4yNzBjZDZmMWQwMmY0NGQ1M2RiM2U2YWE2M2FmZmExNWUwYzA5MjZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaApAQCAtMTgwLDcgKzE4MCw3IEBAIHB0cmRpZmZfdCBzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHVuc2ln
bmVkIGNoZWNrCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+Ci1MTElu
dENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRh
LCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCitDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0Zv
cihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQog
ewogICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOwogICAgIHJldHVybiBtZXRhZGF0
YS5tX2NhbGxMaW5rSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAKaW5kZXggM2I4MDNiMzhhNzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBh
NTU4YS4uYTFhZmNmOTM4YTUxZjJiYzE3MmYwZmQyMDI3MTMyZTY3MmVlZDk3YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTM3LDcg
KzM3LDYgQEAKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvTGlz
dER1bXAuaD4KIAotI2lmIEVOQUJMRShKSVQpCiBuYW1lc3BhY2UgSlNDIHsKIAogQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlE
KQpAQCAtODIsMTEgKzgxLDEzIEBAIENhbGxMaW5rSW5mbzo6fkNhbGxMaW5rSW5mbygpCiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjpjbGVhclN0dWIoKQogeworI2lmIEVOQUJMRShKSVQpCiAgICAgaWYg
KCFzdHViKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3R1Yi0+Y2xlYXJDYWxsTm9kZXNG
b3IodGhpcyk7CiAgICAgbV9zdHViID0gbnVsbHB0cjsKKyNlbmRpZgogfQogCiB2b2lkIENhbGxM
aW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKQEAgLTExMywxOSArMTE0LDE5IEBAIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKICAg
ICByZXR1cm4gbV9kb25lTG9jYXRpb247CiB9CiAKLXN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90
IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7Ci0KIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25v
bW9ycGhpY0NhbGxlZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKCFpc0RpcmVjdCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KGNhbGxlZSkgJiBwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICBtX2Nh
bGxlZU9yQ29kZUJsb2NrLnNldCh2bSwgb3duZXIsIGNhbGxlZSk7CiAKLSAgICBpZiAoaXNEYXRh
SUMoKSkgCisgICAgaWYgKGlzRGF0YUlDKCkpCiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBo
aWNDYWxsRGVzdGluYXRpb24gPSBjb2RlUHRyOwogICAgIGVsc2UgeworI2lmIEVOQUJMRShKSVQp
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxs
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24sIGNhbGxlZSk7CisjZW5kaWYKICAgICB9CiB9CiAKQEAgLTEzNSw4ICsxMzYsMTEgQEAg
dm9pZCBDYWxsTGlua0luZm86OmNsZWFyQ2FsbGVlKCkKICAgICBtX2NhbGxlZU9yQ29kZUJsb2Nr
LmNsZWFyKCk7CiAgICAgaWYgKGlzRGF0YUlDKCkpCiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21v
cnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxscHRyOwotICAgIGVsc2UgaWYgKCFjbGVhcmVkQnlK
ZXR0aXNvbigpKQorICAgIGVsc2UgaWYgKCFjbGVhcmVkQnlKZXR0aXNvbigpKSB7CisjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlD
Lm1fY2FsbGVlTG9jYXRpb24sIG51bGxwdHIpOworI2VuZGlmCisgICAgfQogfQogCiBKU09iamVj
dCogQ2FsbExpbmtJbmZvOjpjYWxsZWUoKQpAQCAtMjI0LDYgKzIyOCw3IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIAogICAgIGlmIChpc0xpbmtlZCgpKSB7CiAg
ICAgICAgIGlmIChzdHViKCkpIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgaWYgKCFz
dHViKCktPnZpc2l0V2Vhayh2bSkpIHsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKApAQCAt
MjM0LDYgKzIzOSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAg
ICAgICAgICAgICAgIHVubGluayh2bSk7CiAgICAgICAgICAgICAgICAgbV9jbGVhcmVkQnlHQyA9
IHRydWU7CiAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgfSBlbHNlIGlmICghdm0uaGVh
cC5pc01hcmtlZChtX2NhbGxlZU9yQ29kZUJsb2NrLmdldCgpKSkgewogICAgICAgICAgICAgaWYg
KGlzRGlyZWN0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKSkgewpAQCAtMjgwLDEzICsyODYsMTQgQEAgdm9pZCBDYWxsTGlua0luZm86OnZp
c2l0V2VhayhWTSYgdm0pCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKIHZvaWQgQ2FsbExp
bmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJiBz
aHVmZmxlRGF0YSkKIHsKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxG
cmFtZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0YSk7CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5z
aHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsK
IApAQCAtMzQ1LDcgKzM1Miw3IEBAIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsCiAgICAgcmV0dXJu
IGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwg
dXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWls
Q2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRM
YW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChpc1RhaWxDYWxsKCkpOwogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwpAQCAt
MzU4LDcgKzM2NSw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVt
aXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSCiAgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgU2NvcGVkTGFt
YmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOwogICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwpAQCAtMzY2LDcgKzM3
Myw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYKIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRT
bG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQogewotICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworICAgIHNldFNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKHZtLmdldENUSUxpbmtDYWxsKCkuY29kZSgpKTsKICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQpAQCAtMzc2LDIxICszODMs
MzEgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmYKICAgICBqaXQubW92ZShjYWxsTGlua0luZm9H
UFIsIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOwogfQorI2VuZGlmCiAKLXZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0
YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQordm9pZCBDYWxsTGlua0lu
Zm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBDYWxsVHlwZSBjYWxsVHlwZSwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0
YSkKIHsKLSAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZv
LmJ5dGVjb2RlSW5kZXgpOwotICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxs
VHlwZSwgY2FsbGVlR1BSKTsKLSAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJ
bmZvLmRvbmVMb2NhdGlvbjsKLSAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVm
ZmxlRGF0YSkgeworICAgIFVOVVNFRF9QQVJBTShmcmFtZVNodWZmbGVEYXRhKTsKKyAgICBtX2Nv
ZGVPcmlnaW4gPSBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpOworICAgIG1fY2FsbFR5cGUgPSBj
YWxsVHlwZTsKKyNpZiBFTkFCTEUoSklUKQorICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gR1BSSW5mbzo6cmVnVDI7Cisg
ICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CisgICAgaWYgKGZyYW1lU2h1ZmZsZURhdGEpIHsK
ICAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIHdlcmUgYSByZWZjb3VudGVk
IGRhdGEgc3RydWN0dXJlLgotICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVl
PENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxl
RGF0YSk7CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+KCpmcmFtZVNodWZmbGVEYXRhKTsKICAgICB9Ci0gICAgc2V0VXNlc0RhdGFJ
Q3MoVXNlRGF0YUlDOjpZZXMpOwogICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2Fs
bExpbmtJbmZvR1BSOwotICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQ
dHJUYWc+KCkpOworI2VuZGlmCisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOwor
ICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSUxpbmtDYWxsKCkuY29kZSgp
KTsKKyAgICAvLyBJZiBKSVQgaXMgZGlzYWJsZWQsIHdlIHNob3VsZCBub3Qgc3VwcG9ydCBkeW5h
bWljYWxseSBnZW5lcmF0ZWQgY2FsbCBJQy4KKyAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQor
ICAgICAgICBkaXNhbGxvd1N0dWJzKCk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogdm9pZCBDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKQEAgLTQwNiw3ICs0MjMsNyBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogICAgIH0p
OwogfQogCi12b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiBqaXQsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7CiAKQEAgLTQ2Miw2ICs0NzksNyBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPiB0YXJnZXQpCiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKHUuY29kZUlDLm1fY2FsbExvY2F0aW9uLCB0YXJnZXQpOwogfQorI2VuZGlmCiAKIHZvaWQg
Q2FsbExpbmtJbmZvOjpzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsKQEAgLTQ4MywxMSArNTAxLDE0IEBAIHZv
aWQgQ2FsbExpbmtJbmZvOjpyZXZlcnRDYWxsVG9TdHViKCkKICAgICAgICAgbV9jYWxsZWVPckNv
ZGVCbG9jay5jbGVhcigpOwogICAgICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3Rp
bmF0aW9uID0gbnVsbHB0cjsKICAgICB9IGVsc2UgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
IENDYWxsSGVscGVyczo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2go
CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJl
Z2lzdGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24pLCBjYWxsZWVHUFIoKSwgbnVsbHB0cik7
CisjZW5kaWYKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86
OnNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmIG5ld1N0dWIpCiB7CiAg
ICAgY2xlYXJTdHViKCk7CkBAIC01MDQsNyArNTI1LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnNl
dFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmIG5ld1N0dWIpCiAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4obV9zdHViLT5jb2Rl
KCkuY29kZSgpKSk7CiAgICAgfQogfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uaAppbmRleCBlNWY3N2NmMzdiZjI2NmY0YjljOTNjNTBjZjk5NmQyMWM2Njhj
ZTQ1Li5iMmQzYWZhNmNmNjBkMTViZTdhNWQ0OWQ4NjJjYzQ1Y2Y4YjU4YTc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCkBAIC0yOCwyNSArMjgs
MjkgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIgogI2luY2x1ZGUgIkNhbGxN
b2RlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNs
dWRlIDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYg
RU5BQkxFKEpJVCkKLQogY2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgRXhlY3V0YWJsZUJhc2U7
CiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIEpTRnVuY3Rpb247CitjbGFzcyBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZTsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAorc3Ry
dWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOwog
CiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxM
aW5rSW5mbz4gewogcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CisKICAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAg
ICAgIENhbGwsCkBAIC01OSw2ICs2Myw4IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQ
YWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIERpcmVjdENvbnN0
cnVjdCwKICAgICAgICAgRGlyZWN0VGFpbENhbGwKICAgICB9OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWNDYWxsZWVNYXNrID0gMTsKICAgICAKICAgICBzdGF0
aWMgQ2FsbFR5cGUgY2FsbFR5cGVGb3IoT3Bjb2RlSUQgb3Bjb2RlSUQpOwogCkBAIC0xNzQsMzUg
KzE4MCw0MyBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4gaXNWYXJhcmdzQ2FsbFR5cGUoc3Rh
dGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpKTsKICAgICB9CiAKLSAgICBib29sIGlzTGlu
a2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdHViIHx8IG1fY2FsbGVlT3JDb2RlQmxvY2s7IH0KKyAg
ICBib29sIGlzTGlua2VkKCkgY29uc3QgeyByZXR1cm4gc3R1YigpIHx8IG1fY2FsbGVlT3JDb2Rl
QmxvY2s7IH0KICAgICB2b2lkIHVubGluayhWTSYpOwogCisjaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIHNldFVwQ2FsbChDYWxsVHlwZSBjYWxsVHlwZSwgR1BSUmVnIGNhbGxlZUdQUikKICAgICB7
CiAgICAgICAgIG1fY2FsbFR5cGUgPSBjYWxsVHlwZTsKICAgICAgICAgbV9jYWxsZWVHUFIgPSBj
YWxsZWVHUFI7CiAgICAgfQogCi0gICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KTsKLQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsg
fQorI2VuZGlmCisKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBDYWxsVHlwZSwgQnl0
ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqKTsKICAgICAKICAgICBlbnVtIGNsYXNz
IFVzZURhdGFJQyA6IHVpbnQ4X3QgewogICAgICAgICBZZXMsCiAgICAgICAgIE5vCiAgICAgfTsK
IAorI2lmIEVOQUJMRShKSVQpCiBwcml2YXRlOgotICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wg
aXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FS
Tl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1p
dEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwg
U2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKIHB1YmxpYzoKICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBTY29w
ZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJO
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWls
Q2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmKTsKLSAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOworICAg
IHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgU2NvcGVkTGFt
YmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRo
KFZNJiwgQ0NhbGxIZWxwZXJzJik7CiAgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRo
KFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKKyAgICB2b2lk
IGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisgICAgdm9pZCBzZXREaXJlY3RDYWxsVGFyZ2V0KENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KTsKKyNlbmRpZgorCiAgICAgdm9pZCByZXZl
cnRDYWxsVG9TdHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAg
LTIxNyw3ICsyMzEsNiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBtX2RvbmVMb2NhdGlvbiA9IGRvbmVM
b2NhdGlvbjsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemVEaXJlY3RDYWxsKCk7CiAKICAg
ICBib29sIGFsbG93U3R1YnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93U3R1YnM7IH0KIApAQCAt
MjM3LDcgKzI1MCw2IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgdm9pZCBzZXRDb2RlQmxvY2soVk0mLCBKU0Nl
bGwqLCBGdW5jdGlvbkNvZGVCbG9jayopOwogICAgIHZvaWQgY2xlYXJDb2RlQmxvY2soKTsKICAg
ICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrKCk7Ci0gICAgdm9pZCBzZXREaXJlY3RDYWxs
VGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KTsKIAogICAgIHZvaWQgc2V0
TGFzdFNlZW5DYWxsZWUoVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVl
KTsKICAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKTsKQEAgLTI0NywyMiArMjU5LDE4IEBA
IGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExp
bmtJbmZvPiB7CiAgICAgdm9pZCBzZXRFeGVjdXRhYmxlRHVyaW5nQ29tcGlsYXRpb24oRXhlY3V0
YWJsZUJhc2UqKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpOwogICAgIAorI2lm
IEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZT4mJik7CisjZW5kaWYKICAgICB2b2lkIGNsZWFyU3R1YigpOwogCiAgICAgUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIoKSBjb25zdAogICAgIHsKKyNpZiBFTkFCTEUoSklUKQog
ICAgICAgICByZXR1cm4gbV9zdHViLmdldCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0U2xvd1N0
dWIoUmVmPEpJVFN0dWJSb3V0aW5lPiYmIG5ld1Nsb3dTdHViKQotICAgIHsKLSAgICAgICAgbV9z
bG93U3R1YiA9IFdURk1vdmUobmV3U2xvd1N0dWIpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJT
bG93U3R1YigpCi0gICAgewotICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsKKyNlbHNlCisg
ICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCiAgICAgfQogCiAgICAgYm9vbCBzZWVuT25j
ZSgpCkBAIC0zMzAsMTkgKzMzOCwxNyBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7
CiAgICAgfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB1aW50MzJfdCogYWRkcmVzc09m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotICAgIH0KLSNlbmRpZgotCiAgICAgdWlu
dDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CiAgICAgfQogICAgIAogICAgIHZv
aWQgc2V0TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModW5zaWduZWQpOworICAgIHZvaWQg
dXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXModW5zaWduZWQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpCisgICAgeworICAgICAgICBpZiAobV9tYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgICAgICAgICAgbV9t
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aENvdW50KCkK
ICAgICB7CkBAIC0zNjQsMTAgKzM3MCwxMiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMg
UGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbik7CiAg
ICAgfQogCisjaWYgRU5BQkxFKEpJVCkKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX2NhbGxlZUdQUjsKICAgICB9CisjZW5kaWYKIAogICAgIHVpbnQzMl90
IHNsb3dQYXRoQ291bnQoKQogICAgIHsKQEAgLTM4Myw5ICszOTEsMTEgQEAgY2xhc3MgQ2FsbExp
bmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAg
ICB2b2lkIGZvckVhY2hEZXBlbmRlbnRDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaXNMaW5rZWQoKSkgewotICAgICAgICAgICAgaWYgKHN0dWIo
KSkKKyAgICAgICAgICAgIGlmIChzdHViKCkpIHsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAg
ICAgICAgIHN0dWIoKS0+Zm9yRWFjaERlcGVuZGVudENlbGwoZnVuY3Rvcik7Ci0gICAgICAgICAg
ICBlbHNlIHsKKyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBm
dW5jdG9yKG1fY2FsbGVlT3JDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChp
c0RpcmVjdCgpKQogICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKG1fbGFzdFNlZW5DYWxsZWVP
ckV4ZWN1dGFibGUuZ2V0KCkpOwpAQCAtMzk3LDI2ICs0MDcsMzUgQEAgY2xhc3MgQ2FsbExpbmtJ
bmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAg
IHZvaWQgdmlzaXRXZWFrKFZNJik7CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0RnJh
bWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSYpOwogCiAgICAgY29uc3Qg
Q2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1lU2h1ZmZsZURhdGEoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fZnJhbWVTaHVmZmxlRGF0YS5nZXQoKTsKICAgICB9CisjZW5kaWYKIAogcHJpdmF0
ZToKIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3Rh
cnQoKTsKIAorICAgIHVpbnQzMl90IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAw
IH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1l
bnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3Ig
YXJndW1lbnRzLgogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9u
ZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Ns
b3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CiAgICAgICAgIFVu
aW9uVHlwZSgpIAorI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICA6IGRhdGFJQyB7IG51bGxw
dHIsIEludmFsaWRHUFJSZWcgfQorI2Vsc2UKKyAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0
ciB9CisjZW5kaWYKICAgICAgICAgeyB9CiAgICAgICAgIHN0cnVjdCBEYXRhSUMgewogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fbW9ub21vcnBoaWND
YWxsRGVzdGluYXRpb247CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIEdQUlJlZyBtX2Nh
bGxMaW5rSW5mb0dQUjsKKyNlbmRpZgogICAgICAgICB9IGRhdGFJQzsKIAogICAgICAgICBzdHJ1
Y3QgewpAQCAtNDI5LDkgKzQ0OCwxMCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogCiAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9jYWxsZWVPckNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2xh
c3RTZWVuQ2FsbGVlT3JFeGVjdXRhYmxlOworI2lmIEVOQUJMRShKSVQpCiAgICAgUmVmUHRyPFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7Ci0gICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBtX3Nsb3dTdHViOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gbV9mcmFtZVNodWZmbGVEYXRhOworI2VuZGlmCiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmln
aW47CiAgICAgYm9vbCBtX2hhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICBib29sIG1faGFz
U2VlbkNsb3N1cmUgOiAxOwpAQCAtNDQxLDkgKzQ2MSwxMCBAQCBjbGFzcyBDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgIGJvb2wg
bV9jbGVhcmVkQnlKZXR0aXNvbiA6IDE7CiAgICAgdW5zaWduZWQgbV9jYWxsVHlwZSA6IDQ7IC8v
IENhbGxUeXBlCiAgICAgdW5zaWduZWQgbV91c2VEYXRhSUMgOiAxOyAvLyBVc2VEYXRhSUMKKyNp
ZiBFTkFCTEUoSklUKQogICAgIEdQUlJlZyBtX2NhbGxlZUdQUiB7IEludmFsaWRHUFJSZWcgfTsK
KyNlbmRpZgogICAgIHVpbnQzMl90IG1fc2xvd1BhdGhDb3VudCB7IDAgfTsKLSAgICB1aW50MzJf
dCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczog
dGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhl
IG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIGFyZ3VtZW50cy4KIH07CiAKIGlu
bGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8pCkBAIC00NTMsMTEgKzQ3NCw3IEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENh
bGxMaW5rSW5mb0NvZGVPcmlnaW4oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiAKIHN0cnVj
dCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4
OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlh
bGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgotICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGU7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0
aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVm
ZmxlRGF0YTsKIH07CiAKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
Y3BwCmluZGV4IGY3YWZiMmIwZjI4ZmQ5ZTVmZmM1YzM0YjZhM2E4NTZhZTM3MzAyZjUuLmQ1OTA0
YThlOTBhMmNkYTQ2OTM3MWY4N2U5NzdiZDJjOGQzOTMxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcApAQCAtMzAsNyArMzAsNiBA
QAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJMTEludENhbGxMaW5rSW5mby5oIgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIApA
QCAtNTIsNDcgKzUxLDYgQEAgQ2FsbExpbmtTdGF0dXM6OkNhbGxMaW5rU3RhdHVzKEpTVmFsdWUg
dmFsdWUpCiAgICAgbV92YXJpYW50cy5hcHBlbmQoQ2FsbFZhcmlhbnQodmFsdWUuYXNDZWxsKCkp
KTsKIH0KIAotQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxv
Y2spOwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLSAgICBpZiAocHJvZmlsZWRCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+aGFzRXhpdFNp
dGUoREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50VmFsdWUp
KSkgewotICAgICAgICAvLyBXZSBjb3VsZCBmb3JjZSB0aGlzIHRvIGJlIGEgY2xvc3VyZSBjYWxs
LCBidXQgaW5zdGVhZCB3ZSdsbCBqdXN0IGFzc3VtZSB0aGF0IGl0Ci0gICAgICAgIC8vIHRha2Vz
IHNsb3cgcGF0aC4KLSAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5hdChieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICBPcGNvZGVJRCBvcCA9IGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpOwotCi0gICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsK
LSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYWxsTGlua0lu
Zm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5t
X2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCkubWV0
YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Ugb3BfdGFpbF9jYWxsOgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24t
PmFzPE9wVGFpbENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjoKLSAgICAgICAgY2Fs
bExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKS5tZXRhZGF0YShw
cm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBv
cF9pdGVyYXRvcl9uZXh0OgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZv
OwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxsTGlu
a1N0YXR1cygpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMo
Y2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZSgpKTsKLX0KLQogQ2FsbExpbmtTdGF0dXMgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIGNvbnN0IElDU3RhdHVzTWFwJiBtYXAsCiAgICAg
RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YSkKQEAgLTEwNSwxMCArNjMsMTkgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgVU5VU0VEX1BBUkFNKGV4aXRT
aXRlRGF0YSk7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLmNhbGxMaW5rSW5mbzsK
LSAgICBpZiAoIWNhbGxMaW5rSW5mbykgeworICAgIGlmICghY2FsbExpbmtJbmZvKQorICAgICAg
ICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKKyAgICAvLyBkb25lTG9jYXRpb24gaXMgbnVsbHB0
ciB3aGVuIGl0IGlzIHRpZWQgdG8gTExJbnQgKG5vdCBCYXNlbGluZSkuCisgICAgaWYgKCFjYWxs
TGlua0luZm8tPmRvbmVMb2NhdGlvbigpKSB7CiAgICAgICAgIGlmIChleGl0U2l0ZURhdGEudGFr
ZXNTbG93UGF0aCkKICAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgICAg
IHJldHVybiBjb21wdXRlRnJvbUxMSW50KGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJ
bmRleCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIGlmIChwcm9maWxlZEJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpLT5oYXNFeGl0U2l0ZShERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0
ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpKSB7CisgICAgICAgICAgICAvLyBXZSBjb3Vs
ZCBmb3JjZSB0aGlzIHRvIGJlIGEgY2xvc3VyZSBjYWxsLCBidXQgaW5zdGVhZCB3ZSdsbCBqdXN0
IGFzc3VtZSB0aGF0IGl0CisgICAgICAgICAgICAvLyB0YWtlcyBzbG93IHBhdGguCisgICAgICAg
ICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIGNvbXB1dGVGb3IobG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExp
bmtJbmZvLCBleGl0U2l0ZURhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuaAppbmRleCA1YjUzODBmOTBjNTZmYzA1NGU2OWYzN2Q0Mzc1MmU0
M2NkYzA3MDJhLi5hOTJkOTAwMWI5NmJlNDlkOTAxYjRhYmE5Y2Q1MjkxMDIxMDEwMGQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaApAQCAt
MTE3LDcgKzExNyw2IEBAIGNsYXNzIENhbGxMaW5rU3RhdHVzIGZpbmFsIHsKIHByaXZhdGU6CiAg
ICAgdm9pZCBtYWtlQ2xvc3VyZUNhbGwoKTsKICAgICAKLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0
dXMgY29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sq
LCBCeXRlY29kZUluZGV4KTsKICNpZiBFTkFCTEUoSklUKQogICAgIHN0YXRpYyBDYWxsTGlua1N0
YXR1cyBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKICAgICAgICAgY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgQ2FsbExpbmtJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCmluZGV4IDc3Y2FhOGU1N2U5NGFkNzMyYTg3MDNiNzEwZmQ0ODBmNzE4
MTNhZTYuLjVhOGI3ODU2Y2ViY2MwYzU5OWVmYjU4NTE0MDFiMzU0MGNlYWQxZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC00NDksMTQgKzQ0
OSwxNyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEodGhpcyk7IFwKICAgICBuZXcgKCZtZXRhZGF0YSkgX19vcDo6TWV0YWRh
dGEgeyBieXRlY29kZSB9OyBcCiAKLSNkZWZpbmUgQ0FTRShfX29wKSBjYXNlIF9fb3A6Om9wY29k
ZUlECi0KLSNkZWZpbmUgTElOSyguLi4pIFwKLSAgICBDQVNFKFdURl9MQVpZX0ZJUlNUKF9fVkFf
QVJHU19fKSk6IHsgXAorI2RlZmluZSBMSU5LX0lNUEwoLi4uKSBcCiAgICAgICAgIElOSVRJQUxJ
WkVfTUVUQURBVEEoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKSBcCiAgICAgICAgIFdURl9M
QVpZX0hBU19SRVNUKF9fVkFfQVJHU19fKSh7IFwKICAgICAgICAgICAgIFdURl9MQVpZX0ZPUl9F
QUNIX1RFUk0oTElOS19GSUVMRCwgIFdURl9MQVpZX1JFU1RfKF9fVkFfQVJHU19fKSkgXAogICAg
ICAgICB9KSBcCisKKyNkZWZpbmUgQ0FTRShfX29wKSBjYXNlIF9fb3A6Om9wY29kZUlECisKKyNk
ZWZpbmUgTElOSyguLi4pIFwKKyAgICBDQVNFKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSk6
IHsgXAorICAgICAgICBMSU5LX0lNUEwoX19WQV9BUkdTX18pIFwKICAgICAgICAgYnJlYWs7IFwK
ICAgICB9CiAKQEAgLTQ2NSwxMCArNDY4LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAg
ICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAg
ICAgbV9ieXRlY29kZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3
aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQot
ICAgICAgICBMSU5LKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9w
VGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wQ29uc3Ry
dWN0VmFyYXJncywgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5VmFsLCBwcm9maWxlKQog
ICAgICAgICBMSU5LKE9wR2V0UHJpdmF0ZU5hbWUsIHByb2ZpbGUpCiAKQEAgLTQ5OCwxMSArNDk3
LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElOSyhPcEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eSkKICAgICAgICAgTElOSyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgcHJvZmls
ZSkKIAotICAgICAgICBMSU5LKE9wQ2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxD
YWxsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wQ2FsbEV2YWwsIHByb2ZpbGUpCi0gICAgICAg
IExJTksoT3BDb25zdHJ1Y3QsIHByb2ZpbGUpCi0KICAgICAgICAgTElOSyhPcEluQnlWYWwpCiAg
ICAgICAgIExJTksoT3BQdXRCeVZhbCkKICAgICAgICAgTElOSyhPcFB1dEJ5VmFsRGlyZWN0KQpA
QCAtNTI3LDEzICs1MjEsNjggQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElO
SyhPcENhdGNoKQogICAgICAgICBMSU5LKE9wUHJvZmlsZUNvbnRyb2xGbG93KQogCisgICAgICAg
IGNhc2Ugb3BfY2FsbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wQ2FsbCwgcHJvZmlsZSkK
KyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0s
IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgp
LCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBvcF90YWlsX2NhbGw6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcFRhaWxDYWxsLCBwcm9m
aWxlKQorI2lmIEVOQUJMRShKSVQpCisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBz
aHVmZmxlRGF0YSA9IENhbGxGcmFtZVNodWZmbGVEYXRhOjpjcmVhdGVGb3JCYXNlbGluZU9yTExJ
bnRUYWlsQ2FsbChieXRlY29kZSwgbnVtUGFyYW1ldGVycygpKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCAmc2h1ZmZsZURhdGEpOwor
I2Vsc2UKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRh
SUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5p
bmRleCgpLCBudWxscHRyKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDogeworICAgICAgICAgICAgTElOS19JTVBMKE9w
Q2FsbEV2YWwsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5p
bml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwg
aW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBMSU5LX0lN
UEwoT3BDb25zdHJ1Y3QsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5r
SW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewotICAgICAgICAg
ICAgSU5JVElBTElaRV9NRVRBREFUQShPcEl0ZXJhdG9yT3BlbikKKyAgICAgICAgICAgIExJTktf
SU1QTChPcEl0ZXJhdG9yT3BlbikKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZv
LmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
LCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0OiB7Ci0gICAgICAgICAgICBJ
TklUSUFMSVpFX01FVEFEQVRBKE9wSXRlcmF0b3JOZXh0KQorICAgICAgICAgICAgTElOS19JTVBM
KE9wSXRlcmF0b3JOZXh0KQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5p
dGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGlu
c3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgTElOS19J
TVBMKE9wQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxM
aW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIExJTktfSU1QTChPcFRhaWxDYWxsVmFyYXJncywgcHJvZmlsZSkKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5r
SW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cywgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2Fs
bExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogewor
ICAgICAgICAgICAgTElOS19JTVBMKE9wQ29uc3RydWN0VmFyYXJncywgcHJvZmlsZSkKKyAgICAg
ICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxM
aW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxs
cHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTc4MywyMSArODMyLDE4
IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFz
ZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CiAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgp
KTsKICAgICAgICAgaml0RGF0YS5tX3N0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0
dWJJbmZvPihqaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSk7Ci0gICAgICAgIGpp
dERhdGEubV9jYWxsTGlua0luZm9zID0gRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPihqaXRDb2Rl
LT5tX3VubGlua2VkQ2FsbHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZENh
bGxMaW5rSW5mbyA6IGppdENvZGUtPm1fdW5saW5rZWRDYWxscykgeworICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KGxvY2tlciwgdW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29k
ZUxvY2F0aW9ucyh7IH0sIHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbik7CisgICAg
ICAgIH0KKwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3Rh
bnRQb29sLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuYXQoaSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoK
ICAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxP
YmplY3QuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVyKCkpOwot
ICAgICAgICAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5m
byA9IGppdENvZGUtPm1fdW5saW5rZWRDYWxsc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvc1tpbmRleF07
Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5s
aW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAg
ICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9ICZjYWxsTGlua0luZm87
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50
ZXIoKSk7CiAgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5r
ZWRTdHViSW5mbyA9IGppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3NbaW5kZXhdOwpAQCAtMTU2
NywxNSArMTYxMyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCkKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0KLSAgICBmb3JFYWNoTExJbnRD
YWxsTGlua0luZm8oWyZdKExMSW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKLSAgICAg
ICAgaWYgKGNhbGxMaW5rSW5mby5pc0xpbmtlZCgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxM
aW5rSW5mby5jYWxsZWUoKSkpIHsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgIkNsZWFyaW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcyk7Ci0gICAgICAg
ICAgICBjYWxsTGlua0luZm8udW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhbGxM
aW5rSW5mby5sYXN0U2VlbkNhbGxlZSgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxMaW5rSW5m
by5sYXN0U2VlbkNhbGxlZSgpKSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckxhc3RT
ZWVuQ2FsbGVlKCk7Ci0gICAgfSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTU5Myw4ICsx
NjMwLDYgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVERhdGFTbG93
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJ
bmxpbmVDYWNoZXMoKQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlu
a0luZm9zKQotICAgICAgICAgICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSgpKTsKICAgICAg
ICAgZm9yIChhdXRvJiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CiAgICAgICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXJCYXNlIGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwog
ICAgICAgICAgICAgc3R1YkluZm8udmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHRoaXMpOwpA
QCAtMTYxMiwxOSArMTY0Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNh
Y2hlcygpCiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewotICAgICAgICAvLyBW
ZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1
YWwgY2FsbHMuCi0gICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0
aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlu
a0luZm9zKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0Nl
bGwqKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotCi0gICAgfQotI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTYzNCw4
ICsxNjU2LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYg
dm0pCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0gICAgaWYgKEpJVENvZGU6OmNv
dWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50
ZXJwcmV0ZWQoaml0VHlwZSgpKSkgewogICAgICAgICBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7CisgICAgICAgIC8vIElmIHRoZSBDb2RlQmxvY2sgaXMgREZHIG9yIEZUTCwgQ2FsbExpbmtJ
bmZvIGluIG1ldGFkYXRhIGlzIG5vdCByZWxhdGVkLgorICAgICAgICBmb3JFYWNoTExJbnRPckJh
c2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSk7CisgICAgICAgIH0pOworICAgIH0K
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTY5OSwxMyArMTcy
NiwxNiBAQCB2b2lkIENvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIHZvaWQgQ29k
ZUJsb2NrOjpnZXRJQ1N0YXR1c01hcChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBJQ1N0YXR1
c01hcCYgcmVzdWx0KQogeworICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0
VHlwZSgpKSkgeworICAgICAgICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsm
XShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAgICAgICAgcmVzdWx0LmFkZChj
YWxsTGlua0luZm8uY29kZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2Fs
bExpbmtJbmZvID0gJmNhbGxMaW5rSW5mbzsKKyAgICAgICAgfSk7CisgICAgfQogI2lmIEVOQUJM
RShKSVQpCiAgICAgaWYgKEpJVENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgaWYg
KGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0
byYgc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykKICAgICAgICAgICAgICAgICByZXN1
bHQuYWRkKHN0dWJJbmZvLmNvZGVPcmlnaW4sIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5z
dHViSW5mbyA9ICZzdHViSW5mbzsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZv
IDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQo
Y2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNh
bGxMaW5rSW5mbyA9ICZjYWxsTGlua0luZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CkBA
IC0xNzYwLDE1ICsxNzkwLDI0IEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRT
dHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LUNhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXggaW5kZXgpCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExp
bmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29k
ZUluZGV4IGluZGV4KQogewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICBmb3Ig
KGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykgewotICAgICAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdpbihpbmRleCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZjYWxsTGlua0luZm87CisgICAgaWYgKEpJVENvZGU6
OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKSB7CisgICAgICAgIGF1dG8mIGluc3RydWN0
aW9uID0gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKGluc3RydWN0
aW9uLT5vcGNvZGVJRCgpKSB7CisjZGVmaW5lIENBU0UoT3ApIFwKKyAgICAgICAgY2FzZSBPcDo6
b3Bjb2RlSUQ6IFwKKyAgICAgICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1l
dGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJbmZvOyBcCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDQVNFKQorCisj
dW5kZWYgQ0FTRQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwpAQCAtMjEzNSwxMyArMjE3NCw2IEBAIHZvaWQg
Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTaHJpbmtN
b2RlIHNocmlua01vZGUpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6Omxp
bmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNv
bWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlciku
bV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCiB2b2lkIENvZGVCbG9jazo6bGlu
a0luY29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3Jw
aGljQ2FsbE5vZGUqIGluY29taW5nKQogewogICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJG
cmFtZSk7CkBAIC0yMTUyLDEwICsyMTg0LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21p
bmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDCiB9
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0Nh
bGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKK3sKKyAg
ICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOworICAgIG1faW5jb21pbmdDYWxscy5w
dXNoKGluY29taW5nKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMo
KQogewotICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21p
bmdMTEludENhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigp
LT51bmxpbmsoKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNv
bWluZ0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5r
KHZtKCkpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgSklURGF0YSogaml0RGF0YSA9IG51bGxwdHI7
CiAgICAgewpAQCAtMjE2MywyMCArMjIwMSwxMiBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5j
b21pbmdDYWxscygpCiAgICAgICAgIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCk7CiAgICAgfQog
ICAgIGlmIChqaXREYXRhKSB7Ci0gICAgICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29taW5nQ2Fs
bHMuYmVnaW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAgICAgICAg
ICBqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgICAg
ICB3aGlsZSAoaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBq
aXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKICAgICAgICAgICAgIGpp
dERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgpKTsK
ICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmxpbmtJ
bmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qIGlu
Y29taW5nKQotewotICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgbV9p
bmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIENvZGVCbG9jayogQ29kZUJs
b2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5u
ZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yMzI5
LDIyICsyMzU5LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlz
b25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZtLmhlYXAu
Y3VycmVudFRocmVhZElzRG9pbmdHQ1dvcmsoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4
ZWN1dGFibGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShKSVQpCiAgICAgewog
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGlmIChK
SVREYXRhKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAgfQotI2lm
IEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpIHsKLSAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9q
aXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byogY2FsbExpbmtJbmZv
IDogZGZnQ29tbW9uLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9CisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkp
IHsKKyAgICAgICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29k
ZS0+ZGZnQ29tbW9uKCk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBjYWxsTGlua0luZm8g
OiBkZmdDb21tb24tPm1fY2FsbExpbmtJbmZvcykKKyAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOworICAgICAgICAgICAgfQogI2VuZGlmCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExp
bmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KICAgICB9Ci0jZW5kaWYKIAogICAgIC8vIFRoaXMgYWNjb21wbGlzaGVzICgyKS4K
ICAgICBvd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUodm0sIGFsdGVybmF0aXZlKCksIGNv
ZGVUeXBlKCksIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKQEAgLTI4NDcsMTkgKzI4NzcsMTMgQEAg
QXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImLCBCeXRlY29kZUluZGUKIHsKICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKSkgewotI2RlZmluZSBDQVNFMShPcCkgXAorI2RlZmluZSBDQVNFKE9wKSBcCiAgICAg
Y2FzZSBPcDo6b3Bjb2RlSUQ6IFwKICAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+
KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2ZpbGU7CiAKLSNkZWZpbmUgQ0FTRTIoT3ApIFwK
LSAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5h
czxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZTsKLQot
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRTEpCi0gICAgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ0FTRTIpCisgICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNFKQogCi0jdW5kZWYgQ0FTRTEKLSN1bmRlZiBD
QVNFMgorI3VuZGVmIENBU0UKIAogICAgIGNhc2UgT3BHZXRCeUlkOjpvcGNvZGVJRDogewogICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKQEAgLTMw
MjksMTcgKzMwNTMsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJvZmlsZVBy
ZWRpY3Rpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2UKICAgICAgICAgfQogICAg
IH0pOwogCi0jZGVmaW5lIFZJU0lUMShfX29wKSBcCisjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAg
ICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgcHJvY2Vz
cyhtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSk7IH0pOwogCi0jZGVmaW5lIFZJU0lUMihfX29wKSBc
Ci0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IHBy
b2Nlc3MobWV0YWRhdGEubV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUpOyB9KTsKLQotICAg
IEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoVklTSVQxKQotICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKFZJU0lUMikKKyAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUKQogCi0jdW5kZWYgVklTSVQxCi0jdW5kZWYg
VklTSVQyCisjdW5kZWYgVklTSVQKIAogICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRv
ck5leHQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsKICAgICAgICAgcHJvY2VzcyhtZXRhZGF0YS5t
X2l0ZXJhYmxlUHJvZmlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKaW5kZXggNjRmOWY1YWJjZmUyYWU3MDVkMWRhNjVhYTlmODMxOTdiOTZjNmQzMS4uYjdh
ZWEyNjc3ZjVlOTQ5MDhhYjM1NWY5NmIwZDIzYzM3ODI0MjAxMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUg
IkpTQ2FzdC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIk1ldGFkYXRhVGFibGUuaCIKICNpbmNsdWRl
ICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpAQCAtMjYxLDggKzI2MCw2IEBAIGNsYXNzIENv
ZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBt
X3N0dWJJbmZvczsKLSAgICAgICAgRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5r
SW5mb3M7Ci0gICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIFBhY2tlZFJh
d1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAgICAgICAgIFNl
bnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOwogICAg
ICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKQEAgLTI5MSw3ICsyODgs
NyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBUaGlzIGlzIGEg
c2xvdyBmdW5jdGlvbiBjYWxsIHVzZWQgcHJpbWFyaWx5IGZvciBjb21waWxpbmcgT1NSIGV4aXRz
IGluIHRoZSBjYXNlCiAgICAgLy8gdGhhdCB0aGVyZSBoYWQgYmVlbiBpbmxpbmluZy4gQ2hhbmNl
cyBhcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMsIHlvdSdyZSByZWFsbHkKICAgICAvLyBsb29r
aW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5n
IHRoaXMuCi0gICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXgpOworICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKICAg
ICAKICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKQEAgLTMwOSwxNCArMzA2
LDExIEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAKICAgICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotI2lmIEVOQUJMRShK
SVQpCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENh
bGxMaW5rSW5mbyopOworI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5
bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSop
OwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKLSAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2Fs
bEZyYW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKLQogICAgIGNvbnN0IElu
c3RydWN0aW9uKiBvdXRPZkxpbmVKdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CiAg
ICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZz
ZXQpCiAgICAgewpAQCAtNDUzLDcgKzQ0Nyw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBK
U0NlbGwgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFZhbHVl
UHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoQXJyYXlBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoY29uc3QgRnVuY3RvciYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaExMSW50Q2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0lu
Zm8oY29uc3QgRnVuY3RvciYpOwogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBiaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiB1bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7
CkBAIC05NTksNyArOTUzLDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgVk0qIG1fdm07CiAKICAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIg
eyBudWxscHRyIH07Ci0gICAgU2VudGluZWxMaW5rZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBQ
YWNrZWRSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJbnRD
YWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgIFN0cnVjdHVyZVdh
dGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRD
b2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCmluZGV4IDFkNTk0YWI4MzUyODk3ZWM4
YTc0NWVhMjQ5M2Y4ZDJkYTAxOGI5NjIuLjkyZGE5OWEwYmEyYWNjMWZjZGI2YTk3MzVmY2RkZTIz
ZWZjOTMzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0lubGluZXMuaApAQCAtODYsNyArODYsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci12b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJ
bmZvKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50T3JC
YXNlbGluZUNhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJiBmdW5jKQogewogICAgIGlmIChtX21l
dGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZhMzJlOWI2NmJiN2M2MWZlYjMzOWY4MDUyOGMyZDM0NzFkODA2OGIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0NQdHJUYWcuaCIKLSNpbmNsdWRlICJK
U0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0jaW5jbHVk
ZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0
IEluc3RydWN0aW9uOwotCi1jbGFzcyBMTEludENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRS
YXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+IHsKLXB1YmxpYzoKLSAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
cHRyX3QgdW5saW5rZWRCaXQgPSAweDE7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbygpID0gZGVm
YXVsdDsKLSAgICAKLSAgICB+TExJbnRDYWxsTGlua0luZm8oKQotICAgIHsKLSAgICAgICAgaWYg
KGlzT25MaXN0KCkpCi0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuICEobV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0
aExpbmtCaXQgJiB1bmxpbmtlZEJpdCk7IH0KLSAgICAKLQotICAgIHZvaWQgbGluayhWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkpCi0g
ICAgICAgICAgICByZW1vdmUoKTsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0
aExpbmtCaXQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpOwotICAgICAgICB2bS53
cml0ZUJhcnJpZXIob3duZXIsIGNhbGxlZSk7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQg
PSBjb2RlUHRyOwotICAgIH0KLQotICAgIHZvaWQgdW5saW5rKCkKLSAgICB7Ci0gICAgICAgIC8v
IE1ha2UgbGluayBpbnZhbGlkYXRlZC4gSXQgd29ya3MgYmVjYXVzZSBMTEludCB0ZXN0cyB0aGUg
Z2l2ZW4gY2FsbGVlIHdpdGggdGhpcyBwb2ludGVyLiBCdXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMg
bGFzdFNlZW5DYWxsZWUhCi0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5r
Qml0IHw9IHVubGlua2VkQml0OwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgIGlmIChpc09uTGlzdCgp
KQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGNhbGxlZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWlzTGlua2VkKCkpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2Fs
bGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0KTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCog
bGFzdFNlZW5DYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYgfnVubGlu
a2VkQml0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKQotICAgIHsK
LSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1bmxpbmtlZEJp
dDsKLSAgICB9Ci0KLSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
dWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRC
aXQgfTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tYWNoaW5l
Q29kZVRhcmdldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wY29kZS5oCmluZGV4IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFh
YzgzOWJkMzYuLjFjYmM2NmY4NDk5NTQ5OTdlZjdjNTBkNDkzODQzMDJmMzVjNjI5ZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTEyNiwxMSArMTI2LDE5IEBA
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBX
VEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNy
byhPcEdldFByaXZhdGVOYW1lKSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJS
QVlfUFJPRklMRShtYWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9D
QUxMX0xJTktfSU5GTyhtYWNybykgXAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9w
VGFpbENhbGwpIFwKKyAgICBtYWNybyhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1
Y3QpIFwKKyAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JO
ZXh0KSBcCiAgICAgbWFjcm8oT3BDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxW
YXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBt
YWNybyhPcENvbnN0cnVjdFZhcmFyZ3MpIFwKKworI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lU
SF9BUlJBWV9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAogICAgIG1h
Y3JvKE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKQEAgLTEzOSw2ICsxNDcs
NyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3Ro
ID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5
VmFsKSBcCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1hY3JvKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRf
Q0FMTF9MSU5LX0lORk8obWFjcm8pIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9B
UlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBc
CkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAjZGVmaW5lIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX09CSkVDVF9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAg
ICBtYWNybyhPcE5ld09iamVjdCkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xM
SU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCi0gICAgbWFjcm8oT3BDYWxsKSBcCi0gICAgbWFj
cm8oT3BUYWlsQ2FsbCkgXAotICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBtYWNybyhPcENv
bnN0cnVjdCkgXAotICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCi0gICAgbWFjcm8oT3BJdGVy
YXRvck5leHQpIFwKLQogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wQWRkKSBcCiAgICAgbWFjcm8oT3BNdWwpIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
ZDljMmVkN2Q0OGU1YmEyNTZhMzM0NGRmMTY2ZGNhZmI3NWM2MWI4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guY3BwCkBAIC0wLDAgKzEs
MjAzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisKKyNpbmNsdWRl
ICJCaW5hcnlTd2l0Y2guaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVy
LmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZl
SklULmgiCisjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiRGlyZWN0
QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiRlRMVGh1bmtzLmgiCisjaW5jbHVkZSAiRnVsbENvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJG
dW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgor
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nh
c2UuaCIKKyNpbmNsdWRlICJJQ1N0YXRzLmgiCisjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisj
aW5jbHVkZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSklULmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9i
amVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TW9kdWxlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1vZHVsZU5h
bWVzcGFjZUFjY2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2lu
Y2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSAiU3RydWN0dXJl
UmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJT
YW1wbGVyLmgiCisjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSAiV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gY29kZVJlZikKK3sKKyAgICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4o
KSk7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQoreworICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIo
Z2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Cit9CisjZW5kaWYK
Kworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9k
ZSgpKTsKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmsp
OworfQorCitzdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQor
eworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAvLyBFYWNoIFdlYkFzc2VtYmx5Lkluc3Rh
bmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdoaWNo
IGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVyLgorICAgIHJldHVybiBqc0Nhc3Q8
SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShj
YWxsZWUpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorfQorCit2b2lkIGxpbmtNb25v
bW9ycGhpY0NhbGwoCisgICAgVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAorICAgIEpTT2Jq
ZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
KQoreworICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CisKKyAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxs
ZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRo
aXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJU
KGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlYkFzc2Vt
Ymx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxs
KiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2Vs
bCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6
IGNhbGxlckNvZGVCbG9jazsKKyAgICBBU1NFUlQob3duZXIpOworCisgICAgQVNTRVJUKCFjYWxs
TGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2Fs
bGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TGFz
dFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOworCisgICAgaWYgKHNob3VsZER1bXBEaXNh
c3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQorICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNh
bGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29k
ZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRy
eXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOworCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykK
KyAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAm
Y2FsbExpbmtJbmZvKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKGNhbGxMaW5rSW5mby5z
cGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dT
dHVicygpKSB7CisgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQ
b2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKK30KKworc3Rh
dGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7Cisg
ICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAg
ICAgY2FsbExpbmtJbmZvLmNsZWFyQ29kZUJsb2NrKCk7CisgICAgICAgIGlmICghY2FsbExpbmtJ
bmZvLmNsZWFyZWRCeUpldHRpc29uKCkpCisgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlh
bGl6ZURpcmVjdENhbGwoKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY2Fs
bExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpIHsKKyAgICAgICAgICAgIGxpbmtTbG93UGF0
aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOworCisgICAgICAgICAgICBpZiAoY2FsbExp
bmtJbmZvLnN0dWIoKSkKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRv
U3R1YigpOworICAgICAgICB9CisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAv
LyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29k
ZS1iYXNlZCBjYWNoZXMuCisgICAgfQorICAgIGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKKyAg
ICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlz
dCgpKQorICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Cit9CisKK3ZvaWQgdW5saW5rQ2Fs
bChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQoreworICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwg
UmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CisgICAgCisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2Fs
bExpbmtJbmZvLCB2bS5nZXRDVElMaW5rQ2FsbCgpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPigpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9X
YXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVj
dCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoIWNhbGxlZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5
bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgY2FsbGVlKSkKKyAgICAgICAgcmV0
dXJuIHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlwb2ludCgpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odm0pOworICAgIFVOVVNFRF9QQVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bGVlKTsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYgRU5BQkxFKEpJVCkK
Kworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRo
VmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKK3sKKyAg
ICBKU0NfUkVUVVJOX1JFVEFHR0VEX09QRVJBVElPTl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9u
KTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmV0YWdDYWxsVGFy
Z2V0V2l0aFZhbGlkYXRpb24oQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxs
KQoreworICAgIEpTQ19SRVRVUk5fUkVUQUdHRURfQ0FMTF9UQVJHRVRfV0lUSF9WQUxJREFUSU9O
KGNhbGwpOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0
SUNDYWxsVGFyZ2V0KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJldHVy
biByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7
CisgICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8u
bV9zbG93UGF0aENhbGxMb2NhdGlvbjsKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKSB7CisgICAgICAgIEZ1bmN0aW9u
UHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJn
ZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgcmV0dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJs
b2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxU
YXJnZXQoKSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZh
bGlkYXRpb24oY2FsbCk7Cit9CisKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGws
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisjaWYg
RU5BQkxFKEZUTF9KSVQpCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkZUTEpJVCkgeworICAgICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CisgICAgICAgIEZU
TDo6VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRsVGh1bmtzOworICAgICAgICBGdW5jdGlvblB0cjxK
SVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJ
VFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgRlRMOjpTbG93UGF0aENh
bGxLZXkga2V5ID0gdGh1bmtzLmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmsp
OworICAgICAgICBrZXkgPSBrZXkud2l0aENhbGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8SklU
VGh1bmtQdHJUYWc+KHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAg
IFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbi5yZXRh
Z2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOworfQorCitzdGF0aWMgdm9pZCByZXBhdGNoU2xvd1Bh
dGhDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisgICAg
aWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgc3R1YkluZm8ubV9zbG93T3Bl
cmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb24sIG5ld0NhbGxlZUZ1bmN0aW9u
KTsKK30KKworZW51bSBJbmxpbmVDYWNoZUFjdGlvbiB7CisgICAgR2l2ZVVwT25DYWNoZSwKKyAg
ICBSZXRyeUNhY2hlTGF0ZXIsCisgICAgQXR0ZW1wdFRvQ2FjaGUKK307CisKK3N0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxsKFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKKworICAgIFR5cGVJ
bmZvIHR5cGVJbmZvID0gc3RydWN0dXJlLT50eXBlSW5mbygpOworICAgIGlmICh0eXBlSW5mby5w
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSkKKyAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAvLyBGbGF0dGVuaW5nIGNvdWxkIGhhdmUg
Y2hhbmdlZCB0aGUgb2Zmc2V0LCBzbyByZXR1cm4gZWFybHkgZm9yIGFub3RoZXIgdHJ5LgorICAg
ICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgIH0KKyAgICAKKyAgICBpZiAoIXN0cnVjdHVy
ZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKworICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKK30KKworc3RhdGljIGJvb2wg
Zm9yY2VJQ0ZhaWx1cmUoSlNHbG9iYWxPYmplY3QqKQoreworICAgIHJldHVybiBPcHRpb25zOjpm
b3JjZUlDRmFpbHVyZSgpOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGZpcmVXYXRj
aHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCYgcmVz
dWx0KQoreworICAgIGlmIChyZXN1bHQuc2hvdWxkUmVzZXRTdHViQW5kRmlyZVdhdGNocG9pbnRz
KCkpIHsKKyAgICAgICAgcmVzdWx0LmZpcmVXYXRjaHBvaW50cyh2bSk7CisKKyAgICAgICAgewor
ICAgICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jaywgdm0pOworICAgICAgICAgICAgc3R1YkluZm8ucmVzZXQobG9ja2VyLCBjb2RlQmxvY2sp
OworICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQor
eworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpC
eUlkV2l0aFRoaXM6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICBjYXNl
IEdldEJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lQnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZE9w
dGltaXplOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitp
bmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rp
b24oR2V0QnlLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkOworICAgIGNhc2Ug
R2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXM7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25UcnlHZXRCeUlkOworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZERpcmVjdDsKKyAgICBjYXNlIEdldEJ5S2luZDo6
QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWM7CisgICAgY2Fz
ZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZDsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdl
dEJ5S2luZCBraW5kKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52
bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6
IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICAgICAgaWYgKCFiYXNl
VmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgY29uc3Qg
Ym9vbCBpc1ByaXZhdGUgPSBraW5kID09IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUgfHwga2luZCA9
PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2Fz
ZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNl
dAorICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKKyAg
ICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3Ro
KGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgeworCisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJh
eSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5s
aW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
bmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpB
cnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0
cmluZyhiYXNlQ2VsbCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBl
KCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nl
c3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUo
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHlu
YW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgeworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZXJlIHdlcmUgb3ZlcnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBh
cyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2FkISBHdWFyZGluZworICAgICAgICAgICAgICAgIC8vIHRo
aXMgd2l0aCBzdWNoIGEgY2hlY2sgZW5hYmxlcyB1cyB0byBhZGQgYW4gSUMgY2FzZSBmb3IgdGhh
dCBsb2FkIGlmIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJv
ZGVUaGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgsIHBy
b3BlcnR5TmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJn
dW1lbnRzID0ganNEeW5hbWljQ2FzdDxTY29wZWRBcmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7
CisgICAgICAgICAgICAgICAgLy8gRGl0dG8uCisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dHMtPm92ZXJyb2RlVGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRz
TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSAmJiBiYXNlQ2VsbC0+aW5oZXJpdHM8SlNN
b2R1bGVOYW1lc3BhY2VPYmplY3Q+KHZtKSAmJiAhc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvIG1vZHVsZU5hbWVzcGFjZVNsb3QgPSBzbG90Lm1vZHVsZU5hbWVzcGFjZVNs
b3QoKSkKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwganNDYXN0PEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0Kj4oYmFzZUNlbGwpLCBtb2R1bGVOYW1lc3BhY2VTbG90LT5lbnZpcm9ubWVu
dCwgU2NvcGVPZmZzZXQobW9kdWxlTmFtZXNwYWNlU2xvdC0+c2NvcGVPZmZzZXQpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFuZXdDYXNlKSB7CisgICAgICAgICAgICBpZiAo
IXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgICAgIGJvb2wgbG9hZFRhcmdldEZy
b21Qcm94eSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVy
ZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAg
ICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7CisgICAg
ICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICAgICAg
bG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsK
KyAgICAgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3Mu
CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNl
dAorICAgICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAgICAgICAg
ICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQorICAgICAgICAgICAgICAgICYm
ICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYmICFsb2FkVGFy
Z2V0RnJvbVByb3h5KSB7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5l
ID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
IGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBi
YXNlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFw
cHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOworICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBl
QWNjZXNzQ2hhaW47CisKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3Qu
aXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisKKyAgICAg
ICAgICAgIGlmIChzbG90LmlzQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1
ZSkgeworICAgICAgICAgICAgICAgIC8vIFRvIGNhY2hlIHNlbGYgY3VzdG9tcywgd2UgbXVzdCBk
aXNhbGxvdyBkaWN0aW9uYXJpZXMgYmVjYXVzZSB3ZQorICAgICAgICAgICAgICAgIC8vIG5lZWQg
dG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhl
CisgICAgICAgICAgICAgICAgLy8gY29uc3RhbnQgZnVuY3Rpb24gcG9pbnRlci4KKworICAgICAg
ICAgICAgICAgIGlmICghcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIHNsb3Qu
c2xvdEJhc2UoKSwgc2xvdC5zbG90QmFzZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
VW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4o
YmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsg
Ly8gV2UgbWF5IGhhdmUgY2hhbmdlZCBwcm9wZXJ0eSBvZmZzZXRzLgorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSAmJiBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAg
ICAgICAvLyBJZiBhIGtpbmQgaXMgR2V0QnlLaW5kOjpCeUlkRGlyZWN0IG9yIEdldEJ5S2luZDo6
UHJpdmF0ZU5hbWUsIHdlIGRvIG5vdCBuZWVkIHRvIGludmVzdGlnYXRlIHByb3RvdHlwZSBjaGFp
bnMgZnVydGhlci4KKyAgICAgICAgICAgICAgICAvLyBDYWNoZWFiaWxpdHkganVzdCBkZXBlbmRz
IG9uIHRoZSBoZWFkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBHZXRC
eUtpbmQ6OkJ5SWREaXJlY3QgJiYgIWlzUHJpdmF0ZSkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJh
c2VDZWxsLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkgb2Zmc2V0cyBtYXkgaGF2ZSBjaGFuZ2VkIGR1
ZSB0byBmbGF0dGVuaW5nLiBXZSdsbCBjYWNoZSBsYXRlci4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNz
Q2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBl
QWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHBy
b3BlcnR5TmFtZS51aWQoKSkgPT0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBpbnN0ZWFkIGZvciBmYXN0ZXIgYWNjZXNzZXMuCisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlzIGBpZmAgc2hvdWxkIGJlIGluc2lkZSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eUJsYWguCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjE1CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3Mo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICghc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
dG90eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlk
KCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXRDdXN0b20oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS51aWQoKSwgc2xvdC5hdHRyaWJ1
dGVzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGdl
dHRlciA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigp
KQorICAgICAgICAgICAgICAgIGdldHRlciA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZt
LCBzbG90LmdldHRlclNldHRlcigpLT5nZXR0ZXIoKSk7CisKKyAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOworICAgICAgICAgICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LmRvbUF0dHJpYnV0ZSgpKQorICAg
ICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSA9IHNsb3QuZG9tQXR0cmlidXRlKCk7CisKKyAgICAg
ICAgICAgIGlmIChraW5kID09IEdldEJ5S2luZDo6VHJ5QnlJZCkgeworICAgICAgICAgICAgICAg
IEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNl
OjpMb2FkOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQorICAgICAg
ICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHR5
cGUgPSBBY2Nlc3NDYXNlOjpHZXRHZXR0ZXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAg
ICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxv
YWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlw
ZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVBy
b3h5ICYmIGdldHRlciAmJiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmlu
c2ljR2V0dGVyKHN0dWJJbmZvLCBnZXR0ZXIsIHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAg
bmV3Q2FzZSA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBnZXR0ZXIsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc1ByaXZhdGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXNsb3QuaXNVbnNldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3RleHByIGJvb2wgaXNQcm94eSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkxvYWQsIHByb3BlcnR5
TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRp
b25TZXQsIGlzUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFj
Y2Vzc0NoYWluKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKSB8fCBzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNVbnNl
dCgpID8gQWNjZXNzQ2FzZTo6TWlzcyA6IEFjY2Vzc0Nhc2U6OkxvYWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3Rv
dHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICAgICAgICAgICAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
c2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCisg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JH
ZXR0ZXI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZUdldHRlcjsKKworICAgICAgICAgICAgICAg
ICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpcyAmJiB0eXBlID09IEFjY2Vz
c0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyICYmIGRvbUF0dHJpYnV0ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCisgICAgICAgICAgICAg
ICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
ID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KHNsb3QuY3VzdG9tR2V0dGVyKCkp
IDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSAmJiBzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5zbG90QmFzZSgpIDog
bnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSwgV1RGTW92ZShw
cm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNl
LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
cHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOworCisg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUo
bmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewor
ICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZh
bHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5
TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAg
ICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKKyAgICAgICAgICAgIGNhc2Ug
R2V0QnlLaW5kOjpUcnlCeUlkOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJl
Y3Q6CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAg
ICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1
bHQuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdl
dEJ5S2luZDo6QnlWYWw6CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6
CisgICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NO
b3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFs
dWUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCit7Cisg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAorICAg
IGlmICh0cnlDYWNoZUdldEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHBy
b3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVH
ZXRCeUZ1bmN0aW9uKGtpbmQpKTsKK30KKworCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmICghaW5kZXguaXNJbnQzMigpKQor
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgewor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1
ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7
CisgICAgICAgIGlmIChiYXNlLT50eXBlKCkgPT0gRGlyZWN0QXJndW1lbnRzVHlwZSkKKyAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRGlyZWN0QXJndW1lbnRzTG9h
ZDsKKyAgICAgICAgZWxzZSBpZiAoYmFzZS0+dHlwZSgpID09IFNjb3BlZEFyZ3VtZW50c1R5cGUp
CisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFNjb3BlZEFyZ3Vt
ZW50c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTdHJpbmdUeXBlKQor
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOwor
ICAgICAgICBlbHNlIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2
bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlJbnQ4TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheVVpbnQ4TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRMb2FkOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQx
NkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQz
MjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlJbnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMkxvYWQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0lu
dDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICAgICAgY2FzZSBU
eXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9
IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7CisgICAgICAgICAgICBz
d2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyTG9hZDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVMb2Fk
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hh
cGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250
aWd1b3VzTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJy
YXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRBcnJheVN0b3JhZ2VMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFj
Y2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmlj
dCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlw
ZSwgbnVsbHB0cikpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkg
eworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFz
ZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRj
aHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hl
IDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJh
c2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBp
ZiAodHJ5Q2FjaGVBcnJheUdldEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBp
bmRleCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKK30K
Kworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmlj
UHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRC
eUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAg
IGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAg
ICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3Ry
aWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Q7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7
CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAg
ICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdDsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQ
dXRCeUtpbmQ6OkJ5VmFsOiB7CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVy
aWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmlj
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdEdlbmVyaWM7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdl
bmVyaWM7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAg
ICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYzsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIg
aGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCitzdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0
ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0
QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIHN3aXRjaCAocHV0QnlL
aW5kKSB7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHN3aXRjaCAocHV0S2lu
ZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChz
bG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAg
ICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIEFTU0VSVChzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5l
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkp
OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFB1dEJ5S2lu
ZDo6QnlWYWw6CisgICAgICAgIHN3aXRjaCAocHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RN
b2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmll
bGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgLy8gTWFrZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAg
ICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1l
LnVpZCgpKTsKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZv
cmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgCisgICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIXNsb3Qu
aXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmICFzbG90Lmlz
Q2FjaGVhYmxlU2V0dGVyKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byBkbyBzb21ldGhpbmcgc21hcnRlciBo
ZXJlLi4uCisgICAgICAgIGlmIChpc0NvcHlPbldyaXRlKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdN
b2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIC8vIFdl
IGNhbid0IGVuZCB1cCBzdG9yaW5nIHRvIGEgQ29XIG9uIHRoZSBwcm90b3R5cGUgc2luY2UgaXQg
c2hvdWxkbid0IG93biBwcm9wZXJ0aWVzLgorICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUo
c2xvdC5iYXNlKCktPmluZGV4aW5nTW9kZSgpKSk7CisKKyAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1
cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworCisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXND
ZWxsKCk7CisKKyAgICAgICAgYm9vbCBpc1Byb3h5ID0gZmFsc2U7CisgICAgICAgIGlmIChiYXNl
Q2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICBi
YXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQoKTsKKyAgICAgICAg
ICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxsOworICAgICAgICAgICAgaXNQcm94eSA9IHRydWU7CisK
KyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1
c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHkuIFdlIGRvbid0CisgICAgICAgICAgICAvLyBjYWNoZSB0
cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2JhbCBvYmplY3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNh
bWUgc3RydWN0dXJlCisgICAgICAgICAgICAvLyBpbiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgICAgIGJvb2wgaXNDYWNoZWFibGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxl
UHV0KCkgJiYgc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5
KQorICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKQorICAgICAgICAg
ICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKTsKKyAgICAgICAgICAgIGlmICghaXND
YWNoZWFibGVQcm94eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChpc1Byb3h5ICYmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZFNldCB8fCBwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVG
aWVsZERlZmluZSkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAg
ICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAoc2xvdC5iYXNlKCkg
PT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgeworICAgICAgICAgICAgaWYg
KHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0IGhlbHBzIGNhdGNoIGJ1Z3MgaWYgd2UgYWNjaWRl
bnRhbGx5IGZvcmdldCB0byBkaXNhYmxlIGNhY2hpbmcKKyAgICAgICAgICAgICAgICAvLyB3aGVu
IHdlIHRyYW5zaXRpb24gdGhlbiBzdG9yZSB0byBhbiBleGlzdGluZyBwcm9wZXJ0eS4gVGhpcyBp
cyBjb21tb24gYW1vbmcKKyAgICAgICAgICAgICAgICAvLyBwYXRocyB0aGF0IHJlaWZ5IGxhenkg
cHJvcGVydGllcy4gSWYgd2UgcmVpZnkgYSBsYXp5IHByb3BlcnR5IGFuZCBmb3JnZXQKKyAgICAg
ICAgICAgICAgICAvLyB0byBkaXNhYmxlIGNhY2hpbmcsIHdlIG1heSBjb21lIGRvd24gdGhpcyBw
YXRoLiBUaGUgUmVwbGFjZSBJQyBkb2VzIG5vdAorICAgICAgICAgICAgICAgIC8vIGtub3cgaG93
IHRvIG1vZGVsIHRoZXNlIHR5cGVzIG9mIHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAob3IgYW55IHN0
cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gZm9yIHRoYXQgbWF0dGVyKS4K
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSh2bSkgPT0gb2xkU3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVy
ZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9
PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6
Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICAgICAmJiAhaXNQ
cm94eSkgeworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9s
ZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRC
eUtpbmQsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQ
dXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVCbG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6UmVwbGFjZSwgcHJvcGVydHlOYW1lLCBzbG90
LmNhY2hlZE9mZnNldCgpLCBvbGRTdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
KCksIGlzUHJveHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIWlzUHJveHkpOworICAgICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQ
cm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKKworICAgICAgICAgICAgICAgIGlmICghb2xkU3Ry
dWN0dXJlLT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvbGQgc3RydWN0dXJlIGlzIGRpY3Rp
b25hcnksIGl0IG1lYW5zIHRoYXQgdGhpcyBpcyBvbmUtb24tb25lIGJldHdlZW4gYW4gb2JqZWN0
IGFuZCBhIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIE5ld1Byb3Bl
cnR5IG9wZXJhdGlvbiwgZ2VuZXJhdGluZyBJQyBmb3IgdGhpcyBkb2VzIG5vdCBvZmZlciBhbnkg
YmVuZWZpdCBiZWNhdXNlIHRoaXMgdHJhbnNpdGlvbiBuZXZlciBoYXBwZW5zIGFnYWluLgorICAg
ICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
Q29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpLCBvZmZzZXQpOworICAgICAgICAgICAgICAg
IGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisK
KyAgICAgICAgICAgICAgICAvLyBJZiBKU09iamVjdDo6cHV0IGlzIG92ZXJyaWRkZW4gYnkgVXNl
ck9iamVjdCwgVXNlck9iamVjdDo6cHV0IHBlcmZvcm1zIHNpZGUtZWZmZWN0IG9uIEpTT2JqZWN0
OjpwdXQsIGFuZCBpdCBuZWdsZWN0cyB0byBtYXJrIHRoZSBQdXRQcm9wZXJ0eVNsb3QgYXMgbm9u
LWNhY2hhZWJsZSwKKyAgICAgICAgICAgICAgICAvLyB0aGVuIGFyYml0cmFyeSBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbnMgY2FuIGhhcHBlbiBkdXJpbmcgdGhlIHB1dCBvcGVyYXRpb24sIGFuZCB0aGlz
IGdlbmVyYXRlcyB3cm9uZyB0cmFuc2l0aW9uIGluZm9ybWF0aW9uIGhlcmUgYXMgaWYgb2xkU3Ry
dWN0dXJlIC0+IG5ld1N0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAvLyBJbiByZWFsaXR5LCB0
aGUgdHJhbnNpdGlvbiBpcyBvbGRTdHJ1Y3R1cmUgLT4gc29tZXRoaW5nIHVua25vd24gc3RydWN0
dXJlcyAtPiBiYXNlVmFsdWUncyBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gVG8gZ3Vh
cmQgYWdhaW5zdCB0aGUgZW1iZWRkZXIncyBwb3RlbnRpYWxseSBpbmNvcnJlY3QgVXNlck9iamVj
dDo6cHV0IGltcGxlbWVudGF0aW9uLCB3ZSBzaG91bGQgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9u
IGFuZCBpZiBmb3VuZCwgYW5kIGdpdmUgdXAgb24gY2FjaGluZyB0aGUgcHV0LgorICAgICAgICAg
ICAgICAgIEFTU0VSVChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gbmV3U3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUodm0pICE9IG5ld1N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91
c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1
cmUtPmlzT2JqZWN0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJlZlB0
cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47CisgICAgICAgICAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAg
ICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtpbmQ6Ok5vdERpcmVjdCkgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxP
YmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNo
ZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9B
Y2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vz
c0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwg
aWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmlu
ZSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnQuaXNQcml2YXRlTmFtZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlNaXNzKHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBp
ZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
Y3JlYXRlVHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgb2xk
U3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbiksIHN0dWJJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7
CisgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpKSB7CisgICAgICAgICAg
ICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OworICAgICAgICAg
ICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47
CisKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZSBh
IHNlbGYgY3VzdG9tLCBzaW5jZSB3ZSBtdXN0IGRpc2FsbG93IGRpY3Rpb25hcmllcworICAgICAg
ICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9t
IGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNoZSB0aGUgY29uc3RhbnQKKyAgICAgICAgICAgICAgICAv
LyBmdW5jdGlvbiBwb2ludGVyLgorICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBw
cmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgIGlmIChzbG90LmJhc2Uo
KSAhPSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51
c2VzUG9seVByb3RvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3ND
aGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNl
Q2VsbCwgc2xvdC5iYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5
cGVBY2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssIHNsb3QuaXNDdXN0b21BY2Nlc3NvcigpID8gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNz
b3JTZXR0ZXIgOiBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlciwgb2xkU3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgIGludmFsaWRPZmZzZXQsIGNvbmRpdGlv
blNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHksIHNsb3QuY3VzdG9t
U2V0dGVyKCkucmV0YWdnZWQ8Q3VzdG9tQWNjZXNzb3JQdHJUYWc+KCksIHNsb3QuYmFzZSgpICE9
IGJhc2VWYWx1ZSA/IHNsb3QuYmFzZSgpIDogbnVsbHB0cik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEFTU0VSVChzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpOworICAg
ICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZh
bHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hh
aW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+
dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNz
Q2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFz
ZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90
eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNs
b3RCYXNlU3RydWN0dXJlKHZtLCBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKSktPmdldCh2bSwgaWRl
bnQuaW1wbCgpLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpIHx8ICEoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpB
Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9i
amVjdCwgb2xkU3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEoY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkuYXR0cmlidXRl
cygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBu
ZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3ND
aGFpbiksIGlzUHJveHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgCisgICAgICAg
IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNv
ZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUoKSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFN
b2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAg
ICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygo
SUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisKKyAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRl
ZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQu
c2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQor
Cit2b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQs
IFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CisgICAgCisgICAgaWYgKHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0
dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmlj
UHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKK30KKworc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCkKK3sKKyAgICBp
ZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisK
KyAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOworCisgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZTsKKyAgICAgICAgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZt
KS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQ4Ogor
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJh
eUludDhTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlw
ZVVpbnQ4OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheVVpbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkU3RvcmU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAgICAg
ICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQxNlN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBl
SW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5SW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlw
ZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQzMlN0b3JlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3Rv
cmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1p
emUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCisgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgICAg
ICBjYXNlIFR5cGVCaWdJbnQ2NDoKKyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKKyAgICAg
ICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMlNo
YXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50
MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91Ymxl
U2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRE
b3VibGVTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29u
dGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQ29udGlndW91c1N0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZVN0b3JlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOworCisgICAg
ICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVs
bCh2bSksIElkZW50aWZpZXIoKSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBz
dHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2
ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJl
cGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKK3sKKyAg
ICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNl
LCBpbmRleCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5k
OjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykpOworfQorCitzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIg
cHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNN
QU1vZGUgZWNtYU1vZGUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworCisgICAgeworICAgICAgICBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3Qt
PnZtKCkpOworCisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgQVNTRVJUKG9sZFN0cnVj
dHVyZSk7CisgICAgICAgIGlmICghYmFzZVZhbHVlLmlzT2JqZWN0KCkgfHwgIW9sZFN0cnVjdHVy
ZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG9sZFN0cnVjdHVyZS0+aXNQcm94
eSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlRGVsZXRlKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKworICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0
aW9uYXJ5KCkpIHsKKyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsdWUpLT5m
bGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CisgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNo
ZUxhdGVyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworCisgICAgICAgIFJl
ZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworCisgICAgICAgIGlmIChzbG90LmlzRGVsZXRlSGl0
KCkpIHsKKyAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IGludmFsaWRPZmZz
ZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9s
ZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpLCBuZXdPZmZzZXQpOworICAgICAgICAgICAg
aWYgKCFuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRl
cjsKKyAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2Fj
aGVhYmxlKCkgfHwgbmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdPZmZzZXQgPT0g
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5w
cmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRp
b24pOworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChuZXdPZmZzZXQpKTsKKyAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVEZWxldGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlO
YW1lLCBuZXdPZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgfSBl
bHNlIGlmIChzbG90LmlzTm9uY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChlY21h
TW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6OkRlbGV0ZU5vbkNvbmZpZ3VyYWJsZSwgcHJvcGVydHlOYW1lLCBpbnZhbGlk
T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpEZWxldGVNaXNzLCBwcm9wZXJ0eU5hbWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVj
dHVyZSwgeyB9LCBudWxscHRyKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGVjbWFNb2RlLCBwcm9wZXJ0
eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVk
U29tZUNvZGUoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7
CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRT
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJ
bkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwg
c3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxk
R2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lk
IHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1l
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kLCBFQ01BTW9kZSBl
Y21hTW9kZSkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxz
ZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKHRyeUNhY2hl
RGVsZXRlQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QsIGJhc2VWYWx1ZSwgb2xkU3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLCBraW5kLCBlY21hTW9kZSkgPT0gR2l2ZVVw
T25DYWNoZSkgeworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhHZW5l
cmljLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKKyAgICAgICAgaWYgKGtp
bmQgPT0gRGVsQnlLaW5kOjpCeUlkKQorICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlkR2VuZXJpYyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uRGVsZXRlQnlWYWxHZW5lcmljKTsKKyAgICB9Cit9CisKK2lubGluZSBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlv
bihJbkJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtp
bmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICBj
YXNlIEluQnlLaW5kOjpCeVZhbDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZTsKKyAgICBjYXNlIEluQnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQoreworICAgIHN3
aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25JbkJ5SWRHZW5lcmljOworICAgIGNhc2UgSW5CeUtpbmQ6OkJ5VmFsOgorICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uSW5CeVZhbEdlbmVyaWM7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJp
dmF0ZU5hbWU6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFtZUdlbmVyaWM7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKKyAgICBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21V
aWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYg
KGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIGlmICghYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8ICghd2FzRm91bmQgJiYgIWJhc2UtPnN0cnVj
dHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGVGb3JBYnNlbmNlKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAod2Fz
Rm91bmQpIHsKKyAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIAor
ICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWlu
OworICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAg
ICAgIGlmICh3YXNGb3VuZCkgeworICAgICAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9u
ID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0
dGVtcHRUb0NhY2hlKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAg
ICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNh
Y2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90Lmlz
Q2FjaGVhYmxlVmFsdWUoKQorICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBi
YXNlCisgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCisgICAgICAgICAg
ICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Cisg
ICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJbkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGlu
ZyhnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOworICAgICAgICAgICAgICAgIGlmICghY2FjaGVT
dGF0dXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgIGlm
IChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICBwcm90
b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFs
T2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVB
Y2Nlc3NDaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3Vz
dG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1
Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBz
bG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zm
c2V0KCkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9
IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBudWxscHRyKTsKKyAg
ICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykg
eworICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNz
Q2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOworICAgICAgICAgICAg
ICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw
cm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAg
ICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vz
c0Nhc2U6OkluTWlzcywgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCA/IHNsb3QuY2FjaGVkT2Zmc2V0
KCkgOiBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90
b3R5cGVBY2Nlc3NDaGFpbikpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vz
c0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgp
LCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQu
Z2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJl
cGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJh
c2UoKSA9PSBiYXNlKSk7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2Rl
KCkpOworICAgICAgICAgICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgICAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5j
b2RlKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVh
clN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAg
ICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5
Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkK
K3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKHRyeUNhY2hlSW5CeShnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCwg
c2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZU9iamVjdC0+Y2xhc3NJbmZvKGds
b2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpKTsKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oa2luZCkpOworICAgIH0KK30KKworc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElELnVpZCgpKTsKKworICAgIHsKKyAgICAgICAg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwor
ICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFz
ZS0+c3RydWN0dXJlKHZtKTsKKworICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBh
Y3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9D
YWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgYm9vbCBpc0Jhc2VQ
cm9wZXJ0eSA9IHRydWU7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNl
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAg
ICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29k
ZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNz
LCBicmFuZElELCBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIHsgfSwgeyB9KTsKKworICAgICAg
ICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7
CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRl
ZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQu
c2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQor
Cit2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJ
ZGVudGlmaWVyIGJyYW5kSUQsIGJvb2wgd2FzRm91bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CisKKyAgICBpZiAodHJ5Q2FjaGVIYXNQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHdhc0ZvdW5kLCBzdHViSW5mbykgPT0gR2l2ZVVwT25D
YWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRHZW5lcmljKTsKK30KKworc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlQ2hlY2tQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIGJyYW5kSUQsCisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNl
SUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7
CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwg
YmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAg
ICByZXR1cm4gYWN0aW9uOworCisgICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOwor
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAg
ICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVDaGVja1ByaXZh
dGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElELCBzdHJ1Y3R1cmUpOworCisgICAgICAgIHJl
c3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKwor
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6Q2hlY2tQcml2YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOworCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5j
b2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFy
U3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOworCisgICAgcmV0
dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hl
TGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVj
dCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwor
CisgICAgaWYgKHRyeUNhY2hlQ2hlY2tQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNo
ZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVNldFByaXZhdGVCcmFuZCgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsCisgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7CisgICAgICAgIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAg
ICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUp
OworCisgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBh
Y3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKKyAgICAgICAgaWYgKGFjdGlvbiAhPSBB
dHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisgICAgICAgIAorICAg
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6c2V0QnJhbmRUcmFuc2l0
aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgYnJhbmRJ
RC51aWQoKSk7CisgICAgICAgIGlmICghbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgaWYgKG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VS
VChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlNldEJy
YW5kKTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgICAg
IAorICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpTZXRQcml2YXRlQnJhbmRBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2Fz
ZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVNldFByaXZhdGVCcmFuZCh2bSwgY29kZUJs
b2NrLCBicmFuZElELCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7CisKKyAgICAgICAgcmVz
dWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJs
b2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOworCisg
ICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElu
bGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpcmVXYXRjaHBv
aW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQp
OworICAgIAorICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNh
Y2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hl
U2V0UHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRT
dHJ1Y3R1cmUsICBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2
YXRlQnJhbmRHZW5lcmljKTsKK30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
SW5zdGFuY2VPZigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisgICAgYm9vbCB3YXNGb3VuZCkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBy
ZXN1bHQ7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQodmFsdWVWYWx1ZS5pc0NlbGwoKSk7IC8v
IHNob3VsZENvbnNpZGVyQ2FjaGluZyByZWplY3RzIG5vbi1jZWxscy4KKyAgICAKKyAgICBpZiAo
Zm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgCisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAgICAgIAorICAgICAgICBKU0NlbGwqIHZhbHVl
ID0gdmFsdWVWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2
YWx1ZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7
CisgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4o
dm0sIHByb3RvdHlwZVZhbHVlKTsKKyAgICAgICAgaWYgKHByb3RvdHlwZSkgeworICAgICAgICAg
ICAgaWYgKCFqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5jZU9mQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlzcywgc3Ry
dWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJ1Y3R1cmUtPnByb3RvdHlw
ZVF1ZXJpZXNBcmVDYWNoZWFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUZWFj
aCB0aGlzIHRvIGRvIHBvbHkgcHJvdG8uCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTY2MworICAgICAgICAgICAgICAgIHByZXBh
cmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgd2FzRm91bmQgPyBwcm90b3R5
cGUgOiBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9mKAorICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJv
dG90eXBlLCB3YXNGb3VuZCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vz
c0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssCisg
ICAgICAgICAgICAgICAgICAgICAgICB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZI
aXQgOiBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBwcm90b3R5cGUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFuZXdDYXNl
KQorICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2Nr
LCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2VuZXJpYywgQ2FjaGVhYmxlSWRlbnRpZmllcigpKTsK
KyAgICAgICAgCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5zdGFuY2VPZkFkZEFjY2Vzc0Nh
c2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIoKSkpOworICAgICAgICAKKyAg
ICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIsIFdURk1vdmUobmV3Q2Fz
ZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7
CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZSZXBsYWNlV2l0aEp1bXAs
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXIoKSkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElu
bGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBmaXJlV2F0
Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVz
dWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVw
T25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoSW5zdGFuY2VPZigK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sCisgICAgYm9vbCB3YXNGb3VuZCkKK3sKKyAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgaWYgKHRyeUNhY2hlSW5zdGFuY2VP
ZihnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgdmFsdWVWYWx1ZSwgcHJvdG90eXBlVmFsdWUsIHN0
dWJJbmZvLCB3YXNGb3VuZCkgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7
Cit9CisKK3ZvaWQgbGlua0RpcmVjdENhbGwoCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBB
U1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOworICAgIAorICAgIENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIFZNJiB2bSA9IGNhbGxl
ckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtl
ZCgpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ss
IGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNhbGxlZUNvZGVCbG9jaykpOworICAgIGlmIChz
aG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKKyAgICAgICAgZGF0YUxv
ZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2Fs
bExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJs
b2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKKworICAgIGNhbGxMaW5r
SW5mby5zZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
KGNvZGVQdHIpKTsKKworICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNv
ZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0luZm8pOworfQor
Cit2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykKK3sKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gY2FsbGVyQ29kZUJs
b2NrLT52bSgpOworICAgIAorICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOworfQor
CitzdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIENvZGVCbG9jayogY2FsbGVyQ29k
ZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworCisgICAgZGF0YUxvZ0xuSWYoc2hv
dWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jayksCisgICAgICAgICJMaW5raW5n
IHZpcnR1YWwgY2FsbCBhdCAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxl
ckZyYW1lLT5jb2RlT3JpZ2luKCkpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2Fs
bExpbmtJbmZvLmNhbGxNb2RlKCkpOworICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywg
dmlydHVhbFRodW5rKTsKKyAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwor
fQorCituYW1lc3BhY2Ugeworc3RydWN0IENhbGxUb0NvZGVQdHIgeworICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyOworfTsKK30gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsaW5rUG9seW1v
cnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKTsKKworICAg
IENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBv
ZiBsaW5rUG9seW1vcnBoaWNDYWxsLCB3ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBk
byBHQy4KKyAgICAvLyBHQyBqZXR0aXNvbnMgQ29kZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0lu
Zm8gZXRjLiBhbmQgYnJlYWtzIGFzc3VtcHRpb24gZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMg
Y2FsbC4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUodm0pOworICAgIAor
ICAgIGlmICghbmV3VmFyaWFudCkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZy
YW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3Vy
IGNhbGxlciBtdXN0IGJlIGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCisg
ICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAg
ICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKKworICAgIENvZGVCbG9j
ayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgIGJvb2wg
aXNXZWJBc3NlbWJseSA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgp
LmFzQ2VsbCgpKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUg
YSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3
ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJD
b2RlQmxvY2s7CisgICAgQVNTRVJUKG93bmVyKTsKKworICAgIENhbGxWYXJpYW50TGlzdCBsaXN0
OworICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5m
by5zdHViKCkpCisgICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOworICAgIGVsc2UgaWYg
KEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCisgICAgICAgIGxp
c3QgPSBDYWxsVmFyaWFudExpc3QgeyBDYWxsVmFyaWFudChvbGRDYWxsZWUpIH07CisgICAgCisg
ICAgbGlzdCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7CisKKyAg
ICAvLyBJZiB0aGVyZSBhcmUgYW55IGNsb3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0
byB0cmVhdCBhbGwgb2YgdGhlbSBhcyBjbG9zdXJlIGNhbGxzLgorICAgIC8vIFRoaXMgbWFrZXMg
c3dpdGNoaW5nIG9uIGNhbGxlZSBjaGVhcGVyLiBJdCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0
aGF0J3MgZWFzaWVyIG9uIHRoZSBERkc7CisgICAgLy8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3
YW50IHRvIGRlYWwgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJl
IGNhbGxlZXMuCisgICAgYm9vbCBpc0Nsb3N1cmVDYWxsID0gZmFsc2U7CisgICAgZm9yIChDYWxs
VmFyaWFudCB2YXJpYW50IDogbGlzdCkgIHsKKyAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJl
Q2FsbCgpKSB7CisgICAgICAgICAgICBsaXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0
KTsKKyAgICAgICAgICAgIGlzQ2xvc3VyZUNhbGwgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGlzQ2xvc3VyZUNhbGwpCisgICAgICAg
IGNhbGxMaW5rSW5mby5zZXRIYXNTZWVuQ2xvc3VyZSgpOworICAgIAorICAgIFZlY3RvcjxQb2x5
bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7CisgICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1
ZXM7CisgICAgCisgICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCisgICAgZm9y
IChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG51bGxwdHI7CisgICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFy
aWFudC5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlID0gdmFyaWFudC5leGVjdXRhYmxlKCk7CisgICAgICAgICAg
ICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNv
ZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBj
YWxsZWUsIGVpdGhlciBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVz
ZSBhcml0eSBtaXNtYXRjaCwKKyAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVy
IGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEgdmlydHVhbCBjYWxsLgorICAgICAgICAgICAg
aWYgKCFjb2RlQmxvY2sgfHwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2Fs
bExpbmtJbmZvLmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Io
dm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9
IDA7CisgICAgICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgICAgICBuZXdDYXNlVmFs
dWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVu
Y3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5MzExCisgICAgICAgICAgICBpZiAoIW5ld0Nhc2VW
YWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkKKyAgICAgICAg
ICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICAgICAgaWYgKGNhc2VWYWx1
ZXMuY29udGFpbnMobmV3Q2FzZVZhbHVlKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkVS
Uk9SOiBBdHRlbXB0IHRvIGFkZCBkdXBsaWNhdGUgY2FzZSB2YWx1ZS5cbiIpOworICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkV4aXN0aW5nIGNhc2UgdmFsdWVzOiAiKTsKKyAgICAgICAgICAgICAg
ICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IGNhc2VWYWx1ZXMpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2co
IkF0dGVtcHRpbmcgdG8gYWRkOiAiLCBuZXdDYXNlVmFsdWUsICJcbiIpOworICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlZhcmlhbnQgbGlzdDogIiwgbGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWND
YWxsQ2FzZSh2YXJpYW50LCBjb2RlQmxvY2spKTsKKyAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQo
bmV3Q2FzZVZhbHVlKTsKKyAgICB9CisgICAgQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2Fz
ZVZhbHVlcy5zaXplKCkpOworCisgICAgLy8gSWYgd2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0
IHVzZSBhIG5vcm1hbCB2aXJ0dWFsIGNhbGwuCisgICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWND
YWxsVmFyaWFudExpc3RTaXplOworICAgIGlmIChpc1dlYkFzc2VtYmx5KQorICAgICAgICBtYXhQ
b2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0Nh
bGxWYXJpYW50TGlzdFNpemVGb3JXZWJBc3NlbWJseVRvSlMoKTsKKyAgICBlbHNlIGlmIChjYWxs
ZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCisgICAgICAg
IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3Jw
aGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZvclRvcFRpZXIoKTsKKyAgICBlbHNlCisgICAgICAgIG1h
eFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGlj
Q2FsbFZhcmlhbnRMaXN0U2l6ZSgpOworCisgICAgLy8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3Rl
YWQgb2YgY2FsbENhc2VzLnNpemUoKSBiZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6
ZSBmb3Igbm93LgorICAgIGlmIChsaXN0LnNpemUoKSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlh
bnRMaXN0U2l6ZSkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxs
TGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPENhbGxUb0Nv
ZGVQdHI+IGNhbGxzKGNhbGxDYXNlcy5zaXplKCkpOworICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90
PiBmYXN0Q291bnRzOworCisgICAgaWYgKCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9j
ay0+aml0VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkgeworICAgICAgICBmYXN0Q291
bnRzID0gbWFrZVVuaXF1ZUFycmF5PHVpbnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICAg
ICAgbWVtc2V0KGZhc3RDb3VudHMuZ2V0KCksIDAsIGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5r
SW5mby5jYWxsZWVHUFIoKTsKKworICAgIGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNE
YXRhSUMoKTsKKyAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdChjYWxsZXJDb2RlQmxvY2spOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOworICAg
IGlmIChjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKSB7CisgICAgICAgIEFTU0VSVChj
YWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VV
bmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVm
ZmxlRGF0YSgpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAvLyBXZSB3b3VsZCBo
YXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2Fu
CisgICAgICAgIC8vIHVzZSB0aGUgYWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCisg
ICAgICAgIGZyYW1lU2h1ZmZsZXItPmFzc3VtZUNhbGxlZUlzQ2VsbCgpOworI2VuZGlmCisgICAg
ICAgIGZyYW1lU2h1ZmZsZXItPmxvY2tHUFIoY2FsbGVlR1BSKTsKKyAgICB9CisKKyAgICBHUFJS
ZWcgY29tcGFyaXNvblZhbHVlR1BSOworICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAg
IGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJh
bWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
YXJpc29uVmFsdWVHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVl
R1BSKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BS
OworCisgICAgR1BSUmVnIGZhc3RDb3VudHNCYXNlR1BSOworICAgIGlmIChmcmFtZVNodWZmbGVy
KQorICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIo
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPQorICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZh
bHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgfQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BS
KTsKKworICAgIGlmICghZnJhbWVTaHVmZmxlciAmJiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgp
KSB7CisgICAgICAgIC8vIFdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3Qg
YSBjYWxsZWUgc2F2ZSByZWdpc3RlciBpbiB0aGUgc2xvdyBwYXRoLgorICAgICAgICBBU1NFUlQo
IWNhbGxlckNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikp
OworICAgICAgICBzdHViSml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICB9CisKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIGlmIChpc0Nsb3N1cmVDYWxs
KSB7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2gg
dGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lz
dGVycykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1Ykpp
dC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSKSk7CisjZWxzZQorICAgICAgICAvLyBXZSB3b3Vs
ZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorI2VuZGlm
CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFs
RnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNhbGwuCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHVi
Sml0LmJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlR1BSKSk7CisKKyAgICAgICAgc3R1YkppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIGNvbXBhcmlzb25WYWx1ZUdQUik7CisgICAgICAg
IGF1dG8gaGFzRXhlY3V0YWJsZSA9IHN0dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6
Olplcm8sIGNvbXBhcmlzb25WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjb21wYXJpc29uVmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFs
dWVHUFIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJnN0dWJKaXQpOworICAgIH0KKwor
ICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFs
dWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBk
b25lOworICAgIHdoaWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkgeworICAgICAg
ICBzaXplX3QgY2FzZUluZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOworICAgICAgICAK
KyAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlh
bnQoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOworICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2
bSwgY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkp
OworICAgICAgICAgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2
YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0Zv
ckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7CisgICAgICAgICAgICBjb2Rl
UHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZmFzdENvdW50cykgeworICAgICAg
ICAgICAgc3R1YkppdC5hZGQzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENv
dW50c0Jhc2VHUFIsIGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgbmVlZHNEb25lSnVtcCA9IGZhbHNlOworICAgICAgICBpZiAoZnJhbWVT
aHVmZmxlcikgeworICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVT
aHVmZmxlci0+c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBj
YWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9
IGVsc2UgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJK
aXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4
XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChpc0RhdGFJQykKKyAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNh
bGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAg
ICAgICAgICAgICAgIG5lZWRzRG9uZUp1bXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7CisgICAgICAg
IGlmIChuZWVkc0RvbmVKdW1wKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKKyAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICBiaW5hcnlTd2l0Y2guZmFs
bFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKKworICAgIGlmIChmcmFtZVNodWZmbGVyKSB7Cisg
ICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKKyAgICAgICAgZnJh
bWVTaHVmZmxlci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOworICAgICAgICBmcmFt
ZVNodWZmbGVyLT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1Zh
bHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKKyNlbHNlCisgICAgICAg
IGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86
OnJlZ1QwKSk7CisjZW5kaWYKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQ
YXRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BS
SW5mbzo6cmVnVDApOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0dWJKaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6
cmVnVDEpOworI2VuZGlmCisgICAgfQorICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86
OnJlZ1QyKTsKKworICAgIC8vIDEuIElmIGl0IGlzIG5vdCBEYXRhSUMsIGxpbmtSZWdpc3RlciBp
cyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbi4KKyAgICAvLyAyLiBJZiBpdCBpcyB0YWls
LWNhbGwsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbiBmb3Ig
c2xvdy1jYWxsIGNhc2UuCisgICAgLy8gVGh1cyB3ZSBuZWVkIHRvIHB1dCBpdCBmb3IgdGhlIHNs
b3ctcGF0aCBjYWxsLgorICAgIGlmICghaXNEYXRhSUMpIHsKKyAgICAgICAgc3R1YkppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCku
dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoaXNEYXRhSUMpOworICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih2bS5nZXRDVElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2Vs
aW5lR2VuZXJhdG9yKS5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5m
bzo6cmVnVDQpOworICAgICAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBc3NlbWJs
eUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJ
bmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAocGF0Y2hCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZy
YW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3Ig
KENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7CisjaWYgQ1BVKEFSTV9USFVN
QjIpCisgICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBs
aW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJl
c3MKKyAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3Jt
YWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KKyAg
ICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2Fs
bEhlbHBlcnM6OkNhbGw6OlRhaWwpOworICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxs
ID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5j
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJn
ZXQpKSk7CisjZWxzZQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2Fs
bCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIWRvbmUuZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQo
IWlzRGF0YUlDKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8u
ZG9uZUxvY2F0aW9uKCkpOworICAgIH0KKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgCisgICAgYXV0byBzdHViUm91dGlu
ZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgICAgIEZJ
TkFMSVpFX0NPREVfRk9SKAorICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKKyAgICAgICAgICAgICAg
ICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJs
b2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVz
cygpLAorICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRh
KCkpLAorICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExp
bmtJbmZvLCBjYWxsQ2FzZXMsCisgICAgICAgIFdURk1vdmUoZmFzdENvdW50cykpKTsKKworICAg
IC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0
IHN0aWxsCisgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxs
ZWUgd2lsbCBhbHdheXMKKyAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKKyAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKworICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJl
dmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBy
dW5zIGFuZCBzZWVzCisgICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4KKyAgICBj
YWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5lKSk7CisgICAgCisgICAgLy8g
VGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMgYSBjYWxsIGNhY2hlIGFwYXJ0IGZyb20g
dGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwKKyAgICAvLyBzdHViLgorICAgIGlmIChj
YWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwor
fQorCit2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9u
KGtpbmQpKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoK
KyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgIGNhc2UgR2V0QnlLaW5kOjpU
cnlCeUlkOgorICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgIGNhc2UgR2V0QnlL
aW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNK
dW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR2V0QnlLaW5kOjpCeVZhbDoKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Cisg
ICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
Cit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCit7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlw
ZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rp
b25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlw
ZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAg
ICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbERl
ZmluZVByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU2V0
UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RH
ZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFz
SnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQpCit7Cisg
ICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7Cisg
ICAgZWxzZQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOworICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
KTsKK30KKwordm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlv
bihraW5kKSk7CisgICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgIElubGlu
ZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cisg
ICAgZWxzZQorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRI
YXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOworICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKK30KKwordm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3Zv
aWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzYTAzNjUzMjZh
YmZiZWRlZTA1NzU4OWM0NTQwOWIyZWIzNjU4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJDYWxsVmFy
aWFudC5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFN0cnVjdHVyZVN0dWJJbmZvOworCitlbnVtIGNsYXNzIEdldEJ5S2luZCB7CisgICAgQnlJZCwK
KyAgICBCeVZhbCwKKyAgICBUcnlCeUlkLAorICAgIEJ5SWRXaXRoVGhpcywKKyAgICBCeUlkRGly
ZWN0LAorICAgIFByaXZhdGVOYW1lLAorICAgIFByaXZhdGVOYW1lQnlJZCwKK307CisKK2VudW0g
Y2xhc3MgUHV0QnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKworZW51bSBjbGFz
cyBEZWxCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwKK307CisKK2VudW0gY2xhc3MgSW5C
eUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCisgICAgUHJpdmF0ZU5hbWUKK307CisKK3Zv
aWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0
Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlL
aW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7
Cit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0
ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7Cit2b2lkIHJlcGF0Y2hJ
bkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9i
amVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3
YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVC
cmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFu
ZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVwYXRjaEluc3Rh
bmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVl
IHByb3RvdHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsKK3ZvaWQgbGlu
a01vbm9tb3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9j
ayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
Pik7Cit2b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVC
bG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtT
bG93Rm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwordm9pZCB1bmxpbmtDYWxsKFZNJiwg
Q2FsbExpbmtJbmZvJik7Cit2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7Cit2b2lkIHJlc2V0R2V0
QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwordm9pZCByZXNl
dFB1dEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKK3ZvaWQg
cmVzZXREZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7Cit2
b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsK
K3ZvaWQgcmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKK3ZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
Cit2b2lkIHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKK3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVM
b2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pOworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmpl
Y3QqIGNhbGxlZSk7CisKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlZmU3YjFiMzM3
NjRiZGY0MmIyZTRmMDJkNGRmMGNkOWU4MWM0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApAQCAtMCwwICsxLDIxNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiUmVwYXRjaC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGNhbGxlZUZy
YW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CisKKyAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVj
aWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICBhdXRvIGNhbGxEYXRh
ID0gZ2V0Q2FsbERhdGEodm0sIGNhbGxlZSk7CisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBl
ICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7CisKKyAgICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0g
Q2FsbERhdGE6OlR5cGU6Ok5hdGl2ZSkgeworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOworICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNl
dENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2Fs
bFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSkt
Pmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIERpc2FsbG93R0Mg
ZGlzYWxsb3dHQzsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAg
ICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBlbmNvZGVSZXN1bHQoCisgICAgICAgICAgICAgICAgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJu
VmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09
IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5v
bmUpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVO
b3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICByZXR1cm4g
ZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
Y2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KTsK
KworICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNhbGxlZSk7
CisgICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOwor
CisgICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7
CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsK
KyAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAg
ICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5m
dW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7
CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAg
ICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOworICAgIH0KKworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERh
dGE6OlR5cGU6Ok5vbmUpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUs
IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAg
cmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNs
b3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0g
Y2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxM
aW5rSW5mby0+aXNEaXJlY3QoKSk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxs
ZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFz
RnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNh
bGxlZUFzRnVuY3Rpb25DZWxsKSB7CisgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9u
ID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKKworICAgICAgICAgICAgaWYgKCFjYWxs
TGlua0luZm8tPnNlZW5PbmNlKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRT
ZWVuKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGlj
Q2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVu
Y3Rpb24sIGNvZGVQdHIpOworCisgICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxs
TW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkp
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5k
bGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxs
TGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9
IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwor
ICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIg
PSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKKyAgICAgICAgaWYgKCFjb2Rl
UHRyKQorICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2lu
ZCwgTXVzdENoZWNrQXJpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZXhlY3V0YWJsZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsm
XSAoKSB7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0Nh
bGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29u
c3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9y
KGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dF
eGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Ns
b3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7CisgICAgICAgIGZ1bmN0aW9u
RXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBj
YWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisKKyAgICAgICAg
Y29kZUJsb2NrID0gKmNvZGVCbG9ja1Nsb3Q7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwor
CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBpZiAoY2FsbGVlRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAg
ICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOworICAgIH0KKworICAg
IGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlua0luZm8tPnNl
dFNlZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxl
ZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisKKyAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpU
YWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5F
IFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5r
SW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxl
ZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNh
bGxlZUFzRnVuY3Rpb25DZWxsKSkgeworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5h
bEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVu
Y3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7
CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09
IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAg
ICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2Fs
bChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8p
KTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24t
PnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5j
dGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklU
Q29kZUZvcihraW5kKSkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
KworICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAg
ICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4g
ZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhl
RnJhbWUpKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5j
dGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvbikpOworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJh
bWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnBy
ZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVuY3Rpb24sIHNjb3Bl
LCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBT
dXBwb3J0IHdhc20gSUMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMDMzOQorICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcigKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1v
ZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCAwZDE5ZTI3OTA1NmU1ZjM3ZTc3
MWM1YzQ5YTJkYjBlNmMyZDg0OGQ3Li5hYzU3MTI3YmNmODkwNzJiZTAzODQxNmRhMTM5YjQxZjE2
NGFlNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAKQEAgLTQwMyw3ICs0MDMsNiBAQCB2b2lkIFVubGlua2VkQ29kZUJs
b2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmls
ZXMsCiAKICNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0
YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
QVJSQVlfUFJPRklMRShDT1VOVCkKLSAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRf
Q0FMTF9MSU5LX0lORk8oQ09VTlQpCiAjdW5kZWYgQ09VTlQKICAgICAgICAgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck5leHQ+KCk7CiAg
ICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9w
R2V0QnlJZD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKaW5kZXggNDAzOTRhOTQzOTkyOTkzZjU0NWEyYWM2MmNmNmVkYzA5ZGY1
NTVmYS4uMWM1OTA0MmUwZDBjMzgxMWIzYzliZTIxNThjZGM1NGMwMWRiYjgxYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAg
LTc1LDcgKzc1LDYgQEAgY2xhc3MgQ2FjaGVkQ29kZUJsb2NrOwogCiB0eXBlZGVmIHVuc2lnbmVk
IFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5r
ZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLXR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTElu
dENhbGxMaW5rSW5mbzsKIAogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlIHsKICAgICBz
dHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwCmluZGV4IDVjNzIwNThkY2YyMTk2MGRjZjg1M2UwYTkyYzI3ZTg5YTJk
NTZiZWUuLjVlMzJkMmQyNGYxYjNlZDg3MGMzMzBmMmVmMjNkODVlNGVjZTQ4MzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTMxNSw2ICsz
MTUsMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJ
RCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIGxsaW50X25hdGl2ZV9j
b25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2Nh
bGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVj
dF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmU6CisgICAg
Y2FzZSBsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1
YWxfY29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF92aXJ0dWFsX3RhaWxfY2Fs
bF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfZ2V0X2hvc3RfY2FsbF9yZXR1cm5fdmFsdWU6
CiAgICAgY2FzZSBsbGludF9oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uOgogICAgIGNhc2UgY2hl
Y2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lOgpAQCAtMzI1LDYg
KzMyOSw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2Rl
SUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9u
ZXh0X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgog
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NhbGxf
dmFyYXJnc19yZXR1cm5fbG9jYXRpb246CisgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19y
ZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9j
YXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlv
bjoKICAgICBjYXNlIG9wX2dldF9ieV9pZF9yZXR1cm5fbG9jYXRpb246CkBAIC0zMzUsNyArMzQx
LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9zbG93
X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5f
bG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9uZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9u
OgotICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3Rh
aWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX3RhaWxfY2Fs
bF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgpAQCAtMzQzLDggKzM0OCw5IEBAIENhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlOgogICAg
IGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9sb2d1ZV9ub190bHM6CiAgICAgY2FzZSBqc190cmFtcG9s
aW5lX29wX2NhbGw6Ci0gICAgY2FzZSBqc190cmFtcG9saW5lX29wX3RhaWxfY2FsbDoKICAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0OgorICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdF92YXJh
cmdzOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0OgogICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuOgogICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF9jYWxsX3Nsb3c6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAKaW5kZXggYjQ1MWNkYjYxZjdhMTFiMzMwMmMxODVjNjZi
ZmYxN2E5ZmRiZTA5Zi4uZTcyMmY5ZWJkYWNjODkzNjkwNjU2ZDViNjNlOWY2MjQ0NDYxNWY0MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcApAQCAtMTY2LDEwICsxNjYsMTAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjYWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5l
Q28KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29u
c3RydWN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFt
ZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xP
Q0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KTsKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczoKLSAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3Zh
cmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDogewogICAgICAgICAgICAgaWYgKGNhbGxJ
bnN0cnVjdGlvbi5vcGNvZGVJRCgpID09IG9wX2dldF9ieV9pZCkKQEAgLTIwMSwxMCArMjAxLDEy
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0
dXJuUEMoQ29kZUJsb2NrKiBiYXNlbGluZUNvCiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1l
OjpDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6IHsKLSAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAgICAgICBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChj
YWxsQnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IG51bGxwdHI7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0
Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChsb2NrZXIsIGNhbGxCeXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7
Ci0KICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmRvbmVMb2NhdGlvbigp
LnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKaW5kZXggOTU2ZDY5NDBlN2QyMGI4MjAyZjI1NTNlYzVmZTcwYjdlOGU5ZTYwYS4u
ZTYxZjg5NGJlMTA4Y2NiZmExMmRiMjA4OTI5ZWNkZTJjM2RmMGYyNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC04
NDcsMTAgKzg0NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2Rl
KQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4
KGNhbGxTaXRlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaW5mby0+ZW1pdERpcmVjdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAgICAgICBpbmZvLT5lbWl0RGlyZWN0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAg
ICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAg
ICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pKTsKIAogICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAg
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwpAQCAtODkyLDcg
Kzg5Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxs
ZWVQYXlsb2FkR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4o
WyZdewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAg
ICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICB9IGVsc2UKICAg
ICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2Fk
R1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRl
eCAwZmU3YTc5MDkxNWE3MjRmNGUxZmZiZDk2YmExNGU3YTg1Y2I4Yzc5Li43NzA3M2YzNGFmYmZk
Zjk1ZmU1ODI1YTNjODk4OWMzMjIzZGRhYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTkzOCwxMCArOTM4LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6TGFiZWwgbWFpblBhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgbV9q
aXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAKLSAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIFsmXSB7CisgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBzY29w
ZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFi
ZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKQEAgLTk4MSw3ICs5ODEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgIAogICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAg
ICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
Y2FsbGVlR1BSLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsm
XXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBh
cmVGb3JUYWlsQ2FsbCgpOwpAQCAtOTg5LDcgKzk4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNs
b3coKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICB9IGVs
c2UKICAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQs
IGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsK
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGUxYzgyZGY4ODM0MTQ5
MTk4NGIwOTgzODFiODBkNWVhMzY3MmQ2ZWIuLjAxOGEyZjg1OGY0MjExZDM4N2I0MmI2OTJlMjVi
NTE4NjFiZTRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKQEAgLTEwNDAzLDEwICsxMDQwMywxMCBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwotICAgICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFp
bENhbGxGYXN0UGF0aChqaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0
YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsK
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMDU1OSwxMCArMTA1NTksMTAgQEAgSUdOT1JFX0NM
QU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7
CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpU
YWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9p
ZCgpPihbJl17CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIH0pKTsKIAogICAgICAgICAgICAgICAgIHNsb3dQYXRo
LmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7CkBAIC0xMDkwMiwxMCArMTA5MDIsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VO
RAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYg
KGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVt
cCgpOwpAQCAtMTExODMsMTAgKzExMTgzLDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0geworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAppbmRl
eCBjOGNiYmVlMDZiZjdkNjY2MmMxOWE0YTRhOGExOGMyMWNlZmQzZjcyLi5lNjQ1ODUzMWViYzkw
NGRlNWRkMDRjZTNhYmE1M2M1YmQzYzcwYjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC03NDUsMTggKzc0NSwxOCBAQCB2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVySW1wbChHUAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwot
ICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGVtaXRW
aXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIEdQUkluZm86OnJlZ1QyLCBp
bmZvLT5jYWxsTW9kZSgpKTsKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8p
Cit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2Jh
bE9iamVjdChWTSYgdm0sIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIENhbGxNb2RlIGNhbGxNb2Rl
KQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAg
IG1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0g
bmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKICAgICAgICAgbGlua0J1ZmZl
ci5hZGRNYWluVGhyZWFkRmluYWxpemF0aW9uVGFzayhbPSwgJnZtXSAoKSB7Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVu
ayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgKmluZm8pOwotICAgICAgICAgICAgaW5mby0+c2V0U2xv
d1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2
aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTW9kZSk7CiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAg
ICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAppbmRleCA2NWRkOGVkZWY3NDc5OTZkNWY2ZDhmMTkyNDZlNmFkOTMzNmQ0NzM4Li5h
NDRhYTVjZjk1NGYyYzE2NTQ3OWVjMmRjZDkyM2Q1ZmY0ZjNkMWY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTE3NTIsNyArMTc1Miw3IEBAIGNs
YXNzIEFzc2VtYmx5SGVscGVycyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiAgICAgfQogICAg
IAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlu
a0luZm8qKTsKLSAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmpl
Y3QoVk0mLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBDYWxsTW9kZSk7
CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJl
Y2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRDb2RlLmgKaW5kZXggMTU4OTYwM2YxNDljMjc2YzM1OWU3YmIyNmQ2NGY0ZDg1
NzI3ZjE1MC4uMzAwM2IwNzM1MDE4OGU1ZjczZmNjOTY3MjBkNmE5ZTc0MWY4YmNiNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCkBAIC02Miw3ICs2Miw2
IEBAIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CiAKICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50
OF90IHsKICAgICAgICAgR2xvYmFsT2JqZWN0LAotICAgICAgICBDYWxsTGlua0luZm8sCiAgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvLAogICAgICAgICBGdW5jdGlvbkRlY2wsCiAgICAgICAgIEZ1
bmN0aW9uRXhwciwKQEAgLTkzLDcgKzkyLDYgQEAgY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVi
bGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIH5CYXNlbGluZUpJ
VENvZGUoKSBvdmVycmlkZTsKICAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5N
YXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAKLSAg
ICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgIEZpeGVkVmVjdG9y
PFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CiAgICAgRml4ZWRWZWN0b3I8
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKICAgICBGaXhl
ZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKaW5kZXggY2Yx
NWNlMTk5ZWQzNzZhZjE1MGU4ODdmM2VlZDAyZmExNWRjN2IyYS4uNTAyZjlhMDcyMWRmMWUzMTA3
OGY2OTlhM2NlZWRmNTI5Nzg5MjFiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShKSVQpCiAKKyNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgogCkBAIC04Miw2ICs4
MywzNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqCiAgICAgfQogfQogCitDYWxsRnJhbWVTaHVm
ZmxlRGF0YSBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6Y3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFp
bENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMp
Cit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVl
SlNSIHsgR1BSSW5mbzo6cmVnVDAgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpy
ZWdUMCB9OworI2VuZGlmCisgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Cisg
ICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVm
ZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbnVtUGFyYW1ldGVyczsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFn
UmVnaXN0ZXI7CisjZW5kaWYKKyAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBieXRlY29kZS5t
X2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOworICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7CisgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3NbaV0gPQorICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKAorICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5n
VGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKKyAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMp
OworICAgIH0KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZh
bHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVl
UmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFnR1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BS
KCkpOworI2VuZGlmCisgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CisgICAgc2h1ZmZsZURhdGEuc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gc2h1ZmZsZURhdGE7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAppbmRleCAz
MzY1N2UzM2E2NGYzNzgxZjQzMDk5OGMxMzMzNzFhMWFhNjRiNzVhLi4wYmMxOWI5OWQ2MWU0YmNi
YjcxOWVhOWZjYzFiYzhjMzdmYmZlYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCkBAIC0zMiw2ICszMiw4IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCitzdHJ1Y3QgT3BUYWlsQ2FsbDsKKwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVE
YXRhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTQwLDYgKzQy
LDggQEAgc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhIHsKICAgICAgICAgYXJncy5zaHJpbmtU
b0ZpdCgpOwogICAgIH0KIAorICAgIHN0YXRpYyBDYWxsRnJhbWVTaHVmZmxlRGF0YSBjcmVhdGVG
b3JCYXNlbGluZU9yTExJbnRUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiwgdW5zaWduZWQgbnVt
UGFyYW1ldGVycyk7CisKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNp
Z25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3Mg
eyBVSU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDkyOTQyNDYwNzM0
MDA5MTFiNmMzNTdjNzhhNGEwYzZhNzRlOWFhZDQuLjI4YWU2Zjc3MGRkYWNkNzFjNmYxODJjOWQx
NzlmZDFjY2ViOGRmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTEwMSwxMiAr
MTAxLDkgQEAgc3RkOjp0dXBsZTxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudD4gSklUOjphZGRVbmxpbmsKICAgICByZXR1cm4gc3RkOjp0dXBsZSB7
IHN0dWJJbmZvLCBzdHViSW5mb0luZGV4IH07CiB9CiAKLXN0ZDo6dHVwbGU8VW5saW5rZWRDYWxs
TGlua0luZm8qLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBKSVQ6OmFkZFVubGlua2VkQ2Fs
bExpbmtJbmZvKCkKK1VubGlua2VkQ2FsbExpbmtJbmZvKiBKSVQ6OmFkZFVubGlua2VkQ2FsbExp
bmtJbmZvKCkKIHsKLSAgICB2b2lkKiB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4ID0gYml0d2lz
ZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG1fdW5saW5rZWRDYWxscy5zaXpl
KCkpKTsKLSAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9ICZtX3VubGlua2VkQ2FsbHMu
YWxsb2MoKTsKLSAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0luZGV4
ID0gYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8s
IHVubGlua2VkQ2FsbExpbmtJbmZvSW5kZXgpOwotICAgIHJldHVybiBzdGQ6OnR1cGxlIHsgaW5m
bywgY2FsbExpbmtJbmZvSW5kZXggfTsKKyAgICByZXR1cm4gJm1fdW5saW5rZWRDYWxscy5hbGxv
YygpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xMDEwLDcgKzEwMDcsNiBAQCB2b2lk
IEpJVDo6bGluaygpCiAgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBGaXhlZFZlY3Rv
cjxVbmxpbmtlZENhbGxMaW5rSW5mbz4obV91bmxpbmtlZENhbGxzLnNpemUoKSk7CiAgICAgaWYg
KG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzLnNpemUoKSkKICAgICAgICAgc3RkOjptb3ZlKG1f
dW5saW5rZWRDYWxscy5iZWdpbigpLCBtX3VubGlua2VkQ2FsbHMuZW5kKCksIG1faml0Q29kZS0+
bV91bmxpbmtlZENhbGxzLmJlZ2luKCkpOwotICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJ
bmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CiAgICAgbV9qaXRDb2RlLT5tX3Vu
bGlua2VkU3R1YkluZm9zID0gRml4ZWRWZWN0b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4o
bV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpOwogICAgIGlmIChtX2ppdENvZGUtPm1fdW5saW5r
ZWRTdHViSW5mb3Muc2l6ZSgpKQogICAgICAgICBzdGQ6Om1vdmUobV91bmxpbmtlZFN0dWJJbmZv
cy5iZWdpbigpLCBtX3VubGlua2VkU3R1YkluZm9zLmVuZCgpLCBtX2ppdENvZGUtPm1fdW5saW5r
ZWRTdHViSW5mb3MuYmVnaW4oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBkZTJjNWNl
NzcwYmJkNTkzYjdhZTVmZDFhNjUyNjczODk0M2RkOWExLi42N2I0M2Q4ZmEzMGI3MmNiZDQ5NDQ2
MjI4YzY0Mjk2NGYzZDMzNTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTE1Myw3ICsx
NTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247CiAgICAgICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKLSAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAg
dm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBAIC0yOTQsMTYgKzI5
MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAg
ICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9
IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisgICAgICAg
ICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9w
OjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0
cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisgICAgICAgICwgdm9pZD4g
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENh
bGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC03MDYsNiArNzA1
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3AsIHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVu
YW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KICAgICAgICAg
dm9pZCBlbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgY29uc3QgSW5z
dHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKFZN
Jik7CisKKyAgICBwcml2YXRlOgogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAg
ICAvLyBUaHVuayBnZW5lcmF0b3JzLgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYpOwpAQCAtNzIxLDcgKzcyNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBz
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOwotICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXRf
aGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAKICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCkBAIC05NTgsNyArOTYwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBhZGRUb0NvbnN0YW50UG9v
bChKSVRDb25zdGFudFBvb2w6OlR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKTsKICAgICAg
ICAgc3RkOjp0dXBsZTxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudD4gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwotICAgICAgICBzdGQ6
OnR1cGxlPFVubGlua2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4g
YWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8q
IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50
ZXJwcmV0ZXI7CiAKQEAgLTEwMjksNyArMTAzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIFZlY3RvcjxKSVRDb25zdGFudFBvb2w6OlZhbHVlPiBtX2NvbnN0YW50UG9vbDsKICAgICAg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07Ci0gICAgICAgIEJhZzxDYWxsTGlu
a0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxVbmxp
bmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwogICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKICAgICAg
ICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCAwOTE5OTE1ODQ2OGMwZmUxMDJiNWRm
YmZhMmJlNGZlMTczMTk3ZTJiLi41NzE5NjEyMTU2MGEzYTI5YWUzZDIwNzExM2M2MGRjZTYwODBk
NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTU5LDE3ICs1OSwy
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1ZUdQUiAocmV0
dXJuVmFsdWVHUFIyL3JldHVyblZhbHVlR1BSIG9uIDMyLWJpdCkuCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUpTUik7Ci0KLSNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
LSAgICByZXQoKTsKLSNlbHNlCi0gICAgZW1pdE5ha2VkTmVhckp1bXAodm0oKS5nZXRDVElTdHVi
KG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKS5jb2RlKCkpOwotI2VuZGlmCisgICAgZW1pdE5ha2Vk
TmVhckp1bXAodm0oKS5nZXRDVElTdHViKHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcikuY29k
ZSgpKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnJl
dHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihWTSYpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
KworICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGppdC5lbWl0UmVz
dG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Cisg
ICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9w
X3JldF9oYW5kbGVyIik7Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVt
aXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKQEAgLTg0LDcgKzg4LDcgQEAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKK0pJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwogICAgIGludCBhcmdDb3VudEluY2x1ZGluZ1Ro
aXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludCk7
CkBAIC05Nyw3ICsxMDEsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHRtcEpTUik7CiAgICAgICAgIEp1bXAgZG9uZSA9
IGJyYW5jaElmTm90Q2VsbCh0bXBKU1IpOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyh0bXBKU1Iu
cGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCB0bXBHUFIpOwotICAg
ICAgICBzdG9yZTMyVG9NZXRhZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJy
YXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgp
KTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3A6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RT
ZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAg
LTExMCw3ICsxMTQsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBv
cF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAg
ICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IGNhbGxMaW5rSW5mb0NvbnN0YW50KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKQEAgLTE2MCw3ICsxNjQsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZgogCiAg
ICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDUsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAg
bG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2Fs
bExpbmtJbmZvKCksIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJ
bmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CiAg
ICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CiAgICAg
c3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKQEAgLTIwMyw2NCArMjA3LDM5IEBAIHZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1Qw
KTsKLQogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CiAKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAKICAgICBsb2FkVmFsdWUoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
c2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSksIGNhbGxlZUpTUik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0g
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7
CisgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ2FsbEV2YWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOworICAgIGVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGNhbGxMaW5rSW5mb0dQUiwg
Q2FsbE1vZGU6OlJlZ3VsYXIpOwogICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVz
dWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQogewogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBi
eXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKLSAgICBzaHVmZmxlRGF0
YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS0+bnVt
UGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyOwotI2VuZGlmCi0gICAgc2h1ZmZsZURhdGEtPm51bUxvY2Fs
cyA9Ci0gICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAv
IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2Rl
Lm1fYXJnYyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsg
KytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KLSAgICAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgICAgICB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCi0gICAg
ICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKLSAgICB9Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBh
eWxvYWRHUFIoKSwgRGF0YUZvcm1hdEpTKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
c2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVKU1IudGFn
R1BSKCksIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCkpOwotI2VuZGlmCi0gICAgc2h1ZmZsZURhdGEt
PnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotCiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIgPSByZWdUMjsKLSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3Rh
bnQsIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRH
UFIoKSwgY2FsbExpbmtJbmZvR1BSLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBz
aHVmZmxlciB7ICp0aGlzLCAqc2h1ZmZsZURhdGEgfTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVGFpbENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxM
aW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5w
YXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewor
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YSA9IENhbGxGcmFtZVNodWZm
bGVEYXRhOjpjcmVhdGVGb3JCYXNlbGluZU9yTExJbnRUYWlsQ2FsbChieXRlY29kZSwgbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIgc2h1ZmZsZXIgeyAqdGhpcywgc2h1ZmZsZURhdGEgfTsKICAgICAgICAgc2h1ZmZsZXIubG9j
a0dQUihjYWxsTGlua0luZm9HUFIpOwogICAgICAgICBzaHVmZmxlci5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKLSAgICB9KTsKKyAgICB9KSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAot
ICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwotICAgIGluZm8tPmZyYW1lU2h1ZmZsZURh
dGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKLQogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFi
ZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVM
b2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTI4OCwxNyArMjY3LDE0IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kCiAgICAgKi8KIAogICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBp
bmZvID0gbnVsbHB0cjsKLSAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFu
dCA9IFVJTlRfTUFYOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKLSAgICAg
ICAgc3RkOjp0aWUoaW5mbywgaW5mb0NvbnN0YW50KSA9IGFkZFVubGlua2VkQ2FsbExpbmtJbmZv
KCk7CisgICAgICAgIGluZm8gPSBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogICAgICAgICBp
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OwotICAgICAgICBpbmZvLT5jYWxs
VHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOwogICAgICAgICBBU1NF
UlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygp
KTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxp
bmtlZENhbGxMaW5rSW5mbyA9IGluZm87Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CiAg
ICAgfQotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOworICAg
IGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlKTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxG
cmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRp
YWxpemVkLgogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KS5iaXRzKCk7CkBAIC0zMTYsMTYgKzI5MiwxNiBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChjYWxsZWVKU1IpKTsKICNl
bmRpZgogCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJ
bmZvSW5kZXgsIGluZm9Db25zdGFudCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29k
ZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwotICAgIGxvYWRDb25zdGFudChp
bmZvQ29uc3RhbnQsIGNhbGxMaW5rSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCks
IGNhbGxMaW5rSW5mb0dQUik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAg
ICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZd
IHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9H
UFIsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3coY2FsbExpbmtJ
bmZvR1BSKTsKLSAgICAgICAgfSk7CisgICAgICAgIH0pKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGhzKTsKICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9
IGRvbmVMb2NhdGlvbjsKQEAgLTM0NCwxNSArMzIwLDE2IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkKQogewogICAg
IE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOworICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgQVNTRVJUKG9wY29kZUlEICE9IG9wX2NhbGxfZXZh
bCk7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7Ci0gICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxs
TGlua0luZm8oKSwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKQEAgLTM2Niw3ICszNDMsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogCiAgICAgcmVz
ZXRTUCgpOwogCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY4NDQ1ODc4MDNjMjYxOGM2ODAzOTgzNmNlZTZjN2Iz
NGZkMmMzMDQuLjJmZTIzYzQ5ZmQwZjk0MDkxZjY4NjA1Yjc1N2FlMmNlMzIyMDE0YTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMzcwLDIxICszNzAsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCi17Ci0gICAgQ0NhbGxIZWxw
ZXJzIGppdDsKLQotICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7Ci0gICAgaml0LnJldCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFz
ZWxpbmU6IG9wX3JldF9oYW5kbGVyIik7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0KIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAwZTJkN2QwOGNmYjc1ZjMyNzFkMDYyYjA5NmFiYjBj
MzVjN2YxYTg1Li42YmNlNzRhYjgyYzU1N2QwMDg1MTUwNzg1MWEwNGU0ZTE0NjMwYzA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTYwLDcgKzYw
LDcgQEAKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlByb3BlcnR5
TmFtZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgotI2luY2x1ZGUgIlJlcGF0Y2guaCIK
KyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5o
IgpAQCAtMTQ0NiwxODYgKzE0NDYsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ2FsbEV2YWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotc3RhdGljIFNsb3dQYXRoUmV0dXJu
VHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxv
Y2sobnVsbHB0cik7Ci0KLSAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQo
KSA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEo
dm0sIGNhbGxlZSk7Ci0gICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpU
eXBlOjpKUyk7Ci0KLSAgICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6
Ok5hdGl2ZSkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbGVlRnJhbWUpOwotICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVj
dChjYWxsZWUpKTsKLSAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0g
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2
bSksIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElT
dHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgTExJ
bnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExp
bmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtl
ZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIEFTU0VSVChjYWxsRGF0YS50
eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xv
YmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBj
YWxsZWUpKTsKLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgIHZtLmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgfQotCi0gICAgQVNT
RVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVj
dCk7Ci0KLSAgICBhdXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1Y3REYXRhKHZtLCBjYWxs
ZWUpOwotICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6OkpT
KTsKLQotICAgIGlmIChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2
ZSkgewotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsZWVGcmFt
ZSk7Ci0gICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0g
ICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJh
bWUpOwotICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
Ci0gICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRo
ZUZyYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KExMSW50
OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsK
LSAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3Ry
dWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwotICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoCi0gICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVz
cygpLAotICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLX0K
LQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtDYWxsLCBTbG93UGF0aFJl
dHVyblR5cGUsIChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykpCiB7Ci0gICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8t
PnNwZWNpYWxpemF0aW9uS2luZCgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5rSW5mby0+
aXNEaXJlY3QoKSk7Ci0gICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gY2FsbGVlRnJh
bWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7Ci0gICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKCFjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCkgewotICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpz
RHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2
bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7Ci0KLSAgICAgICAgICAgIGlmICghY2FsbExpbmtJ
bmZvLT5zZWVuT25jZSgpKQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2Vlbigp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwo
dm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9u
LCBjb2RlUHRyKTsKLQotICAgICAgICAgICAgdm9pZCogbGlua2VkVGFyZ2V0ID0gY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChsaW5r
ZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUo
KSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAg
ICAgICAgfQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9z
dENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJ
bmZvKSk7Ci0gICAgfQotCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rp
b24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsZWUt
PnNjb3BlVW5jaGVja2VkKCk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxs
ZWUtPmV4ZWN1dGFibGUoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBp
ZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAgICBjb2RlUHRyID0ganNU
b1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7Ci0gICAgICAgIGlmICghY29kZVB0cikK
LSAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11
c3RDaGVja0FyaXR5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwotCi0gICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkg
ewotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJU
YWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwot
ICAgICAgICB9OwotCi0gICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdCkgewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwot
ICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NP
ZkNvZGVCbG9jaygpOwotICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVj
dXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVC
bG9ja1Nsb3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGhhbmRs
ZVRocm93RXhjZXB0aW9uKCkpOwotCi0gICAgICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90
OwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKLQotICAgICAgICBBcml0eUNoZWNrTW9kZSBh
cml0eTsKLSAgICAgICAgaWYgKGNhbGxlZUZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwg
Y2FsbExpbmtJbmZvLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgIGFyaXR5ID0gTXVzdENoZWNr
QXJpdHk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJl
cXVpcmVkOwotICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKGtpbmQsIGFyaXR5KTsKLSAgICB9Ci0KLSAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9u
Y2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7Ci0gICAgZWxzZQotICAgICAg
ICBsaW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29k
ZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwotCi0gICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5r
SW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVw
VGhlRnJhbWUpKTsKLX0KLQotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0
aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxs
ZXJGcmFtZSgpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLQotICAgIEpTVmFs
dWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgp
OwotICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVl
KTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewotICAgICAgICBp
ZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwotICAgICAg
ICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fs
bExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6
IEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxs
ZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKLSAgICB9Ci0gICAgCi0gICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAg
ICBKU1Njb3BlKiBzY29wZSA9IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOwotICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKLSAgICBpZiAo
VU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7Ci0gICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4
Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
S2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkg
JiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJp
bGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9i
amVjdCwgZnVuY3Rpb24pKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlv
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGNh
bGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRh
YmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGZ1bmN0aW9u
LCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOwotICAgIH0KLSAgICAvLyBG
SVhNRTogU3VwcG9ydCB3YXNtIElDLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjAzMzkKLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3IoCi0gICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxl
QWRkcmVzcygpLAotICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8t
PmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZy
YW1lKSk7CisgICAgcmV0dXJuIGxpbmtGb3IoY2FsbGVlRnJhbWUsIGdsb2JhbE9iamVjdCwgY2Fs
bExpbmtJbmZvKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxpbmtQ
b2x5bW9ycGhpY0NhbGwsIFNsb3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1NDhkNTFjZGE0ZTJhMjFhOTIxNzliNTE1Zjk4NGFmMmM2OGQ2ZGZjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVwYXRjaC5oIgotCi0jaWYgRU5BQkxFKEpJ
VCkKLQotI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgotI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQ2Fs
bEZyYW1lU2h1ZmZsZXIuaCIKLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
REZHU3BlY3VsYXRpdmVKSVQuaCIKLSNpbmNsdWRlICJET01KSVRHZXR0ZXJTZXR0ZXIuaCIKLSNp
bmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJFeGVjdXRhYmxlQmFzZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJGVExUaHVua3MuaCIKLSNpbmNsdWRlICJGdWxsQ29kZU9yaWdpbi5o
IgotI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklDU3RhdHMuaCIKLSNpbmNsdWRlICJJbmxp
bmVBY2Nlc3MuaCIKLSNpbmNsdWRlICJJbnN0YW5jZU9mQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUg
IkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRl
ICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseS5oIgotI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5j
bHVkZSAiTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGlj
QWNjZXNzLmgiCi0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNp
bmNsdWRlICJTdXBlclNhbXBsZXIuaCIKLSNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNp
bmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+IG9wZXJhdGlvbikKLXsKLSAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX09QRVJB
VElPTl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9uKTsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oQ29kZUxvY2F0
aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsKQotewotICAgIEpTQ19SRVRVUk5fUkVUQUdH
RURfQ0FMTF9UQVJHRVRfV0lUSF9WQUxJREFUSU9OKGNhbGwpOwotfQotCi1zdGF0aWMgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZWFkUHV0SUNDYWxsVGFyZ2V0KENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpCi0gICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0
aW9uKHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbik7Ci0gICAgQ29kZUxvY2F0aW9uQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPiBjYWxsID0gc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbjsKLSNp
ZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6RlRMSklUKSB7Ci0gICAgICAgIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQg
PSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IHRodW5rID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgcmV0dXJuIHJldGFn
T3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oY29kZUJsb2NrLT52bSgpLmZ0bFRodW5rcy0+a2V5Rm9y
U2xvd1BhdGhDYWxsVGh1bmsodGh1bmspLmNhbGxUYXJnZXQoKSk7Ci0gICAgfQotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAg
ICByZXR1cm4gcmV0YWdDYWxsVGFyZ2V0V2l0aFZhbGlkYXRpb24oY2FsbCk7Ci19Ci0KLXZvaWQg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYXRp
b25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCi17Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgewotICAgICAgICBWTSYgdm0g
PSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgICAgIEZUTDo6VGh1bmtzJiB0aHVua3MgPSAqdm0uZnRs
VGh1bmtzOwotICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFj
cm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKLSAgICAg
ICAgYXV0byBzbG93UGF0aFRodW5rID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldC5leGVjdXRhYmxlQWRkcmVz
cygpKTsKLSAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtleUZvclNs
b3dQYXRoQ2FsbFRodW5rKHNsb3dQYXRoVGh1bmspOwotICAgICAgICBrZXkgPSBrZXkud2l0aENh
bGxUYXJnZXQobmV3Q2FsbGVlRnVuY3Rpb24pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoY2FsbCwgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KHRodW5rcy5nZXRTbG93
UGF0aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbHNlIC8vIEVOQUJMRShGVExfSklUKQotICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwot
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2Fs
bChjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJUYWc+KCkpOwot
fQotCi1zdGF0aWMgdm9pZCByZXBhdGNoU2xvd1BhdGhDYWxsKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pCi17Ci0gICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkp
IHsKLSAgICAgICAgc3R1YkluZm8ubV9zbG93T3BlcmF0aW9uID0gbmV3Q2FsbGVlRnVuY3Rpb24u
cmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLm1fc2xvd1BhdGhD
YWxsTG9jYXRpb24sIG5ld0NhbGxlZUZ1bmN0aW9uKTsKLX0KLQotZW51bSBJbmxpbmVDYWNoZUFj
dGlvbiB7Ci0gICAgR2l2ZVVwT25DYWNoZSwKLSAgICBSZXRyeUNhY2hlTGF0ZXIsCi0gICAgQXR0
ZW1wdFRvQ2FjaGUKLX07Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JDZWxs
KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2Vs
bC0+c3RydWN0dXJlKHZtKTsKLQotICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gc3RydWN0dXJlLT50
eXBlSW5mbygpOwotICAgIGlmICh0eXBlSW5mby5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkK
LSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoc3RydWN0dXJlLT5pc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5G
bGF0dGVuZWRCZWZvcmUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAvLyBGbGF0dGVuaW5nIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgb2Zmc2V0LCBzbyByZXR1
cm4gZWFybHkgZm9yIGFub3RoZXIgdHJ5LgotICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRl
bkRpY3Rpb25hcnlPYmplY3Qodm0pOwotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwot
ICAgIH0KLSAgICAKLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIHJldHVybiBBdHRl
bXB0VG9DYWNoZTsKLX0KLQotc3RhdGljIGJvb2wgZm9yY2VJQ0ZhaWx1cmUoSlNHbG9iYWxPYmpl
Y3QqKQotewotICAgIHJldHVybiBPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHN0YXRpYyB2b2lkIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVk
KFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCYgcmVzdWx0KQotewotICAgIGlmIChyZXN1bHQuc2hv
dWxkUmVzZXRTdHViQW5kRmlyZVdhdGNocG9pbnRzKCkpIHsKLSAgICAgICAgcmVzdWx0LmZpcmVX
YXRjaHBvaW50cyh2bSk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICAgICAgc3R1
YkluZm8ucmVzZXQobG9ja2VyLCBjb2RlQmxvY2spOwotICAgICAgICB9Ci0gICAgfQotfQotCi1p
bmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdH
ZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAg
IGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAgICAgIHJldHVy
biBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6
VHJ5QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAg
ICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6Ci0gICAgICAg
IHJldHVybiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQ
cml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lQnlJZE9wdGltaXplOwotICAgIH0KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBhcHByb3ByaWF0ZUdldEJ5RnVuY3Rpb24oR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAg
c3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIHJldHVy
biBvcGVyYXRpb25HZXRCeUlkOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXM7Ci0gICAgY2FzZSBHZXRCeUtp
bmQ6OlRyeUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkOwotICAgIGNh
c2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25HZXRCeVZhbEdlbmVyaWM7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWU7Ci0gICAgY2FzZSBHZXRCeUtp
bmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lQnlJZDsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3Vs
dDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAgICBpZiAoZm9yY2VJ
Q0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3Ig
aW1tZWRpYXRlcy4KLSAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgY29uc3QgYm9vbCBpc1ByaXZhdGUgPSBraW5kID09IEdl
dEJ5S2luZDo6UHJpdmF0ZU5hbWUgfHwga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJ
ZDsKLQotICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKLQotICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgewotICAgICAgICAgICAg
aWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2Fz
dDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewotCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAg
ICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KGNvZGVCbG9jaywgc3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJs
b2NrLCBzdHViSW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5s
aW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2Nr
ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
U3RyaW5nTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChEaXJl
Y3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4o
dm0sIGJhc2VDZWxsKSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3ZlcnJp
ZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2FkISBH
dWFyZGluZwotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2l0aCBzdWNoIGEgY2hlY2sgZW5hYmxl
cyB1cyB0byBhZGQgYW4gSUMgY2FzZSBmb3IgdGhhdCBsb2FkIGlmIG5lZWRlZC4KLSAgICAgICAg
ICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKLSAgICAgICAgICAgICAg
ICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3ND
YXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxTY29w
ZWRBcmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRGl0dG8u
Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1i
b2woKSAmJiBiYXNlQ2VsbC0+aW5oZXJpdHM8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q+KHZtKSAm
JiAhc2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIG1vZHVsZU5hbWVzcGFj
ZVNsb3QgPSBzbG90Lm1vZHVsZU5hbWVzcGFjZVNsb3QoKSkKLSAgICAgICAgICAgICAgICBuZXdD
YXNlID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHBy
b3BlcnR5TmFtZSwganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oYmFzZUNlbGwpLCBt
b2R1bGVOYW1lc3BhY2VTbG90LT5lbnZpcm9ubWVudCwgU2NvcGVPZmZzZXQobW9kdWxlTmFtZXNw
YWNlU2xvdC0+c2NvcGVPZmZzZXQpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KCFuZXdDYXNlKSB7Ci0gICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xv
dC5pc1Vuc2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0K
LSAgICAgICAgICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwotICAgICAgICAg
ICAgaWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQcm94
eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgYmFzZUNlbGwgPSBiYXNl
VmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0
cnVjdHVyZSh2bSk7Ci0gICAgICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9
IGFjdGlvbkZvckNlbGwodm0sIGJhc2VDZWxsKTsKLSAgICAgICAgICAgIGlmIChhY3Rpb24gIT0g
QXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgICAg
ICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgICAgICAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICYmIHNsb3Qu
aXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09
IGJhc2VWYWx1ZQotICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQotICAg
ICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KQotICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFt
ZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0s
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVu
Y3Rpb24oa2luZCkpOwotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNl
bGYobG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJv
cGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlZlB0cjxQ
b2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0KLSAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuaXNVbnNldCgpID8gaW52YWxpZE9mZnNldCA6
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChzbG90LmlzQ3VzdG9tKCkg
JiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIFRv
IGNhY2hlIHNlbGYgY3VzdG9tcywgd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMgYmVjYXVz
ZSB3ZQotICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3Rv
bSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlCi0gICAgICAgICAgICAgICAgLy8gY29uc3Rh
bnQgZnVuY3Rpb24gcG9pbnRlci4KLQotICAgICAgICAgICAgICAgIGlmICghcHJlcGFyZUNoYWlu
Rm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIHNsb3Quc2xvdEJhc2UoKSwgc2xvdC5zbG90QmFzZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkg
IT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8o
KS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxh
dHRlbmVkQmVmb3JlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0
cnVjdHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsgLy8gV2UgbWF5IGhhdmUgY2hhbmdlZCBwcm9w
ZXJ0eSBvZmZzZXRzLgotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChz
bG90LmlzVW5zZXQoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBhIGtpbmQgaXMgR2V0QnlL
aW5kOjpCeUlkRGlyZWN0IG9yIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWUsIHdlIGRvIG5vdCBuZWVk
IHRvIGludmVzdGlnYXRlIHByb3RvdHlwZSBjaGFpbnMgZnVydGhlci4KLSAgICAgICAgICAgICAg
ICAvLyBDYWNoZWFiaWxpdHkganVzdCBkZXBlbmRzIG9uIHRoZSBoZWFkIHN0cnVjdHVyZS4KLSAg
ICAgICAgICAgICAgICBpZiAoa2luZCAhPSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3QgJiYgIWlzUHJp
dmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNo
YWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+
ZmxhdHRlbmVkRGljdGlvbmFyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVy
dHkgb2Zmc2V0cyBtYXkgaGF2ZSBjaGFuZ2VkIGR1ZSB0byBmbGF0dGVuaW5nLiBXZSdsbCBjYWNo
ZSBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVT
dGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlw
ZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmpl
Y3QsIGJhc2VDZWxsLCBzbG90KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90
eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0
dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkgPT0gb2Zmc2V0
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZvciBmYXN0ZXIg
YWNjZXNzZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9
IG51bGxwdHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB0aGlz
IGBpZmAgc2hvdWxkIGJlIGluc2lkZSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eUJsYWgu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg1MjE1Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vu
c2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUudWlkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2Vu
ZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBzbG90LnNsb3RCYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZS51aWQoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGdldHRlciA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgIGdldHRlciA9
IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBzbG90LmdldHRlclNldHRlcigpLT5nZXR0
ZXIoKSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlv
bj4gZG9tQXR0cmlidXRlOwotICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSAmJiBzbG90LmRvbUF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSA9
IHNsb3QuZG9tQXR0cmlidXRlKCk7Ci0KLSAgICAgICAgICAgIGlmIChraW5kID09IEdldEJ5S2lu
ZDo6VHJ5QnlJZCkgewotICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlw
ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNz
Q2FzZTo6TWlzczsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0
dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXRHZXR0ZXI7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFj
Y2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB0eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNl
dCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0
Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKHN0dWJJbmZvLCBnZXR0ZXIs
IHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBnZXR0ZXIsIFdURk1vdmUocHJvdG90
eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlm
IChpc1ByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNsb3Qu
aXNVbnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaXNQcm94eSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxv
Y2ssIEFjY2Vzc0Nhc2U6OkxvYWQsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQsIGlzUHJveHksIHNsb3Qud2F0Y2hw
b2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNVbnNldCgpID8gQWNjZXNzQ2FzZTo6TWlzcyA6IEFj
Y2Vzc0Nhc2U6OkxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qu
d2F0Y2hwb2ludFNldCgpLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNz
VHlwZSB0eXBlOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRl
cigpKQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21W
YWx1ZUdldHRlcjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6
OkJ5SWRXaXRoVGhpcyAmJiB0eXBlID09IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVy
ICYmIGRvbUF0dHJpYnV0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0
eXBlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRU
YXJnZXRGcm9tUHJveHksCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRT
ZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gRnVuY3Rpb25QdHI8Q3VzdG9tQWNjZXNz
b3JQdHJUYWc+KHNsb3QuY3VzdG9tR2V0dGVyKCkpIDogbnVsbHB0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LnNsb3RCYXNlKCkgIT0g
YmFzZVZhbHVlID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRvbUF0dHJpYnV0ZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR19J
QygoSUNFdmVudDo6R2V0QnlBZGRBY2Nlc3NDYXNlLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxs
KHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5z
bG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFk
ZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0
cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChy
ZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAg
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
SWRXaXRoVGhpczoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgICAg
ICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5
S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6Ci0gICAgICAgICAg
ICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgICAgICAgICAgSW5saW5lQWNj
ZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVz
dWx0LmNvZGUoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRl
ZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQu
c2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQot
Ci12b2lkIHJlcGF0Y2hHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIAotICAgIGlmICh0cnlDYWNoZUdldEJ5KGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8s
IGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLX0KLQot
Ci1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheUdldEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAg
IGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LQotICAgIGlmICghaW5kZXguaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOwotCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgcmVzdWx0OwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0g
ICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLQotICAgICAgICBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChiYXNlLT50eXBlKCkg
PT0gRGlyZWN0QXJndW1lbnRzVHlwZSkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3ND
YXNlOjpJbmRleGVkRGlyZWN0QXJndW1lbnRzTG9hZDsKLSAgICAgICAgZWxzZSBpZiAoYmFzZS0+
dHlwZSgpID09IFNjb3BlZEFyZ3VtZW50c1R5cGUpCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFNjb3BlZEFyZ3VtZW50c0xvYWQ7Ci0gICAgICAgIGVsc2UgaWYg
KGJhc2UtPnR5cGUoKSA9PSBTdHJpbmdUeXBlKQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRTdHJpbmdMb2FkOwotICAgICAgICBlbHNlIGlmIChpc1R5cGVkVmll
dyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkg
ewotICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4TG9hZDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgotICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4TG9hZDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKLSAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlV
aW50OENsYW1wZWRMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBUeXBlSW50MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50MTZMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBUeXBlVWludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQzMjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQzMkxvYWQ7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyTG9hZDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6Ci0g
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
RmxvYXQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5
cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheUZsb2F0NjRMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBp
biBJQwotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMTE4MwotICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6Ci0gICAgICAgICAgICBj
YXNlIFR5cGVCaWdVaW50NjQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5k
ZXhpbmdTaGFwZU1hc2s7Ci0gICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzTG9hZDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6Ci0gICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VMb2FkOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgYWNjZXNzVHlwZSwgbnVsbHB0cikpOwotCi0gICAgICAgIGlm
IChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpHZXRCeVJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSks
IElkZW50aWZpZXIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVk
KHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQuc2hv
dWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12
b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAodHJ5Q2FjaGVBcnJheUdldEJ5VmFsKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8pID09IEdpdmVVcE9u
Q2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
b3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKTsKLX0KLQotc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsK
LSAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7Ci0g
ICAgICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVj
dDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0OwotICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWROb25TdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAg
ICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Q7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdDsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdDsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0g
ICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdDsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7Ci0gICAgICAg
IHN3aXRjaCAocHV0S2luZCkgewotICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAg
ICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWM7Ci0gICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWM7Ci0gICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RHZW5lcmljOwotICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgICAg
IEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWM7Ci0gICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJp
Y3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0
ZUZpZWxkR2VuZXJpYzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQot
ICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKGNv
bnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2luZCBw
dXRLaW5kKQotewotICAgIHN3aXRjaCAocHV0QnlLaW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5SWQ6Ci0gICAgICAgIHN3aXRjaCAocHV0S2luZCkgewotICAgICAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemU7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmlj
dE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmlu
ZToKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAg
ICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6Ci0gICAgICAgIHN3aXRjaCAo
cHV0S2luZCkgewotICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKLSAgICAgICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogot
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1v
ZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmll
bGRPcHRpbWl6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gTWFr
ZSB3aW4gcG9ydCBjb21waWxlciBoYXBweQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1dEJ5S2luZCwgUHV0S2lu
ZCBwdXRLaW5kKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICB7Ci0gICAgICAgIEdD
U2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9i
amVjdC0+dm0oKSk7Ci0KLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkp
Ci0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpICYmICFzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHRyeSB0byBkbyBzb21ldGhpbmcgc21hcnRlciBoZXJlLi4uCi0gICAgICAgIGlmIChpc0NvcHlP
bldyaXRlKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKQotICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIC8vIFdlIGNhbid0IGVuZCB1cCBzdG9yaW5nIHRvIGEg
Q29XIG9uIHRoZSBwcm90b3R5cGUgc2luY2UgaXQgc2hvdWxkbid0IG93biBwcm9wZXJ0aWVzLgot
ICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc2xvdC5iYXNlKCktPmluZGV4aW5nTW9kZSgp
KSk7Ci0KLSAgICAgICAgaWYgKCFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIEpT
Q2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0KLSAgICAgICAgYm9vbCBpc1By
b3h5ID0gZmFsc2U7Ci0gICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJk
aW5nUHJveHlUeXBlKSB7Ci0gICAgICAgICAgICBiYXNlQ2VsbCA9IGpzQ2FzdDxKU1Byb3h5Kj4o
YmFzZUNlbGwpLT50YXJnZXQoKTsKLSAgICAgICAgICAgIGJhc2VWYWx1ZSA9IGJhc2VDZWxsOwot
ICAgICAgICAgICAgaXNQcm94eSA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRs
eSBvbmx5IGNhY2hlIFJlcGxhY2UgYW5kIEpTL0N1c3RvbSBTZXR0ZXJzIG9uIEpTUHJveHkuIFdl
IGRvbid0Ci0gICAgICAgICAgICAvLyBjYWNoZSB0cmFuc2l0aW9ucyBiZWNhdXNlIGdsb2JhbCBv
YmplY3RzIHdpbGwgbmV2ZXIgc2hhcmUgdGhlIHNhbWUgc3RydWN0dXJlCi0gICAgICAgICAgICAv
LyBpbiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgICAgIGJvb2wgaXNDYWNo
ZWFibGVQcm94eSA9IChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC50eXBlKCkgPT0gUHV0
UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5KQotICAgICAgICAgICAgICAgIHx8IHNsb3Qu
aXNDYWNoZWFibGVTZXR0ZXIoKQotICAgICAgICAgICAgICAgIHx8IHNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKTsKLSAgICAgICAgICAgIGlmICghaXNDYWNoZWFibGVQcm94eSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc1By
b3h5ICYmIChwdXRLaW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldCB8fCBwdXRL
aW5kID09IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2Fz
ZTsKLQotICAgICAgICBpZiAoc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlICYmIHNsb3QuaXNDYWNo
ZWFibGVQdXQoKSkgewotICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5
U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0
IGhlbHBzIGNhdGNoIGJ1Z3MgaWYgd2UgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBkaXNhYmxlIGNh
Y2hpbmcKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHRyYW5zaXRpb24gdGhlbiBzdG9yZSB0
byBhbiBleGlzdGluZyBwcm9wZXJ0eS4gVGhpcyBpcyBjb21tb24gYW1vbmcKLSAgICAgICAgICAg
ICAgICAvLyBwYXRocyB0aGF0IHJlaWZ5IGxhenkgcHJvcGVydGllcy4gSWYgd2UgcmVpZnkgYSBs
YXp5IHByb3BlcnR5IGFuZCBmb3JnZXQKLSAgICAgICAgICAgICAgICAvLyB0byBkaXNhYmxlIGNh
Y2hpbmcsIHdlIG1heSBjb21lIGRvd24gdGhpcyBwYXRoLiBUaGUgUmVwbGFjZSBJQyBkb2VzIG5v
dAotICAgICAgICAgICAgICAgIC8vIGtub3cgaG93IHRvIG1vZGVsIHRoZXNlIHR5cGVzIG9mIHN0
cnVjdHVyZSB0cmFuc2l0aW9ucyAob3IgYW55IHN0cnVjdHVyZQotICAgICAgICAgICAgICAgIC8v
IHRyYW5zaXRpb24gZm9yIHRoYXQgbWF0dGVyKS4KLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gb2xkU3RydWN0dXJlKTsK
LQotICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2Vt
ZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAg
ICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCi0gICAgICAgICAg
ICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KQotICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgewotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywg
b2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlk
ZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRp
bWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShsb2NrZXIsIGNvZGVC
bG9jaywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6UmVwbGFjZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvbGRTdHJ1Y3R1
cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksIGlzUHJveHkpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWlzUHJveHkpOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsK
LQotICAgICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5pc09iamVjdCgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBvbGQgc3RydWN0dXJlIGlzIGRpY3Rpb25hcnksIGl0IG1lYW5zIHRoYXQgdGhpcyBp
cyBvbmUtb24tb25lIGJldHdlZW4gYW4gb2JqZWN0IGFuZCBhIHN0cnVjdHVyZS4KLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIE5ld1Byb3BlcnR5IG9wZXJhdGlvbiwgZ2VuZXJhdGluZyBJ
QyBmb3IgdGhpcyBkb2VzIG5vdCBvZmZlciBhbnkgYmVuZWZpdCBiZWNhdXNlIHRoaXMgdHJhbnNp
dGlvbiBuZXZlciBoYXBwZW5zIGFnYWluLgotICAgICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNo
ZUxhdGVyOwotCi0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwg
aWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5v
bmUpLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdT
dHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBKU09i
amVjdDo6cHV0IGlzIG92ZXJyaWRkZW4gYnkgVXNlck9iamVjdCwgVXNlck9iamVjdDo6cHV0IHBl
cmZvcm1zIHNpZGUtZWZmZWN0IG9uIEpTT2JqZWN0OjpwdXQsIGFuZCBpdCBuZWdsZWN0cyB0byBt
YXJrIHRoZSBQdXRQcm9wZXJ0eVNsb3QgYXMgbm9uLWNhY2hhZWJsZSwKLSAgICAgICAgICAgICAg
ICAvLyB0aGVuIGFyYml0cmFyeSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgY2FuIGhhcHBlbiBkdXJp
bmcgdGhlIHB1dCBvcGVyYXRpb24sIGFuZCB0aGlzIGdlbmVyYXRlcyB3cm9uZyB0cmFuc2l0aW9u
IGluZm9ybWF0aW9uIGhlcmUgYXMgaWYgb2xkU3RydWN0dXJlIC0+IG5ld1N0cnVjdHVyZS4KLSAg
ICAgICAgICAgICAgICAvLyBJbiByZWFsaXR5LCB0aGUgdHJhbnNpdGlvbiBpcyBvbGRTdHJ1Y3R1
cmUgLT4gc29tZXRoaW5nIHVua25vd24gc3RydWN0dXJlcyAtPiBiYXNlVmFsdWUncyBzdHJ1Y3R1
cmUuCi0gICAgICAgICAgICAgICAgLy8gVG8gZ3VhcmQgYWdhaW5zdCB0aGUgZW1iZWRkZXIncyBw
b3RlbnRpYWxseSBpbmNvcnJlY3QgVXNlck9iamVjdDo6cHV0IGltcGxlbWVudGF0aW9uLCB3ZSBz
aG91bGQgY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uIGFuZCBpZiBmb3VuZCwgYW5kIGdpdmUgdXAg
b24gY2FjaGluZyB0aGUgcHV0LgotICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSh2bSkgPT0gbmV3U3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBp
ZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pICE9IG5ld1N0cnVjdHVyZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJv
dG90eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1dEtp
bmQ6Ok5vdERpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0g
cHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChj
YWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJv
dG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2Jh
bE9iamVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5U2V0dGVyTWlzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChwdXRLaW5kID09IFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZSkgewotICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoaWRlbnQuaXNQcml2YXRlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCBjb2RlQmxvY2ss
IGdsb2JhbE9iamVjdCwgbmV3U3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlVHJhbnNpdGlvbih2bSwgY29kZUJs
b2NrLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIHN0dWJJbmZvKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkg
fHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nl
c3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZSBhIHNlbGYgY3VzdG9tLCBzaW5jZSB3ZSBtdXN0
IGRpc2FsbG93IGRpY3Rpb25hcmllcwotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgbmVl
ZCB0byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9tIGdvZXMgYXdheSBzaW5jZSB3ZSBjYWNoZSB0
aGUgY29uc3RhbnQKLSAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBwb2ludGVyLgotICAgICAg
ICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2Jh
bE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNh
Y2hlU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWlu
Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWlu
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJl
LCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6Ok5vbmUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUo
Ci0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNDdXN0b21BY2Nlc3Nv
cigpID8gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXIgOiBBY2Nlc3NDYXNlOjpDdXN0
b21WYWx1ZVNldHRlciwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAg
ICAgICAgIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nl
c3NDaGFpbiksIGlzUHJveHksIHNsb3QuY3VzdG9tU2V0dGVyKCkucmV0YWdnZWQ8Q3VzdG9tQWNj
ZXNzb3JQdHJUYWc+KCksIHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3QuYmFzZSgpIDog
bnVsbHB0cik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpOwotICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVBy
b3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwg
YmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0
YXR1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFp
bjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gcHJvdG90eXBlQWNjZXNzQ2hhaW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBiYXNlQ2Vs
bC0+c3RydWN0dXJlKHZtKSktPmdldCh2bSwgaWRlbnQuaW1wbCgpLCBhdHRyaWJ1dGVzKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpIHx8ICEoYXR0
cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0g
bnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgb2xkU3RydWN0dXJlLCBzbG90LmJh
c2UoKSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY29uZGl0aW9uU2V0
LnNsb3RCYXNlQ29uZGl0aW9uKCkuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFj
Y2Vzc29yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gY29uZGl0aW9uU2V0LnNsb3RC
YXNlQ29uZGl0aW9uKCkub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3ND
YXNlOjpTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGNvbmRpdGlv
blNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIGlzUHJveHkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUFkZEFjY2Vz
c0Nhc2UsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBi
YXNlVmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vz
c0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdC5pc1N0cmljdE1vZGUo
KSA/IEVDTUFNb2RlOjpzdHJpY3QoKSA6IEVDTUFNb2RlOjpzbG9wcHkoKSwgcHJvcGVydHlOYW1l
LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVD
b2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1
bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
LmNvZGUoKSk7Ci0KLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJl
V2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywg
cmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hQdXRCeShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
VmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBT
dXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCi0gICAgaWYg
KHRyeUNhY2hlUHV0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgb2xkU3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRCeUtpbmQsIHB1dEtpbmQp
ID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtp
bmQsIHB1dEtpbmQpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJy
YXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0S2luZCkKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkK
LSAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsK
LSAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotCi0gICAgICAgIEFj
Y2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKLSAgICAgICAgaWYgKGlzVHlwZWRWaWV3
KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQ4OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUg
PSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDhTdG9yZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4OgotICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4U3RvcmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6Ci0g
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
VWludDhDbGFtcGVkU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVJbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlJbnQxNlN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBUeXBlVWludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQxNlN0b3JlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJTdG9yZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKLSAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJT
dG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0
MzI6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5RmxvYXQzMlN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2
NEFycmF5IGluIElDCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAgICBjYXNlIFR5cGVCaWdJbnQ2NDoKLSAgICAg
ICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBl
KCkgJiBJbmRleGluZ1NoYXBlTWFzazsKLSAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFw
ZSkgewotICAgICAgICAgICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50MzJTdG9yZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREb3VibGVTdG9yZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c1N0b3JlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheVN0b3JhZ2VTaGFwZToK
LSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3Rv
cmFnZVN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgIHJlc3VsdCA9IHN0dWJJ
bmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1v
ZGU6OnN0cmljdCgpLCBudWxscHRyLCBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
YWNjZXNzVHlwZSwgbnVsbHB0cikpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29t
ZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRo
SnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXIoKSkpOwotCi0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElu
bGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBv
aW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQp
OwotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDog
UmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2Us
IEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRL
aW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKLXsKLSAgICBpZiAodHJ5Q2FjaGVBcnJheVB1dEJ5VmFs
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlLCBpbmRleCwgc3R1YkluZm8sIHB1dEtpbmQp
ID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYykgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
R2VuZXJpYykpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVEZWxldGVC
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVs
ZXRlUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChmb3Jj
ZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0KLSAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgIGlmICghYmFzZVZh
bHVlLmlzT2JqZWN0KCkgfHwgIW9sZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpIHx8IG9sZFN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlRGVsZXRlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBpZiAoYmFzZVZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgIGlm
IChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3Jl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBq
c0Nhc3Q8SlNPYmplY3QqPihiYXNlVmFsdWUpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7
Ci0gICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwotCi0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwot
Ci0gICAgICAgIGlmIChzbG90LmlzRGVsZXRlSGl0KCkpIHsKLSAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG5ld09mZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4
aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVp
ZCgpLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgIGlmICghbmV3U3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgfHwgbmV3U3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAgICAgICAgIEFTU0VSVChuZXdPZmZzZXQgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJl
KTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25LaW5kKCkgPT0g
VHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOwotICAgICAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNl
dChuZXdPZmZzZXQpKTsKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVE
ZWxldGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBuZXdPZmZzZXQsIG9sZFN0cnVjdHVy
ZSwgbmV3U3RydWN0dXJlKTsKLSAgICAgICAgfSBlbHNlIGlmIChzbG90LmlzTm9uY29uZmlndXJh
YmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChlY21hTW9kZS5pc1N0cmljdCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRlbGV0ZU5vbkNvbmZp
Z3VyYWJsZSwgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwg
bnVsbHB0cik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVNaXNzLCBwcm9wZXJ0
eU5hbWUsIGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwgeyB9LCBudWxscHRyKTsKLQotICAg
ICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIGVjbWFNb2RlLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwot
Ci0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkRlbEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAgICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hw
b2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0
KTsKLQotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hl
IDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVsZXRlUHJvcGVydHlT
bG90JiBzbG90LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIERlbEJ5S2luZCBraW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKLXsKLSAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotCi0gICAgaWYgKHRyeUNhY2hlRGVsZXRlQnkoZ2xvYmFsT2JqZWN0LCBjb2Rl
QmxvY2ssIHNsb3QsIGJhc2VWYWx1ZSwgb2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHN0dWJJ
bmZvLCBraW5kLCBlY21hTW9kZSkgPT0gR2l2ZVVwT25DYWNoZSkgewotICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkRlbEJ5UmVwbGFjZVdpdGhHZW5lcmljLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JO
dWxsKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5
TmFtZS51aWQoKSkpKTsKLSAgICAgICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQotICAg
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRp
b25EZWxldGVCeUlkR2VuZXJpYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxHZW5l
cmljKTsKLSAgICB9Ci19Ci0KLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFw
cHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlvbihJbkJ5S2luZCBraW5kKQotewotICAgIHN3
aXRjaCAoa2luZCkgewotICAgIGNhc2UgSW5CeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBjYXNlIEluQnlLaW5kOjpQ
cml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1p
emU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWlubGlu
ZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5j
dGlvbihJbkJ5S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgSW5C
eUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5SWRHZW5lcmljOwotICAg
IGNhc2UgSW5CeUtpbmQ6OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeVZhbEdl
bmVyaWM7Ci0gICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25IYXNQcml2YXRlTmFtZUdlbmVyaWM7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUlu
QnkoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwKLSAg
ICBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7
Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVj
dCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghYmFzZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgp
IHx8ICghd2FzRm91bmQgJiYgIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGVGb3JBYnNlbmNlKCkpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7Ci0gICAgICAgIAotICAgICAgICBpZiAod2FzRm91bmQpIHsKLSAgICAgICAgICAgIGlmICgh
c2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJh
c2UtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgIGlmICh3YXNGb3VuZCkgewotICAgICAg
ICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7
Ci0gICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNz
LgotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5z
ZXQKLSAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAg
ICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCi0gICAgICAgICAgICAgICAgJiYgIXNs
b3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNl
bGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRJ
bkJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNhY2hl
U3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3Qp
OwotICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+
ZmxhdHRlbmVkRGljdGlvbmFyeSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKLQotICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90
bykgewotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90
b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgcHJvdG90eXBlQWNjZXNzQ2hh
aW4tPnNsb3RCYXNlU3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFt
ZS51aWQoKSkgPT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwot
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50LmltcGwo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgY29uZGl0
aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkgPT0gc2xvdC5jYWNoZWRPZmZzZXQo
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xv
YmFsT2JqZWN0LCBiYXNlLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgIGlm
IChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgIHByb3RvdHlw
ZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmpl
Y3QsIGJhc2UsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hh
aW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlNaXNzKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91
bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgcHJvcGVydHlOYW1l
LCB3YXNGb3VuZCA/IHNsb3QuY2FjaGVkT2Zmc2V0KCkgOiBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwotCi0gICAg
ICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3
Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAg
ICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7Ci0KLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgaWYgKGtpbmQg
PT0gSW5CeUtpbmQ6OkJ5SWQpCi0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVT
dHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8s
IGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBh
dGNoSW5CeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1l
LCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwotCi0gICAgaWYgKHRyeUNhY2hlSW5CeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9i
amVjdCwgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8sIGtpbmQpID09IEdp
dmVVcE9uQ2FjaGUpIHsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoR2Vu
ZXJpYywgYmFzZU9iamVjdC0+Y2xhc3NJbmZvKGdsb2JhbE9iamVjdC0+dm0oKSksIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKLSAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVu
Y3Rpb24oa2luZCkpOwotICAgIH0KLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElE
LCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFu
ZElELnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUo
Z2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKLQotICAgICAg
ICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKLSAg
ICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAgIHJldHVybiBh
Y3Rpb247Ci0KLSAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nh
c2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBicmFuZElELCBpbnZhbGlkT2Zmc2V0LCBz
dHJ1Y3R1cmUsIHsgfSwgeyB9KTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3Qo
KSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5l
cmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFj
ZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJl
V2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywg
cmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJh
bmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
T2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIGJvb2wgd2Fz
Rm91bmQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVIYXNQcml2
YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHdh
c0ZvdW5kLCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRHZW5l
cmljKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQ2hlY2tQcml2YXRl
QnJhbmQoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsCi0gICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlm
aWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7Ci0KLSAg
ICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2ssIHZtKTsKLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0g
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rp
b24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24g
IT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAg
IGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOwotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNo
ZWNrUHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRl
bnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2Ug
PSBBY2Nlc3NDYXNlOjpjcmVhdGVDaGVja1ByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFu
ZElELCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nh
c2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBi
cmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRl
ZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6Q2hlY2tQcml2YXRl
QnJhbmRSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jh
c2VQcm9wZXJ0eSkpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgp
KTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywg
Y29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3co
KSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaENo
ZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFu
ZElELCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotCi0gICAgaWYgKHRyeUNhY2hlQ2hlY2tQcml2
YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIGJyYW5kSUQsIHN0
dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Ci19
Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVNldFByaXZhdGVCcmFuZCgKLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNP
YmplY3QqIGJhc2UsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVy
IGJyYW5kSUQsCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3Vs
dDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJ
RC51aWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGds
b2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAg
Ci0gICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOwotCi0gICAgICAgIGlmIChvbGRTdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LQotICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBi
YXNlKTsKLSAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAgICAgICAg
IHJldHVybiBhY3Rpb247Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6c2V0QnJhbmRUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29u
Y3VycmVudGx5KG9sZFN0cnVjdHVyZSwgYnJhbmRJRC51aWQoKSk7Ci0gICAgICAgIGlmICghbmV3
U3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAg
aWYgKG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09
IG9sZFN0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnRyYW5zaXRpb25L
aW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlNldEJyYW5kKTsKLSAgICAgICAgQVNTRVJUKG5ld1N0
cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgICAgIAotICAgICAgICBib29sIGlzQmFzZVByb3Bl
cnR5ID0gdHJ1ZTsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJhbmRBZGRB
Y2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVy
dHkpKTsKLQotICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZVNldFByaXZhdGVCcmFuZCh2bSwgY29kZUJsb2NrLCBicmFuZElELCBvbGRTdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2Fz
ZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJy
YW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVk
U29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpTZXRQcml2YXRlQnJh
bmRSZXBsYWNlV2l0aEp1bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jh
c2VQcm9wZXJ0eSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZt
LCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQu
c2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQot
Ci12b2lkIHJlcGF0Y2hTZXRQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOwotCi0gICAgaWYgKHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsICBicmFuZElELCBzdHViSW5m
bykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRHZW5lcmljKTsKLX0KLQotc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5zdGFuY2VPZigKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZh
bHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
Ci0gICAgYm9vbCB3YXNGb3VuZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgCi0gICAgUkVMRUFTRV9B
U1NFUlQodmFsdWVWYWx1ZS5pc0NlbGwoKSk7IC8vIHNob3VsZENvbnNpZGVyQ2FjaGluZyByZWpl
Y3RzIG5vbi1jZWxscy4KLSAgICAKLSAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgCi0gICAgewotICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0g
ICAgICAgIAotICAgICAgICBKU0NlbGwqIHZhbHVlID0gdmFsdWVWYWx1ZS5hc0NlbGwoKTsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS0+c3RydWN0dXJlKHZtKTsKLSAgICAg
ICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0gICAgICAgIEpTT2JqZWN0KiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3RvdHlwZVZhbHVlKTsKLSAgICAg
ICAgaWYgKHByb3RvdHlwZSkgewotICAgICAgICAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEpTT2Jq
ZWN0Kj4odm0sIHZhbHVlKSkgewotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5jZU9m
QWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBB
Y2Nlc3NDYXNlOjpJbnN0YW5jZU9mTWlzcywgc3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpLAotICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUpOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChzdHJ1Y3R1cmUtPnByb3RvdHlwZVF1ZXJpZXNBcmVDYWNoZWFibGUoKSkgewot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUZWFjaCB0aGlzIHRvIGRvIHBvbHkgcHJvdG8uCi0g
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NTY2MwotICAgICAgICAgICAgICAgIHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSwgd2FzRm91bmQgPyBwcm90b3R5cGUgOiBudWxscHRyKTsKLSAgICAgICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JJbnN0YW5jZU9mKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvdG90eXBlLCB3YXNGb3VuZCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICB3YXNG
b3VuZCA/IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZIaXQgOiBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9m
TWlzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBw
cm90b3R5cGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKCFuZXdDYXNlKQotICAgICAgICAgICAgbmV3Q2FzZSA9IEFj
Y2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mR2Vu
ZXJpYywgQ2FjaGVhYmxlSWRlbnRpZmllcigpKTsKLSAgICAgICAgCi0gICAgICAgIExPR19JQygo
SUNFdmVudDo6SW5zdGFuY2VPZkFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IElkZW50aWZpZXIoKSkpOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRk
QWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3Ry
aWN0KCksIG51bGxwdHIsIFdURk1vdmUobmV3Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6Okluc3RhbmNlT2ZSZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElk
ZW50aWZpZXIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRl
ZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICAKLSAgICByZXR1cm4gcmVz
dWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsK
LX0KLQotdm9pZCByZXBhdGNoSW5zdGFuY2VPZigKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVl
IHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCi0gICAgYm9vbCB3
YXNGb3VuZCkKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxz
ZSk7Ci0gICAgaWYgKHRyeUNhY2hlSW5zdGFuY2VPZihnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywg
dmFsdWVWYWx1ZSwgcHJvdG90eXBlVmFsdWUsIHN0dWJJbmZvLCB3YXNGb3VuZCkgPT0gR2l2ZVVw
T25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93
UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKLXsKLSAgICBjYWxsTGlua0luZm8u
c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2RlKCkudGVtcGxhdGUgcmV0YWdn
ZWQ8SlNFbnRyeVB0clRhZz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93UGF0aFRvKFZN
JiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKLXsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHVi
KGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwotfQotCi1zdGF0
aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQot
ewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVh
bFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIGxpbmtTbG93
UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExpbmtJbmZv
LnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1
bmspKTsKLX0KLQotc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25lcihKU0NlbGwqIGNhbGxl
ZSkKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgLy8gRWFjaCBXZWJBc3NlbWJseS5J
bnN0YW5jZSBzaGFyZXMgdGhlIHN0dWJzIGZyb20gdGhlaXIgV2ViQXNzZW1ibHkuTW9kdWxlLCB3
aGljaCBhcmUgdGhlcmVmb3JlIHRoZSBhcHByb3ByaWF0ZSBvd25lci4KLSAgICByZXR1cm4ganND
YXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjYWxsZWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oY2FsbGVlKTsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBudWxscHRyOwotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLX0KLQotdm9pZCBsaW5r
TW9ub21vcnBoaWNDYWxsKAotICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKLSAgICBK
U09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29k
ZVB0cikKLXsKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOwotCi0gICAgQ2FsbEZy
YW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICAvLyBPdXIg
Y2FsbGVyIG11c3QgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcKLSAgICAv
LyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotICAgIEFT
U0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOwotCi0gICAgQ29kZUJsb2NrKiBj
YWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICAvLyBXZWJB
c3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgotICAgIEpT
Q2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5h
c0NlbGwoKSkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwo
KSkgOiBjYWxsZXJDb2RlQmxvY2s7Ci0gICAgQVNTRVJUKG93bmVyKTsKLQotICAgIEFTU0VSVCgh
Y2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRNb25vbW9ycGhp
Y0NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7Ci0gICAgY2FsbExpbmtJbmZvLnNl
dExhc3RTZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKLQotICAgIGlmIChzaG91bGREdW1w
RGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKLSAgICAgICAgZGF0YUxvZygiTGlua2lu
ZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZv
LmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwg
ZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxv
Y2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFt
ZSwgJmNhbGxMaW5rSW5mbyk7Ci0KLSAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9u
S2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkpIHsKLSAg
ICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2Fs
bFRodW5rR2VuZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBsaW5r
U2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLX0KLQotdm9pZCBsaW5rRGlyZWN0Q2FsbCgKLSAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7Ci0g
ICAgCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotCi0gICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDb2Rl
QmxvY2sodm0sIGNhbGxlckNvZGVCbG9jaywganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2Fs
bGVlQ29kZUJsb2NrKSk7Ci0gICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJD
b2RlQmxvY2spKQotICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVP
cmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAi
LCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQ
dHIsICJcbiIpOwotCi0gICAgY2FsbExpbmtJbmZvLnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOwotCi0gICAgaWYgKGNhbGxlZUNv
ZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxG
cmFtZSwgJmNhbGxMaW5rSW5mbyk7Ci19Ci0KLXZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIENvZGVCbG9jayog
Y2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsK
LSAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgbGlua1Nsb3dG
b3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZt
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewotICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJl
Y3QoKSkgewotICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKLSAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkKLSAgICAgICAgICAgIGNhbGxM
aW5rSW5mby5pbml0aWFsaXplRGlyZWN0Q2FsbCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpIHsKLSAgICAgICAgICAgIGxpbmtT
bG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVSZWYpOwotCi0gICAgICAgICAgICBpZiAo
Y2FsbExpbmtJbmZvLnN0dWIoKSkKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0
Q2FsbFRvU3R1YigpOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNhbGxl
ZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgY2FjaGUgYm90aCBmb3IgZGF0YSBh
bmQgY29kZS1iYXNlZCBjYWNoZXMuCi0gICAgfQotICAgIGNhbGxMaW5rSW5mby5jbGVhclNlZW4o
KTsKLSAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFy
U2xvd1N0dWIoKTsKLSAgICBpZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCi0gICAgICAgIGNh
bGxMaW5rSW5mby5yZW1vdmUoKTsKLX0KLQotdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxs
TGlua0luZm8pKTsKLSAgICAKLSAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KCkpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rVmlydHVhbEZvcihWTSYgdm0sIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBDYWxs
RnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotCi0gICAg
ZGF0YUxvZ0xuSWYoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jayksCi0g
ICAgICAgICJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJD
b2RlQmxvY2ssIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCkpKTsKLQotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdmlydHVhbFRo
dW5rRm9yKHZtLCBjYWxsTGlua0luZm8pOwotICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5m
bywgdmlydHVhbFRodW5rKTsKLSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjpjcmVhdGUodm0sIHZpcnR1YWxUaHVuaykpOwotICAgIGNhbGxMaW5rSW5m
by5zZXRDbGVhcmVkQnlWaXJ0dWFsKCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1zdHJ1Y3QgQ2FsbFRv
Q29kZVB0ciB7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Ci19OwotfSAvLyBhbm5vbnltb3VzIG5h
bWVzcGFjZQotCi12b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
LCBDYWxsVmFyaWFudCBuZXdWYXJpYW50KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5r
SW5mby5hbGxvd1N0dWJzKCkpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0K
LSAgICAvLyBEdXJpbmcgZXhlY3V0aW9uIG9mIGxpbmtQb2x5bW9ycGhpY0NhbGwsIHdlIHN0cm9u
Z2x5IGFzc3VtZSB0aGF0IHdlIG5ldmVyIGRvIEdDLgotICAgIC8vIEdDIGpldHRpc29ucyBDb2Rl
QmxvY2tzLCBjaGFuZ2VzIENhbGxMaW5rSW5mbyBldGMuIGFuZCBicmVha3MgYXNzdW1wdGlvbiBk
b25lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBjYWxsLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVm
ZXJHQ0ZvckFXaGlsZSh2bSk7Ci0gICAgCi0gICAgaWYgKCFuZXdWYXJpYW50KSB7Ci0gICAgICAg
IGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBPdXIgY2FsbGVyIG11c3QgYmUgaGF2ZSBhIGNlbGwgZm9y
IGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcKLSAgICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJl
IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCku
aXNDZWxsKCkpOwotCi0gICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFt
ZS0+Y29kZUJsb2NrKCk7Ci0gICAgYm9vbCBpc1dlYkFzc2VtYmx5ID0gaXNXZWJBc3NlbWJseU1v
ZHVsZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpOwotCi0gICAgLy8gV2ViQXNzZW1i
bHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9jay4KLSAgICBKU0NlbGwq
IG93bmVyID0gaXNXZWJBc3NlbWJseSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNh
bGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKLSAgICBBU1NFUlQob3duZXIpOwot
Ci0gICAgQ2FsbFZhcmlhbnRMaXN0IGxpc3Q7Ci0gICAgaWYgKFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lKiBzdHViID0gY2FsbExpbmtJbmZvLnN0dWIoKSkKLSAgICAgICAgbGlzdCA9IHN0dWIt
PnZhcmlhbnRzKCk7Ci0gICAgZWxzZSBpZiAoSlNPYmplY3QqIG9sZENhbGxlZSA9IGNhbGxMaW5r
SW5mby5jYWxsZWUoKSkKLSAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdCB7IENhbGxWYXJp
YW50KG9sZENhbGxlZSkgfTsKLSAgICAKLSAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFu
dChsaXN0LCBuZXdWYXJpYW50KTsKLQotICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY2xvc3VyZSBj
YWxscyB0aGVuIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IGFsbCBvZiB0aGVtIGFzIGNsb3N1cmUg
Y2FsbHMuCi0gICAgLy8gVGhpcyBtYWtlcyBzd2l0Y2hpbmcgb24gY2FsbGVlIGNoZWFwZXIuIEl0
IGFsc28gcHJvZHVjZXMgcHJvZmlsaW5nIHRoYXQncyBlYXNpZXIgb24gdGhlIERGRzsKLSAgICAv
LyB0aGUgREZHIGRvZXNuJ3QgcmVhbGx5IHdhbnQgdG8gZGVhbCB3aXRoIGEgY29tYmluYXRpb24g
b2YgY2xvc3VyZSBhbmQgbm9uLWNsb3N1cmUgY2FsbGVlcy4KLSAgICBib29sIGlzQ2xvc3VyZUNh
bGwgPSBmYWxzZTsKLSAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSAgewotICAg
ICAgICBpZiAodmFyaWFudC5pc0Nsb3N1cmVDYWxsKCkpIHsKLSAgICAgICAgICAgIGxpc3QgPSBk
ZXNwZWNpZmllZFZhcmlhbnRMaXN0KGxpc3QpOwotICAgICAgICAgICAgaXNDbG9zdXJlQ2FsbCA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBp
ZiAoaXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgY2FsbExpbmtJbmZvLnNldEhhc1NlZW5DbG9zdXJl
KCk7Ci0gICAgCi0gICAgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+IGNhbGxDYXNlczsKLSAg
ICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlczsKLSAgICAKLSAgICAvLyBGaWd1cmUgb3V0IHdo
YXQgb3VyIGNhc2VzIGFyZS4KLSAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSB7
Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZh
cmlhbnQuZXhlY3V0YWJsZSgpICYmICF2YXJpYW50LmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rp
b24oKSkgewotICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB2YXJpYW50
LmV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwotICAgICAgICAgICAg
Ly8gSWYgd2UgY2Fubm90IGhhbmRsZSBhIGNhbGxlZSwgZWl0aGVyIGJlY2F1c2Ugd2UgZG9uJ3Qg
aGF2ZSBhIENvZGVCbG9jayBvciBiZWNhdXNlIGFyaXR5IG1pc21hdGNoLAotICAgICAgICAgICAg
Ly8gYXNzdW1lIHRoYXQgaXQncyBiZXR0ZXIgZm9yIHRoaXMgd2hvbGUgdGhpbmcgdG8gYmUgYSB2
aXJ0dWFsIGNhbGwuCi0gICAgICAgICAgICBpZiAoIWNvZGVCbG9jayB8fCBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8uaXNWYXJhcmdzKCkpIHsKLSAgICAg
ICAgICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGludDY0X3QgbmV3Q2FzZVZhbHVlID0gMDsKLSAgICAgICAgaWYgKGlzQ2xvc3VyZUNhbGwp
IHsKLSAgICAgICAgICAgIG5ld0Nhc2VWYWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFy
aWFudC5leGVjdXRhYmxlKCkpOwotICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGFkZCBh
IGZhc3QgcGF0aCBmb3IgSW50ZXJuYWxGdW5jdGlvbiB3aXRoIGNsb3N1cmUgY2FsbC4KLSAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkzMTEK
LSAgICAgICAgICAgIGlmICghbmV3Q2FzZVZhbHVlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9uID0gdmFy
aWFudC5mdW5jdGlvbigpKQotICAgICAgICAgICAgICAgIG5ld0Nhc2VWYWx1ZSA9IGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oZnVuY3Rpb24pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG5ld0Nhc2VWYWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFyaWFudC5pbnRlcm5h
bEZ1bmN0aW9uKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7
Ci0gICAgICAgICAgICBpZiAoY2FzZVZhbHVlcy5jb250YWlucyhuZXdDYXNlVmFsdWUpKSB7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiRVJST1I6IEF0dGVtcHQgdG8gYWRkIGR1cGxpY2F0ZSBj
YXNlIHZhbHVlLlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiRXhpc3RpbmcgY2FzZSB2
YWx1ZXM6ICIpOwotICAgICAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogY2FzZVZhbHVlcykKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZyhjb21tYSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiQXR0ZW1wdGluZyB0byBhZGQ6ICIsIG5ld0Nhc2VW
YWx1ZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiVmFyaWFudCBsaXN0OiAiLCBs
aXN0RHVtcChjYWxsQ2FzZXMpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY2Fs
bENhc2VzLmFwcGVuZChQb2x5bW9ycGhpY0NhbGxDYXNlKHZhcmlhbnQsIGNvZGVCbG9jaykpOwot
ICAgICAgICBjYXNlVmFsdWVzLmFwcGVuZChuZXdDYXNlVmFsdWUpOwotICAgIH0KLSAgICBBU1NF
UlQoY2FsbENhc2VzLnNpemUoKSA9PSBjYXNlVmFsdWVzLnNpemUoKSk7Ci0KLSAgICAvLyBJZiB3
ZSBhcmUgb3ZlciB0aGUgbGltaXQsIGp1c3QgdXNlIGEgbm9ybWFsIHZpcnR1YWwgY2FsbC4KLSAg
ICB1bnNpZ25lZCBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemU7Ci0gICAgaWYgKGlz
V2ViQXNzZW1ibHkpCi0gICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9
IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZvcldlYkFzc2VtYmx5
VG9KUygpOwotICAgIGVsc2UgaWYgKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OnRvcFRpZXJKSVQoKSkKLSAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RT
aXplID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9yVG9wVGll
cigpOwotICAgIGVsc2UKLSAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXpl
ID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKCk7Ci0KLSAgICAv
LyBXZSB1c2UgbGlzdC5zaXplKCkgaW5zdGVhZCBvZiBjYWxsQ2FzZXMuc2l6ZSgpIGJlY2F1c2Ug
d2UgcmVzcGVjdCBDYWxsVmFyaWFudCBzaXplIGZvciBub3cuCi0gICAgaWYgKGxpc3Quc2l6ZSgp
ID4gbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKSB7Ci0gICAgICAgIGxpbmtWaXJ0
dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBWZWN0b3I8Q2FsbFRvQ29kZVB0cj4gY2FsbHMoY2FsbENhc2VzLnNpemUoKSk7
Ci0gICAgVW5pcXVlQXJyYXk8dWludDMyX3Q+IGZhc3RDb3VudHM7Ci0KLSAgICBpZiAoIWlzV2Vi
QXNzZW1ibHkgJiYgY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGll
ckpJVCgpKSB7Ci0gICAgICAgIGZhc3RDb3VudHMgPSBtYWtlVW5pcXVlQXJyYXk8dWludDMyX3Q+
KGNhbGxDYXNlcy5zaXplKCkpOwotICAgICAgICBtZW1zZXQoZmFzdENvdW50cy5nZXQoKSwgMCwg
Y2FsbENhc2VzLnNpemUoKSAqIHNpemVvZih1aW50MzJfdCkpOwotICAgIH0KLSAgICAKLSAgICBH
UFJSZWcgY2FsbGVlR1BSID0gY2FsbExpbmtJbmZvLmNhbGxlZUdQUigpOwotCi0gICAgYm9vbCBp
c0RhdGFJQyA9IGNhbGxMaW5rSW5mby5pc0RhdGFJQygpOwotICAgIENDYWxsSGVscGVycyBzdHVi
Sml0KGNhbGxlckNvZGVCbG9jayk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1
ZmZsZXI+IGZyYW1lU2h1ZmZsZXI7Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVE
YXRhKCkpIHsKLSAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpOwotICAg
ICAgICBmcmFtZVNodWZmbGVyID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlcj4oc3R1Ykpp
dCwgKmNhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNh
bGxlZSBpcyBhIGNlbGwsIGFuZCB3ZSBjYW4KLSAgICAgICAgLy8gdXNlIHRoZSBhZGRpdGlvbmFs
IHJlZ2lzdGVyIHRoaXMgYnV5cyB1cy4KLSAgICAgICAgZnJhbWVTaHVmZmxlci0+YXNzdW1lQ2Fs
bGVlSXNDZWxsKCk7Ci0jZW5kaWYKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+bG9ja0dQUihjYWxs
ZWVHUFIpOwotICAgIH0KLQotICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7Ci0gICAgaWYg
KGlzQ2xvc3VyZUNhbGwpIHsKLSAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCi0gICAgICAgICAg
ICBjb21wYXJpc29uVmFsdWVHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IEFzc2VtYmx5SGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIpOwotICAgIH0gZWxzZQotICAgICAgICBjb21w
YXJpc29uVmFsdWVHUFIgPSBjYWxsZWVHUFI7Ci0KLSAgICBHUFJSZWcgZmFzdENvdW50c0Jhc2VH
UFI7Ci0gICAgaWYgKGZyYW1lU2h1ZmZsZXIpCi0gICAgICAgIGZhc3RDb3VudHNCYXNlR1BSID0g
ZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOwotICAgIGVsc2UgewotICAgICAgICBmYXN0Q291
bnRzQmFzZUdQUiA9Ci0gICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QzKTsKLSAgICB9
Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihmYXN0Q291bnRz
LmdldCgpKSwgZmFzdENvdW50c0Jhc2VHUFIpOwotCi0gICAgaWYgKCFmcmFtZVNodWZmbGVyICYm
IGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgLy8gV2Ugc3Ryb25nbHkgYXNz
dW1lIHRoYXQgY2FsbGVlR1BSIGlzIG5vdCBhIGNhbGxlZSBzYXZlIHJlZ2lzdGVyIGluIHRoZSBz
bG93IHBhdGguCi0gICAgICAgIEFTU0VSVCghY2FsbGVyQ29kZUJsb2NrLT5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCktPmZpbmQoY2FsbGVlR1BSKSk7Ci0gICAgICAgIHN0dWJKaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotICAgIH0KLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7Ci0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2Ug
aGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoR1BSLgot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgp
KQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNh
bGxlZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIpKTsK
LSNlbHNlCi0gICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhl
IGNhbGxlZSBpcyBhIGNlbGwuCi0jZW5kaWYKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGFk
ZCBhIGZhc3QgcGF0aCBmb3IgSW50ZXJuYWxGdW5jdGlvbiB3aXRoIGNsb3N1cmUgY2FsbC4KLSAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVH
UFIpKTsKLQotICAgICAgICBzdHViSml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgY29t
cGFyaXNvblZhbHVlR1BSKTsKLSAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gc3R1YkppdC5i
cmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgY29tcGFyaXNvblZhbHVlR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOwotICAgICAg
ICBzdHViSml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbXBhcmlzb25WYWx1ZUdQ
UiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZyksIGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGhhc0V4ZWN1dGFibGUu
bGluaygmc3R1YkppdCk7Ci0gICAgfQotCi0gICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChj
b21wYXJpc29uVmFsdWVHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50UHRyKTsKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0gICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5h
ZHZhbmNlKHN0dWJKaXQpKSB7Ci0gICAgICAgIHNpemVfdCBjYXNlSW5kZXggPSBiaW5hcnlTd2l0
Y2guY2FzZUluZGV4KCk7Ci0gICAgICAgIAotICAgICAgICBDYWxsVmFyaWFudCB2YXJpYW50ID0g
Y2FsbENhc2VzW2Nhc2VJbmRleF0udmFyaWFudCgpOwotICAgICAgICAKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAgICAgIGlmICh2YXJp
YW50LmV4ZWN1dGFibGUoKSkgewotICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJs
ZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29k
ZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25L
aW5kKCksIHZhcmlhbnQuZnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWNvZGVQdHIpCi0g
ICAgICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRK
SVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQuaW50ZXJuYWxGdW5j
dGlvbigpKTsKLSAgICAgICAgICAgIGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9u
VHJhbXBvbGluZUZvcihDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChmYXN0Q291bnRzKSB7Ci0gICAgICAgICAgICBzdHViSml0LmFkZDMyKAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhmYXN0Q291bnRzQmFzZUdQUiwgY2FzZUluZGV4ICogc2l6ZW9m
KHVpbnQzMl90KSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBuZWVkc0RvbmVKdW1wID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChmcmFtZVNodWZmbGVyKSB7Ci0gICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihzdHViSml0LCBmcmFtZVNodWZmbGVyLT5zbmFwc2hvdCgpKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKLSAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQu
bmVhclRhaWxDYWxsKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENh
bGwoKSkgewotICAgICAgICAgICAgc3R1YkppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0g
ICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzRGF0YUlDKQotICAgICAgICAg
ICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwg
PSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgbmVlZHNEb25lSnVtcCA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5j
b2RlUHRyID0gY29kZVB0cjsKLSAgICAgICAgaWYgKG5lZWRzRG9uZUp1bXApCi0gICAgICAgICAg
ICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7Ci0gICAgfQotICAgIAotICAgIHNsb3dQYXRo
LmxpbmsoJnN0dWJKaXQpOwotICAgIGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpLmxpbmsoJnN0
dWJKaXQpOwotCi0gICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKLSAgICAgICAgZnJhbWVTaHVmZmxl
ci0+cmVsZWFzZUdQUihjYWxsZWVHUFIpOwotICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNl
R1BSKGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VH
UFIoZmFzdENvdW50c0Jhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGZy
YW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCkpOwotI2Vsc2UKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0
Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKLSNlbmRpZgot
ICAgICAgICBmcmFtZVNodWZmbGVyLT5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7Ci0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7Ci0jZW5kaWYKLSAg
ICB9Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxP
YmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGlmIChp
c0RhdGFJQyAmJiAhY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAgICAvLyBXZSB3
ZXJlIGNhbGxlZCBmcm9tIHRoZSBmYXN0IHBhdGgsIGdldCByaWQgb2YgYW55IHJlbW5hbnRzIG9m
IHRoYXQKLSAgICAgICAgLy8gd2hpY2ggbWF5IGV4aXN0LiBUaGlzIHJlYWxseSBvbmx5IG1hdHRl
cnMgZm9yIHg4Niwgd2hpY2ggYWRqdXN0cwotICAgICAgICAvLyBTUCBmb3IgY2FsbHMuCi0gICAg
ICAgIHN0dWJKaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Q0
KTsKLSAgICB9Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
YWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwg
R1BSSW5mbzo6cmVnVDQpOwotICAgIAotICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwotICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBz
bG93ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoc3R1YkppdCwgb3duZXIsIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKSB7Ci0gICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5m
byk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bENhc2VzLnNpemUoKSA9PSBjYWxscy5zaXplKCkpOwotICAgIGZvciAoQ2FsbFRvQ29kZVB0ciBj
YWxsVG9Db2RlUHRyIDogY2FsbHMpIHsKLSNpZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAgLy8g
VGFpbCBjYWxsIHNwZWNpYWwtY2FzaW5nIGVuc3VyZXMgcHJvcGVyIGxpbmtpbmcgb24gQVJNIFRo
dW1iMiwgd2hlcmUgYSB0YWlsIGNhbGwganVtcHMgdG8gYW4gYWRkcmVzcwotICAgICAgICAvLyB3
aXRoIGEgbm9uLWRlY29yYXRlZCBib3R0b20gYml0IGJ1dCBhIG5vcm1hbCBjYWxsIGNhbGxzIGFu
IGFkZHJlc3Mgd2l0aCBhIGRlY29yYXRlZCBib3R0b20gYml0LgotICAgICAgICBib29sIGlzVGFp
bENhbGwgPSBjYWxsVG9Db2RlUHRyLmNhbGwuaXNGbGFnU2V0KENDYWxsSGVscGVyczo6Q2FsbDo6
VGFpbCk7Ci0gICAgICAgIHZvaWQqIHRhcmdldCA9IGlzVGFpbENhbGwgPyBjYWxsVG9Db2RlUHRy
LmNvZGVQdHIuZGF0YUxvY2F0aW9uKCkgOiBjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGws
IEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHRhcmdldCkpKTsKLSNlbHNlCi0g
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxK
U0VudHJ5UHRyVGFnPihjYWxsVG9Db2RlUHRyLmNvZGVQdHIpKTsKLSNlbmRpZgotICAgIH0KLQot
ICAgIGlmICghZG9uZS5lbXB0eSgpKQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNh
bGxMaW5rSW5mby5kb25lTG9jYXRpb24oKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1v
cnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIAotICAgIGF1dG8gc3R1YlJv
dXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAotICAgICAg
ICBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hC
dWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIlBvbHltb3JwaGljIGNh
bGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCi0gICAgICAgICAg
ICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNv
ZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSku
ZGF0YSgpKSwKLSAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCksIGNh
bGxMaW5rSW5mbywgY2FsbENhc2VzLAotICAgICAgICBXVEZNb3ZlKGZhc3RDb3VudHMpKSk7Ci0K
LSAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMs
IGJ1dCBzdGlsbAotICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwg
Y2FsbGVlIHdpbGwgYWx3YXlzCi0gICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCi0gICAgbGlu
a1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci0KLSAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBh
IHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUg
R0MgcnVucyBhbmQgc2VlcwotICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCi0g
ICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOwotICAgIAotICAg
IC8vIFRoZSBjYWxsIGxpbmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2FsbCBjYWNoZSBhcGFydCBm
cm9tIHRoZSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsCi0gICAgLy8gc3R1Yi4KLSAgICBp
ZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUo
KTsKLX0KLQotdm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewotICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5j
dGlvbihraW5kKSk7Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
SWQ6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAgICBjYXNlIEdldEJ5S2lu
ZDo6VHJ5QnlJZDoKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICBjYXNlIEdl
dEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1l
OgotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQotewotICAgIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAg
Y2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKLSAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVj
bHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1
bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlv
blR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7Ci0gICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1p
emVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAg
IGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5j
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7Ci0g
ICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplKTsKLSAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24g
PSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2Rl
QmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKLSAgICAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJp
YyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmljIHx8IHVu
b3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlW
YWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWMgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9w
dGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZh
bFNldFByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBzd2l0Y2ggKGtpbmQpIHsK
LSAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQot
ewotICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKLSAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUp
OwotICAgIGVsc2UKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVu
Y3Rpb24oa2luZCkpOwotICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQotICAgICAgICBJ
bmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8p
OwotICAgIGVsc2UKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJl
c2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNz
OjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKLSAg
ICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFu
ZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewot
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQot
Ci12b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Ci0gICAgSW5s
aW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQsIEpTT2JqZWN0KiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlm
ICghY2FsbGVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoa2luZCAhPSBDb2Rl
Rm9yQ2FsbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGF1dG8qIHdhc21GdW5j
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBjYWxsZWUpKQot
ICAgICAgICByZXR1cm4gd2FzbUZ1bmN0aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtpbmQpOwotICAgIFVOVVNF
RF9QQVJBTShjYWxsZWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTM3N2VlMTBhMmVmODRhMjNkOWVjMmRkNDhj
ZjY4ZDc5YzdkZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCi0jaW5jbHVkZSAi
UHV0S2luZC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotZW51bSBjbGFzcyBHZXRCeUtpbmQgewot
ICAgIEJ5SWQsCi0gICAgQnlWYWwsCi0gICAgVHJ5QnlJZCwKLSAgICBCeUlkV2l0aFRoaXMsCi0g
ICAgQnlJZERpcmVjdCwKLSAgICBQcml2YXRlTmFtZSwKLSAgICBQcml2YXRlTmFtZUJ5SWQsCi19
OwotCi1lbnVtIGNsYXNzIFB1dEJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBCeVZhbCwKLX07Ci0K
LWVudW0gY2xhc3MgRGVsQnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsCi19OwotCi1lbnVt
IGNsYXNzIEluQnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotICAgIFByaXZhdGVOYW1l
Ci19OwotCi12b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwot
dm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIEdldEJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKLXZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2Jq
ZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQs
IFB1dEtpbmQpOwotdm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwotdm9p
ZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7Ci12b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZp
ZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoQ2hl
Y2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENh
Y2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlcGF0Y2hTZXRQ
cml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIFN0cnVj
dHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIHJl
cGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSB2YWx1
ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNGb3VuZCk7
Ci12b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8m
LCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4pOwotdm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwot
dm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgdW5saW5r
Q2FsbChWTSYsIENhbGxMaW5rSW5mbyYpOwotdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwotdm9p
ZCByZXNldEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsK
LXZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2lu
ZCk7Ci12b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxC
eUtpbmQpOwotdm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJ
bkJ5S2luZCk7Ci12b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwotdm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci12b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIEpTT2JqZWN0KiBjYWxsZWUpOwotCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAppbmRleCAyOTcxNDdlMWM0YzA4ZGNjZDVmN2I3ODY0MTFkODU1YjJhMWRlNDdjLi5k
YmQ1YWJkMzc4OGQ3MWI4MDMwNWJiODUxZmJjYzI3MTNlODdiMDBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC0zNDQsNDggKzM0NCwyNSBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1
bmtGb3JSZWd1bGFyQ2FsbChWTSYgdm0pCiAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwg
Q2FsbE1vZGU6OlJlZ3VsYXIsIENvZGVGb3JDYWxsKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yUmVndWxhckNvbnN0cnVj
dChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlJl
Z3VsYXIsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbChWTSYgdm0pCiB7CiAg
ICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlRhaWwsIENvZGVGb3JDYWxs
KTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmly
dHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxU
aHVua0Zvcih2bSwgQ2FsbE1vZGU6OlRhaWwsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCi1zdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JD
b25zdHJ1Y3RDYWxsKFZNJiB2bSkKLXsKLSAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBD
YWxsTW9kZTo6Q29uc3RydWN0LCBDb2RlRm9yQ2FsbCk7Ci19Ci0KIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENvbnN0
cnVjdChWTSYgdm0pCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6
OkNvbnN0cnVjdCwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiB2bSwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0sIENhbGxNb2RlIGNhbGxNb2RlKQogewotICAg
IGF1dG8gbW9kZSA9IGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpOwotICAgIGF1dG8ga2luZCA9IGNh
bGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBhdXRvIGdlbmVyYXRvciA9IFsm
XSAoKSAtPiBUaHVua0dlbmVyYXRvciB7Ci0gICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAg
ICBzd2l0Y2ggKGNhbGxNb2RlKSB7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OlJlZ3VsYXI6Ci0g
ICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7Ci0gICAgICAgICAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yUmVndWxhckNvbnN0cnVjdDsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1
bmtGb3JSZWd1bGFyQ2FsbDsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoKLSAgICAgICAg
ICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgICAgIHJldHVybiB2aXJ0
dWFsVGh1bmtGb3JUYWlsQ2FsbDsKLSAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JU
YWlsQ29uc3RydWN0OworICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclRhaWxDYWxs
OwogICAgICAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9y
Q29uc3RydWN0Q2FsbDsKICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1
Y3RDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4
IDBmOWY2ZTJkMzZmNmRkMjNlMTg3MjZhY2U2MzE0YTMwYTIwMWRiY2UuLmFiN2NmNjZjNDIxNTFl
ZTAxOTU4YzFhYjIyZjI5ZmNkOGRkNzAxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaApAQCAtNDksNyArNDksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cihWTQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxp
bmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYsIENhbGxMaW5r
SW5mbyYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0
dWFsVGh1bmtGb3IoVk0mLCBDYWxsTW9kZSk7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0mKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggZThkYWZmN2Q4OGIzMGM2
YmY4NDcyMzE0YmUyZjFjNzk2MGYyNDdmNS4uZDBiMzczODkyMWE0ZjAwMTUxMmU3ZGVlM2E4NDQz
YzUxOTNiZDI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAK
QEAgLTU4LDYgKzU4LDcgQEAgZXh0ZXJuICJDIiB2b2lkIHdhc21fZW50cnkodm9pZCosIHZvaWQq
LCB2b2lkKik7CiBleHRlcm4gIkMiIHZvaWQgdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUo
dm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZSh2b2lkKTsK
IGV4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUodm9pZCk7
CitleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZSh2
b2lkKTsKIGV4dGVybiAiQyIgdm9pZCBleGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZSh2b2lkKTsK
IGV4dGVybiAiQyIgdm9pZCByZXR1cm5Gcm9tTExJbnRUcmFtcG9saW5lKHZvaWQpOwogI2VuZGlm
CkBAIC0xNTMsNyArMTU0LDcgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHN0
YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAg
ICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRy
VGFnKSk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUo
SlNFbnRyeVB0clRhZywgdHJ1ZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlUmVm
LmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZv
aWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsSlNF
bnRyeVRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlQdHJUYWcpXT0gY29kZVJl
Zi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKQEAgLTE2MSwxMSArMTYyLDE5IEBA
IHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJv
eWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVm
OwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNv
bnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSk7CisgICAg
ICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRh
ZywgdHJ1ZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rp
b25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsSlNFbnRyeVNsb3dQYXRo
VHJhbXBvbGluZSkpKSk7CiAgICAgICAgIGdfanNjQ29uZmlnLmxsaW50LmdhdGVNYXBbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoUHRyVGFnKV0gPSBj
b2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KKyAgICB7Cisg
ICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5h
dGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VK
SVQoKSkKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRhaWxDYWxsR2F0ZShK
U0VudHJ5UHRyVGFnLCBmYWxzZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlUmVm
LmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdDb2RlUHRyPHZv
aWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRhaWxDYWxsV2l0
aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUpKSkpOworICAgICAgICBnX2pzY0NvbmZpZy5sbGlu
dC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbFdpdGhvdXRVbnRh
Z0pTRW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKKyAgICB9CiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCAxYTk1ZDFkZDBlYTVlZjM0MzEwNjE1YjY5MWViYzlh
MWVhYjgyYTZhLi5mOWQxZGI1YTQ2OTM0YzY2NzE2ZWY2NzU4MGE1YzVhMjI4YzFkNGI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTYy
LDYgKzYyLDcgQEAKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2lu
Y2x1ZGUgIlByb3RvQ2FsbEZyYW1lSW5saW5lcy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgorI2luY2x1ZGUgIlJlcGF0Y2hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5o
IgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgpAQCAt
NTgyLDYgKzU4MywxNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19jaGVjaykKICAgICBM
TElOVF9SRVRVUk5fVFdPKHBjLCBjYWxsRnJhbWUpOwogfQogCitleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBsbGludF9saW5rX2NhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNDZWxs
KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqKQorewor
ICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpLCBjYWxsTGlua0luZm8pOworfQorCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0
dXJuVHlwZSBsbGludF92aXJ0dWFsX2NhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNDZWxs
KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqKQorewor
ICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOworICAgIHJldHVybiB2aXJ0
dWFsRm9yV2l0aEZ1bmN0aW9uKGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCks
IGNhbGxlZUZyYW1lLCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7
Cit9CisKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfb2JqZWN0KQogewogICAg
IExMSU5UX0JFR0lOKCk7CkBAIC0xODE5LDcgKzE4MzEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2Fs
bGVlLAogICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUp
KTsKICAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxl
ZUZyYW1lKTsKICAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgICAg
IExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRI
b3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJh
bWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgICAgICBMTElO
VF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRy
eVB0clRhZyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNsb3dQYXRoTG9nKCJDYWxs
IGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4MzgsNyAr
MTg1MSw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZy
YW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsCiAgICAgICAgIGNhbGxlZUZyYW1lLT5z
ZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJl
dHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVl
KS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUpOwogICAgICAgICBEaXNhbGxvd0dDIGRp
c2FsbG93R0M7Ci0gICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVl
RnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgYXV0byogY2FsbGVy
U1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAg
ICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6Omdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOwogICAgIH0KICAgICAKICAgICBzbG93UGF0aExvZygiQ29uc3Ry
dWN0b3IgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBjYWxsZWUsICJcbiIpOwpAQCAtMTg0
Nyw3ICsxODYxLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICBMTElOVF9DQUxMX1RI
Uk9XKGdsb2JhbE9iamVjdCwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0
LCBjYWxsZWUpKTsKIH0KIAotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2Fs
bEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU1ZhbHVl
IGNhbGxlZUFzVmFsdWUsIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBudWxscHRy
KQoraW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVG
cmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUp
CiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUo
KTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CkBAIC0xODU5LDE3ICsxODczLDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0
VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAg
CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVl
QXNWYWx1ZSk7CiAgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkgewotICAgICAgICBpZiAo
YXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+
KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAgICBpZiAoY2FsbGVlQXNWYWx1ZS5pbmhlcml0
czxJbnRlcm5hbEZ1bmN0aW9uPih2bSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRy
YW1wb2xpbmVGb3Ioa2luZCk7CiAgICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLQotICAg
ICAgICAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjYWxsZXJDb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5saW5rKHZtLCBjYWxs
ZXJDb2RlQmxvY2ssIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwotICAgICAgICAgICAgfQot
CiAgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2Jh
bE9iamVjdCwgY2FsbGVlRnJhbWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRy
eVB0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2Fs
bGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgICAgICAgICAgTExJTlRfQ0FMTF9S
RVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygp
LCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoY2FsbGVlRnJhbWUsIGNhbGxlZUFzVmFsdWUsIGtp
bmQpKTsKICAgICB9CkBAIC0xOTA0LDc0ICsxOTEzLDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9u
S2kKICAgICB9CiAKICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAKLSAgICBpZiAoIUxMSU5U
X0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8pIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjYWxsZXJDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGNhbGxM
aW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwotICAg
ICAgICBpZiAoY29kZUJsb2NrKQotICAgICAgICAgICAgY29kZUJsb2NrLT5saW5rSW5jb21pbmdD
YWxsKGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICB9Ci0KICAgICBhc3NlcnRJc1RhZ2dl
ZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBM
TElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lLCBPcCYmIGJ5dGVjb2RlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCA9IDApCi17Ci0gICAgLy8g
VGhpcyBuZWVkcyB0bzoKLSAgICAvLyAtIFNldCB1cCBhIGNhbGwgZnJhbWUuCi0gICAgLy8gLSBG
aWd1cmUgb3V0IHdoYXQgdG8gY2FsbCBhbmQgY29tcGlsZSBpdCBpZiBuZWNlc3NhcnkuCi0gICAg
Ly8gLSBJZiBwb3NzaWJsZSwgbGluayB0aGUgY2FsbCdzIGlubGluZSBjYWNoZS4KLSAgICAvLyAt
IFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBu
ZXcgY2FsbCBmcmFtZS4KLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBnZXRPcGVy
YW5kKGNhbGxGcmFtZSwgY2FsbGVlRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpKTsKLSAg
ICAKLSAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gc3RhY2tPZmZzZXRJ
blJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnRJbmRleCk7Ci0gICAgCi0gICAg
Y2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpKTsKLSAgICBjYWxsZWVG
cmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkg
PSBjYWxsZWVBc1ZhbHVlOwotICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJh
bWUpOwotICAgIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKTsKLSAgICByZXR1cm4gc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1Zh
bHVlLCAmY2FsbExpbmtJbmZvRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50SW5kZXgpKTsKLX0KLQot
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU5f
Tk9fU0VUX1BDKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1l
LCBwYy0+YXM8T3BDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfdGFpbF9jYWxsKQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygp
OwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9w
VGFpbENhbGw+KCksIENvZGVGb3JDYWxsKSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9jb25zdHJ1Y3QpCi17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BDb25zdHJ1
Y3Q+KCksIENvZGVGb3JDb25zdHJ1Y3QpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVO
VVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRv
ck9wZW4+KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbCkpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsKQotewot
ICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0KLSAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBj
YWxsRnJhbWUsIHBjLT5hczxPcEl0ZXJhdG9yTmV4dD4oKSwgQ29kZUZvckNhbGwsIE9wSXRlcmF0
b3JOZXh0Ojpjb21wdXRlTmV4dCkpOworICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUg
KyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRfQ0FMTF9SRVRV
Uk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBK
U0VudHJ5UHRyVGFnKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NpemVf
ZnJhbWVfZm9yX3ZhcmFyZ3MpCkBAIC0yMDQzLDggKzE5ODcsOCBAQCBlbnVtIGNsYXNzIFNldEFy
Z3VtZW50c1dpdGggewogICAgIEN1cnJlbnRBcmd1bWVudHMKIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kLCBTZXRBcmd1bWVudHNXaXRoIHNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIE9wLCBTZXRB
cmd1bWVudHNXaXRoIHNldD4KK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVw
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpCiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7CiAKQEAgLTIwNTMs
MTEgKzE5OTcsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgIC8vIC0gUmV0dXJuIGEg
dHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3MgdG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZy
YW1lLgogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcD4oKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgSlNWYWx1ZSBjYWxsZWVB
c1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKTsKIAogICAg
IENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSB2bS5uZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZTsKLQot
ICAgIGlmIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KSB7CisgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2bS52YXJhcmdzTGVuZ3RoICsgMTsKKyAgICBp
ZiBjb25zdGV4cHIgKHNldCA9PSBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpIHsKICAgICAgICAg
c2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYWxs
ZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgZ2V0
T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKSwgYnl0ZWNvZGUubV9maXJz
dFZhckFyZywgdm0udmFyYXJnc0xlbmd0aCk7CiAgICAgICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhD
RVBUSU9OKGdsb2JhbE9iamVjdCk7CiAgICAgfSBlbHNlCkBAIC0yMDY3LDI3ICsyMDEyLDMwIEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwogICAg
IGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7
CisgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8udXBkYXRlTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworCisgICAgYXV0byogY2FsbGVy
U1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAg
ICBMTElOVF9SRVRVUk5fVFdPKHBjLCBjYWxsZXJTUCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxP
cENhbGxWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCwgU2V0QXJndW1lbnRzV2l0
aDo6T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ2FsbFZhcmFyZ3MsIFNldEFy
Z3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MpCiB7Ci0gICAg
cmV0dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29k
ZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NT
ZXR1cDxPcFRhaWxDYWxsVmFyYXJncywgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJh
bWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiB7Ci0gICAgcmV0dXJuIHZhcmFyZ3NTZXR1
cDxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGws
IFNldEFyZ3VtZW50c1dpdGg6OkN1cnJlbnRBcmd1bWVudHMpOworICAgIHJldHVybiB2YXJhcmdz
U2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIFNldEFyZ3VtZW50c1dpdGg6OkN1cnJl
bnRBcmd1bWVudHM+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF92YXJhcmdzKQogewotICAgIHJldHVybiB2
YXJhcmdzU2V0dXA8T3BDb25zdHJ1Y3RWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29u
c3RydWN0LCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0
dXA8T3BDb25zdHJ1Y3RWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFt
ZSwgcGMsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiog
cGMsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXR1cm5Qb2ludCkKQEAg
LTIxMTAsNyArMjA1OCw4IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2
YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgdm0u
ZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoZXZhbChnbG9iYWxP
YmplY3QsIGNhbGxlZUZyYW1lLCBieXRlY29kZS5tX2VjbWFNb2RlKSk7CiAgICAgRGlzYWxsb3dH
QyBkaXNhbGxvd0dDOwotICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVl
RnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBhdXRvKiBjYWxsZXJTUCA9
IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgIExM
SU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0Vu
dHJ5UHRyVGFnKTsKIH0KICAgICAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxs
X2V2YWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCmlu
ZGV4IGUyMGEwZGZjNmI4N2FjZDYyMjY4ZTg4YWE2YWE5NjRmYjZlMDliNjYuLmQ0MzhmY2IzMzlk
YWZlMzdhM2MxNDFkYmUyNGE2YWQyMTEyOWJiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0zOCw2ICszOCw4IEBAIG5hbWVzcGFjZSBMTElu
dCB7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX29wZXJhbmQo
Q2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBpbnQgb3BlcmFu
ZCkgUkVGRVJFTkNFRF9GUk9NX0FTTTsKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxs
aW50X3RyYWNlX3ZhbHVlKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IGZyb21X
aGVyZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CitleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF9saW5rX2NhbGwoQ2FsbEZyYW1lKiwgSlND
ZWxsKiwgQ2FsbExpbmtJbmZvKiwgSlNDZWxsKik7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBsbGludF92aXJ0dWFsX2NhbGwoQ2FsbEZyYW1lKiwgSlNDZWxsKiwgQ2FsbExpbmtJbmZv
KiwgSlNDZWxsKik7CiBleHRlcm4gIkMiIHZvaWQgbGxpbnRfd3JpdGVfYmFycmllcl9zbG93KENh
bGxGcmFtZSosIEpTQ2VsbCopIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOwogCiAj
ZGVmaW5lIExMSU5UX1NMT1dfUEFUSF9ERUNMKG5hbWUpIFwKQEAgLTExOSw5ICsxMjEsNiBAQCBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5
bmNfZnVuYyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19hc3lu
Y19mdW5jX2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NldF9m
dW5jdGlvbl9uYW1lKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2Fs
bCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCk7Ci1M
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdCk7CiBMTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MpOwog
TExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3
YXJkX2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2Nh
bGxfdmFyYXJncyk7CkBAIC0xMzEsOCArMTMwLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2NhbGxfZXZhbF93aWRlMTYpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTMyKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfdGVhcl9vZmZfYXJndW1lbnRzKTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfc3RyY2F0KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuY3BwCmluZGV4IDQ2MmNiZmJlNGUzNDU2ODQ1ZTA1YWE4YmMwYzQ4MTE1M2Ni
YjhkMGEuLjE2MDNjMmM3ODU0Yzk5OWJlOWU2YzU3MDUzMzZjZmY3NDI3MjkwYjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcApAQCAtMzQ2LDkgKzM0Niw5
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZUpT
R2F0ZVRodW5rKHZvaWQqIHBvaW50ZXIsIFB0CiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAot
ICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QzLCB0YWcpOwotICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIGppdC5m
YXJKdW1wKEdQUkluZm86OnJlZ1QzLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQ
UkluZm86OnJlZ1Q1LCB0YWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDUpOworICAgIGppdC5mYXJKdW1wKEdQUkluZm86
OnJlZ1Q1LCBPcGVyYXRpb25QdHJUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRh
ZywgIkxMSW50ICVzIGNhbGwgZ2F0ZSB0aHVuayIsIG5hbWUpOwpAQCAtMzY2LDEzICszNjYsMTUg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlV2Fz
bUdhdGVUaHVuayh2b2lkKiBwb2ludGVyLAogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyB3YXNtIGNhbGwgZ2F0ZSB0
aHVuayIsIG5hbWUpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZykKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcgdGFn
LCBib29sIHVudGFnKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQudW50YWdQ
dHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBBUk02NFJlZ2lzdGVyczo6bHIpOwotICAgIGppdC52
YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIyKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMCwgdGFnKTsKKyAgICBpZiAodW50
YWcpIHsKKyAgICAgICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKKyAgICAgICAgaml0LnZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdp
c3RlcnM6OmxyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIH0KKyAgICBqaXQuZmFySnVt
cChHUFJJbmZvOjphcmd1bWVudEdQUjcsIHRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpMTEludFRodW5r
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnLCAiTExJbnQgdGFpbCBjYWxsIGdhdGUgdGh1bmsiKTsKQEAgLTU3Myw4ICs1NzUsOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmV0dXJuTG9jYXRpb25UaHVu
ayhPcGNvZGVJRCBvcGNvZGVJRCwgT3BjbwogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9p
dGVyYXRvcl9vcGVuKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9pdGVyYXRvcl9uZXh0
KQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3QpCi0gICAgTExJTlRfUkVU
VVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KQotICAgIExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93KQorICAgIExMSU5UX1JFVFVSTl9MT0NBVElP
TihvcF9jYWxsX3ZhcmFyZ3MpCisgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVj
dF92YXJhcmdzKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlfaWQpCiAgICAg
TExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV92YWwpCiAgICAgTExJTlRfUkVUVVJOX0xP
Q0FUSU9OKG9wX3B1dF9ieV9pZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmgKaW5kZXggYjg3YzQyMGNiZTQwMmExZjBjZjA4NjgxMDdiNWFmZDZkYmNmNTRhYy4uMDVl
YzYwMWMwMTY0Y2I5NTRiNzNhMjFjNzM1MWZmMDEwZmVhNzEwYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKQEAgLTg4LDcgKzg4LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gaml0Q2FnZVB0clRodW5rKCk7CiAjaWYg
Q1BVKEFSTTY0RSkKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGNyZWF0ZUpTR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmso
dm9pZCosIFB0clRhZywgY29uc3QgY2hhciopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2
ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyk7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRy
VGFnLCBib29sKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGxvb3BPU1JFbnRyeUdhdGVUaHVuaygpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRv
SklUR2F0ZVB0clRhZz4gZW50cnlPU1JFbnRyeUdhdGVUaHVuaygpOwogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gd2FzbU9TUkVudHJ5R2F0ZVRodW5rKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KaW5kZXggYmI4OGI2ZmRiMDk5YjQ5OWFlNmZmNGU4MTAxMDE1MDRkYWE2ZDRlMy4uMzA3YjQx
ZjE3YWYzODg2ZjYzYmQ4YTg2NGI1M2JhYzVkNTQ4NGE3YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtNTUxLDYgKzU1
MSw3IEBAIGNvbnN0IFN5bWJvbFR5cGUgPSBjb25zdGV4cHIgU3ltYm9sVHlwZQogY29uc3QgT2Jq
ZWN0VHlwZSA9IGNvbnN0ZXhwciBPYmplY3RUeXBlCiBjb25zdCBGaW5hbE9iamVjdFR5cGUgPSBj
b25zdGV4cHIgRmluYWxPYmplY3RUeXBlCiBjb25zdCBKU0Z1bmN0aW9uVHlwZSA9IGNvbnN0ZXhw
ciBKU0Z1bmN0aW9uVHlwZQorY29uc3QgSW50ZXJuYWxGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIg
SW50ZXJuYWxGdW5jdGlvblR5cGUKIGNvbnN0IEFycmF5VHlwZSA9IGNvbnN0ZXhwciBBcnJheVR5
cGUKIGNvbnN0IERlcml2ZWRBcnJheVR5cGUgPSBjb25zdGV4cHIgRGVyaXZlZEFycmF5VHlwZQog
Y29uc3QgUHJveHlPYmplY3RUeXBlID0gY29uc3RleHByIFByb3h5T2JqZWN0VHlwZQpAQCAtMTE1
MSwyNyArMTE1MiwyNyBAQCBtYWNybyBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6
ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaQogICAgICAgICBjbG9vcENh
bGxKU0Z1bmN0aW9uIGNhbGxlZQogICAgIGVsc2lmIEFSTTY0RQogICAgICAgICBtYWNybyBjYWxs
TmFycm93KCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zm
c2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSUpICog
UHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcg
IyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6
Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUl
KSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUl
OgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZworICAgICAgICAgICAgY2FsbCB0NSwg
Y2FsbFB0clRhZwogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBjYWxsV2lkZTE2KCkKLSAg
ICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25m
aWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNp
emUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2Fs
bFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZz
ZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJV93aWRl
MTYpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBvbGluZV8lb3Bjb2RlTmFt
ZSVfd2lkZTE2OgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZworICAgICAgICAgICAg
Y2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBjYWxsV2lk
ZTMyKCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0
T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMy
KSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIg
SlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVO
YW1lJV93aWRlMzIpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBbYTddLCBOYXRpdmVU
b0pJVEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNfdHJhbXBvbGluZV8l
b3Bjb2RlTmFtZSVfd2lkZTMyOgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZworICAg
ICAgICAgICAgY2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAotICAgICAgICBtb3Zl
IGNhbGxlZSwgdDMKKyAgICAgICAgbW92ZSBjYWxsZWUsIHQ1CiAgICAgICAgIHNpemUoY2FsbE5h
cnJvdywgY2FsbFdpZGUxNiwgY2FsbFdpZGUzMiwgbWFjcm8gKGdlbikgZ2VuKCkgZW5kKQogICAg
IGVsc2UKICAgICAgICAgY2FsbCBjYWxsZWUsIGNhbGxQdHJUYWcKQEAgLTEyMDksMTIgKzEyMTAs
MjMgQEAgbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmkKICAgICBlbmQKIGVuZAogCi1tYWNybyBwcmVw
YXJlRm9yUmVndWxhckNhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2Fs
bFB0clRhZykKLSAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorbWFjcm8gcHJlcGFy
ZUZvclJlZ3VsYXJDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KQogZW5kCiAKLSMgc3Ag
cG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUKLW1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUs
IHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQorbWFjcm8gaW52b2tlRm9y
UmVndWxhckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBj
YWxsUHRyVGFnKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNv
ZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gs
IGNhbGxlZSwgY2FsbFB0clRhZykKK2VuZAorCisjIHQ1IGlzIG1ldGFkYXRhCittYWNybyBwcmVw
YXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxQ
dHJUYWcpCitlbmQKKworbWFjcm8gcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCgpCitlbmQKKwor
IyBzcCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZSArIENhbGxlckZyYW1lQW5kUENTaXplCisjIFdl
IGxlYXZlIGNmciB0ZW1wNCB0byB1c2UgaXQgZm9yIHVudGFnZ2luZy4KK21hY3JvIHByZXBhcmVG
b3JUYWlsQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKICAgICByZXN0b3JlQ2FsbGVl
U2F2ZXNVc2VkQnlMTEludCgpCiAKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXNbY2ZyXSwgdGVtcDIKQEAgLTEyMzIsMTggKzEyNDQsMTcgQEAgbWFj
cm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQs
IGNhbGxQdHJUYWcpCiAgICAgbW92ZSBjZnIsIHRlbXAxCiAgICAgYWRkcCB0ZW1wMiwgdGVtcDEK
IAotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1tz
cF0sIHRlbXAyCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIC0gQ2FsbGVyRnJhbWVBbmRQQ1NpemVbc3BdLCB0ZW1wMgogICAgICMgV2UgYXNzdW1l
IDwgMl4yOCBhcmd1bWVudHMKICAgICBtdWxpIFNsb3RTaXplLCB0ZW1wMgogICAgIGFkZGkgU3Rh
Y2tBbGlnbm1lbnQgLSAxICsgQ2FsbEZyYW1lSGVhZGVyU2l6ZSwgdGVtcDIKICAgICBhbmRpIH5T
dGFja0FsaWdubWVudE1hc2ssIHRlbXAyCiAKICAgICBpZiBBUk12NyBvciBBUk02NCBvciBBUk02
NEUgb3IgQ19MT09QIG9yIENfTE9PUF9XSU4gb3IgTUlQUyBvciBSSVNDVjY0Ci0gICAgICAgIGFk
ZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAgICAgICAgIHN1YmkgQ2FsbGVyRnJhbWVBbmRQ
Q1NpemUsIHRlbXAyCiAgICAgICAgIGxvYWRwIENhbGxlckZyYW1lQW5kUEM6OnJldHVyblBDW2Nm
cl0sIGxyCiAgICAgZWxzZQotICAgICAgICBhZGRwIFB0clNpemUsIHNwCisgICAgICAgIHN1YnAg
UHRyU2l6ZSwgc3AKICAgICAgICAgc3ViaSBQdHJTaXplLCB0ZW1wMgogICAgICAgICBsb2FkcCBQ
dHJTaXplW2Nmcl0sIHRlbXAzCiAgICAgICAgIHN0b3JlcCB0ZW1wMywgW3NwXQpAQCAtMTI3MCw5
ICsxMjgxLDEyIEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1w
MiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIGVuZAogCiAgICAgbW92ZSB0ZW1wMSwg
c3AKK2VuZAorCittYWNybyBpbnZva2VGb3JUYWlsQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNv
ZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gs
IGNhbGxlZSwgbWF5YmVPbGRDRlIsIGNhbGxQdHJUYWcpCiAgICAgaWYgQVJNNjRFCi0gICAgICAg
IG1vdmUgdGVtcDQsIGEyCi0gICAgICAgIG1vdmUgY2FsbGVlLCBhMAorICAgICAgICBtb3ZlIG1h
eWJlT2xkQ0ZSLCBhMgorICAgICAgICBtb3ZlIGNhbGxlZSwgYTcKICAgICAgICAgbGVhcCBKU0ND
b25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3Rl
eHByIEdhdGU6OnRhaWxDYWxsJWNhbGxQdHJUYWclKSAqIFB0clNpemUsIGExCiAgICAgICAgIGpt
cCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyAlY2FsbFB0clRhZyUKICAgICBlbHNlCkBA
IC0xMjgwLDYgKzEyOTQsMjIgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVt
cDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCiAgICAgZW5kCiBlbmQKIAorIyB0
NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorICAgIGlmIEFSTTY0RQorICAgICAgICBsb2Fk
cCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCBhNworICAgICAgICBsZWFwIEpTQ0NvbmZpZyAr
IGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0
ZTo6dGFpbENhbGxXaXRob3V0VW50YWclY2FsbFB0clRhZyUpICogUHRyU2l6ZSwgYTEKKyAgICAg
ICAgam1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjICVjYWxsUHRyVGFnJQorICAgIGVs
c2UKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5m
by51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTEKKyAgICAgICAg
am1wIGExLCBjYWxsUHRyVGFnCisgICAgZW5kCitlbmQKKworbWFjcm8gcHJlcGFyZUZvclNsb3dU
YWlsQ2FsbCgpCisgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQorZW5kCisKIG1h
Y3JvIHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAgICAgc2xvd1BhdGhGb3JDYWxsKG9w
Y29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gs
IHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKIGVuZApAQCAtMTI5MSw3ICsxMzIxLDcgQEAgbWFjcm8g
c2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHUKICAgICAgICAgbWFjcm8gKGNhbGxlZSwgY2FsbGVlRnJhbWVQdHIp
CiAgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQCiAgICAgICAg
ICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAotICAgICAgICAgICAgcHJlcGFyZUNhbGwoY2Fs
bGVlLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQorICAgICAgICAgICAg
cHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCiAgICAgICAgIC5kb250VXBkYXRlU1A6CiAgICAg
ICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwg
Y2FsbGVlLCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpCiAgICAgICAgIGVuZCkKQEAgLTE4MjAsMTIg
KzE4NTAsMTYgQEAgaWYgQVJNNjRFCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpTRW50cnlUcmFtcG9s
aW5lCiAgICAgX3RhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmU6CiAgICAgICAgIHVudGFnUmV0dXJu
QWRkcmVzcyBhMgotICAgICAgICBqbXAgYTAsIEpTRW50cnlQdHJUYWcKKyAgICAgICAgam1wIGE3
LCBKU0VudHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX3RhaWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJh
bXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmU6CiAgICAgICAg
IHVudGFnUmV0dXJuQWRkcmVzcyBhMgotICAgICAgICBqbXAgYTAsIEpTRW50cnlTbG93UGF0aFB0
clRhZworICAgICAgICBqbXAgYTcsIEpTRW50cnlQdHJUYWcKKworICAgIGdsb2JhbCBfdGFpbENh
bGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZQorICAgIF90YWlsQ2FsbFdpdGhvdXRVbnRh
Z0pTRW50cnlUcmFtcG9saW5lOgorICAgICAgICBqbXAgYTcsIEpTRW50cnlQdHJUYWcKIAogICAg
IGdsb2JhbCBfZXhjZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUKICAgICBfZXhjZXB0aW9uSGFuZGxl
clRyYW1wb2xpbmU6CkBAIC0yMzI1LDE3ICsyMzU5LDE3IEBAIGVuZCkKIAogCiAjIHdlIGNhbid0
IHVzZSBjYWxsT3AgYmVjYXVzZSB3ZSBjYW4ndCBwYXNzIGBjYWxsYCBhcyB0aGUgb3Bjb2RlIG5h
bWUsIHNpbmNlIGl0J3MgYW4gaW5zdHJ1Y3Rpb24gbmFtZQotY29tbW9uQ2FsbE9wKG9wX2NhbGws
IF9sbGludF9zbG93X3BhdGhfY2FsbCwgT3BDYWxsLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIG1h
Y3JvIChnZXR1LCBtZXRhZGF0YSkKK2NvbW1vbkNhbGxPcChvcF9jYWxsLCBfbGxpbnRfc2xvd19w
YXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFy
Q2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVn
dWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBhcnJheVByb2ZpbGVGb3JDYWxs
KE9wQ2FsbCwgZ2V0dSkKIGVuZCkKIAogCi1tYWNybyBjYWxsT3Aob3Bjb2RlTmFtZSwgb3Bjb2Rl
U3RydWN0LCBwcmVwYXJlQ2FsbCwgZm4pCi0gICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1l
JSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNh
bGwsIGZuKQorbWFjcm8gY2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNh
bGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBmbikK
KyAgICBjb21tb25DYWxsT3Aob3BfJW9wY29kZU5hbWUlLCBfbGxpbnRfc2xvd19wYXRoXyVvcGNv
ZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBv
bHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIGZuKQogZW5kCiAKIAotY2FsbE9wKHRhaWxfY2Fs
bCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEp
CitjYWxsT3AodGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIGludm9r
ZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFyZUZvclNs
b3dUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogICAgIGFycmF5UHJvZmlsZUZvckNh
bGwoT3BUYWlsQ2FsbCwgZ2V0dSkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQog
ICAgICMgcmVsb2FkIG1ldGFkYXRhIHNpbmNlIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgp
IG1pZ2h0IGhhdmUgdHJhc2hlZCB0NQpAQCAtMjM0Myw3ICsyMzc3LDcgQEAgY2FsbE9wKHRhaWxf
Y2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRh
dGEpCiBlbmQpCiAKIAotY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCitjYWxsT3AoY29uc3RydWN0
LCBPcENvbnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2Fs
bCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxh
ckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQogCiAKIG1hY3JvIGJyYW5jaElmRXhj
ZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKQEAgLTIzNTQsNDcgKzIzODgsMjkgQEAgbWFjcm8gYnJh
bmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQogLm5vRXhjZXB0aW9uOiAgICAKIGVuZAog
Ci1tYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlz
cGF0Y2gsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLSAgICBjYWxsU2xv
d1BhdGgoZnJhbWVTbG93UGF0aCkKLSAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3df
ZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKLSAgICAjIGNhbGxlZUZyYW1lIGluIHIxCi0gICAg
aWYgSlNWQUxVRTY0Ci0gICAgICAgIG1vdmUgcjEsIHNwCi0gICAgZWxzZQotICAgICAgICAjIFRo
ZSBjYWxsZWVGcmFtZSBpcyBub3Qgc3RhY2sgYWxpZ25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZy
YW1lQW5kUENTaXplIHRvIGFsaWduCi0gICAgICAgIGlmIEFSTXY3Ci0gICAgICAgICAgICBzdWJw
IHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgdDIKLSAgICAgICAgICAgIG1vdmUgdDIsIHNwCi0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBz
cAotICAgICAgICBlbmQKLSAgICBlbmQKLSAgICBzbG93UGF0aEZvckNvbW1vbkNhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxs
KQotZW5kCi0KIAotbGxpbnRPcChvcF9jYWxsX3ZhcmFyZ3MsIE9wQ2FsbFZhcmFyZ3MsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdz
LCBzaXplLCBPcENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2Zy
YW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9jYWxsX3ZhcmFyZ3MsIE9wQ2Fs
bFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQor
ICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY2FsbF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ2FsbFZhcmFy
Z3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0
aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX2NhbGxfdmFyYXJncywg
cHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBv
bHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwpCiBlbmQpCiAK
LWxsaW50T3Aob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdzLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfdGFpbF9jYWxsX3Zh
cmFyZ3MsIE9wVGFpbENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQogICAgICMg
V2UgbGllIGFuZCBwZXJmb3JtIHRoZSB0YWlsIGNhbGwgaW5zdGVhZCBvZiBwcmVwYXJpbmcgaXQg
c2luY2Ugd2UgY2FuJ3QKICAgICAjIHByZXBhcmUgdGhlIGZyYW1lIGZvciBhIGNhbGwgb3Bjb2Rl
Ci0gICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJncywgc2l6ZSwgT3BUYWlsQ2Fs
bFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFy
Z3MsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2Fs
bCkKKyAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBzaXplLCBnZXQsIE9w
VGFpbENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9s
bGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF90
YWlsX2NhbGxfdmFyYXJncywgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwg
cHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwpCiBl
bmQpCiAKIAotbGxpbnRPcChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKK2xsaW50T3BX
aXRoTWV0YWRhdGEob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBPcFRhaWxDYWxsRm9y
d2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIFdlIGxpZSBhbmQg
cGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0IHNpbmNlIHdlIGNh
bid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29kZQotICAgIGRvQ2Fs
bFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBPcFRhaWxDYWxs
Rm9yd2FyZEFyZ3VtZW50cywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9m
b3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwpCisgICAgZG9DYWxsVmFyYXJncyhvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHNpemUsIGdldCwgT3BUYWlsQ2FsbEZvcndhcmRBcmd1
bWVudHMsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3df
cGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJkX2FyZ3VtZW50cywgX2xsaW50X3Nsb3dfcGF0aF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9y
VGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9yU2xvd1Rh
aWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfY29uc3RydWN0X3ZhcmFyZ3MsIE9wQ29uc3Ry
dWN0VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZG9DYWxsVmFyYXJn
cyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgc2l6ZSwgT3BDb25zdHJ1Y3RWYXJhcmdzLCBkaXNwYXRj
aCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19w
YXRoX2NvbnN0cnVjdF92YXJhcmdzLCBwcmVwYXJlRm9yUmVndWxhckNhbGwpCitsbGludE9wV2l0
aE1ldGFkYXRhKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENvbnN0cnVjdFZhcmFyZ3MsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIGRvQ2FsbFZhcmFy
Z3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIGdldCwgT3BDb25zdHJ1Y3RWYXJhcmdzLCBt
X3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhfc2l6
ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncywg
cHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBv
bHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwpCiBlbmQpCiAK
IApAQCAtMjUxMCw2ICsyNTI2LDkxIEBAIG9wKGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0
cnVjdF90cmFtcG9saW5lLCBtYWNybyAoKQogICAgIGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBv
bGluZShJbnRlcm5hbEZ1bmN0aW9uOjptX2Z1bmN0aW9uRm9yQ29uc3RydWN0KQogZW5kKQogCisj
IDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgor
IyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorbWFjcm8gbGlua1Nsb3dQYXRoRm9yKGZ1
bmN0aW9uKQorICAgIGZ1bmN0aW9uUHJvbG9ndWUoKQorICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0
OjptX3ZtW3QzXSwgdDEKKyAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QxXQorICAg
IG1vdmUgdDIsIGEyCisgICAgbW92ZSB0MywgYTEKKyAgICBtb3ZlIGNmciwgYTAKKyAgICBjQ2Fs
bDQoZnVuY3Rpb24pCisgICAgZnVuY3Rpb25FcGlsb2d1ZSgpCisgICAgdW50YWdSZXR1cm5BZGRy
ZXNzIHNwCisgICAgYnRweiByMSwgLmRvTm90VHJhc2gKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJl
c3NBZnRlckNhbGwodDEpCisgICAgcHJlcGFyZUZvclRhaWxDYWxsKHQxLCB0MiwgdDMsIHQ0KQor
ICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0NAorLmRvTm90VHJhc2g6CisgICAgam1wIHQwLCBKU0Vu
dHJ5UHRyVGFnCitlbmQKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQy
IGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3Jv
IHZpcnR1YWxUaHVua0ZvcihvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVjaywgaW50ZXJuYWxG
dW5jdGlvblRyYW1wb2xpbmUsIHByZXBhcmVDYWxsLCBzbG93Q2FzZSkKKyAgICBhZGRpIDEsIENh
bGxMaW5rSW5mbzo6bV9zbG93UGF0aENvdW50W3QyXQorICAgIGlmIEpTVkFMVUU2NAorICAgICAg
ICBtb3ZlIE5vdENlbGxNYXNrLCB0MQorICAgICAgICBidHFueiB0MCwgdDEsIHNsb3dDYXNlCisg
ICAgZWxzZQorICAgICAgICBiaW5lcSB0MSwgQ2VsbFRhZywgc2xvd0Nhc2UKKyAgICBlbmQKKyAg
ICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEpTRnVuY3Rpb25UeXBlLCAubm90SlNGdW5jdGlv
bgorICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fZXhlY3V0YWJsZU9yUmFyZURhdGFbdDBdLCB0MQor
ICAgIGJ0cHogdDEsIChjb25zdGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCAuaXNFeGVj
dXRhYmxlCisgICAgbG9hZHAgKEZ1bmN0aW9uUmFyZURhdGE6Om1fZXhlY3V0YWJsZSAtIChjb25z
dGV4cHIgSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKVt0MV0sIHQxCisuaXNFeGVjdXRhYmxlOgor
ICAgIGxvYWRwIG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrW3QxXSwgdDEKKyAgICBidHB6
IHQxLCBzbG93Q2FzZQorLmNhbGxDb2RlOgorICAgIHByZXBhcmVDYWxsKHQ1LCB0MiwgdDMsIHQ0
KQorICAgIGptcCB0MSwgSlNFbnRyeVB0clRhZworLm5vdEpTRnVuY3Rpb246CisgICAgYmJuZXEg
SlNDZWxsOjptX3R5cGVbdDBdLCBJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgc2xvd0Nhc2UKKyAgICBw
cmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkKKyAgICBqbXAgaW50ZXJuYWxGdW5jdGlvblRyYW1w
b2xpbmUKK2VuZAorCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMg
Q2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRf
bGlua19jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGlu
dF9saW5rX2NhbGwpCitlbmQpCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQor
IyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0Citv
cChsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1
bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgX2xs
aW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1w
MiwgdGVtcDMsIHRlbXA0KSBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xv
d1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkKK2VuZCkKKworIyA2NGJpdDp0MCAzMmJpdCh0
MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3Mg
SlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUsIG1h
Y3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgX2xsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVj
dF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNs
b3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9j
YWxsKQorZW5kKQorCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMg
Q2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxpbnRf
dmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtG
b3IoRXhlY3V0YWJsZUJhc2U6Om1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgX2xsaW50
X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwg
dGVtcDMsIHRlbXA0KQorICAgICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwodGVt
cDEpCisgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1w
NCkKKyAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIHRlbXA0CisgICAgZW5kLCAuc2xvd0Nhc2Up
Cisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitl
bmQpCiAKIGlmIEpJVAogICAgIG1hY3JvIGxvYWRCYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5j
cHAKaW5kZXggYzA0ZmZkNmIwYmMzZjI2ZTE5MmYwNmYyYmJmNzRiMDY0ZGNiMjc5YS4uOTg3NmVm
NmVmNzQyYWNlZWRhZTI2OWEyYWI0NTRjNWI2MmNkNTE2YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcApAQCAtMTI5LDYgKzEy
OSw4IEBAIHVzaW5nIFdlYkNvbmZpZzo6Z19jb25maWc7CiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBDYWxsTGlua0luZm87CisKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gQ0xvb3BSZWdp
c3RlciBpcyB0aGUgc3RvcmFnZSBmb3IgYW4gZW11bGF0ZWQgQ1BVIHJlZ2lzdGVyLgogLy8gSXQg
ZGVmaW5lcyB0aGUgcG9saWN5IG9mIGhvdyBpbnRzIHNtYWxsZXIgdGhhbiBpbnRwdHJfdCBhcmUg
cGFja2VkIGludG8gdGhlCkBAIC0xNjYsNiArMTY4LDcgQEAgY2xhc3MgQ0xvb3BSZWdpc3RlciB7
CiAgICAgb3BlcmF0b3IgUHJvdG9DYWxsRnJhbWUqKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFBy
b3RvQ2FsbEZyYW1lKj4obV92YWx1ZSk7IH0KICAgICBvcGVyYXRvciBSZWdpc3RlciooKSB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8UmVnaXN0ZXIqPihtX3ZhbHVlKTsgfQogICAgIG9wZXJhdG9yIFZN
KigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxWTSo+KG1fdmFsdWUpOyB9CisgICAgb3BlcmF0b3Ig
Q2FsbExpbmtJbmZvKigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxsTGlua0luZm8qPihtX3Zh
bHVlKTsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHNpemVvZihUKSA9PSBzaXplb2YodWludHB0cl90KT4+CiAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIG9wZXJhdG9yPShUIHZhbHVlKSB7IG1fdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pih2YWx1ZSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggOTAzZTVhNDViMWI2NjgyZmQyODc4
Yjk3OTQ4NTJhZWZkNjc1MWQ1ZS4uZDhiNjMwOGEzZTZmZDQ1ZjJjMzVkMGIyN2E0NDk0Yjk4ZGE2
MDM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTExOCw3ICsxMTgsOSBAQCBtYWNybyBjQ2FsbDJW
b2lkKGZ1bmN0aW9uKQogZW5kCiAKIG1hY3JvIGNDYWxsNChmdW5jdGlvbikKLSAgICBpZiBBUk12
NyBvciBNSVBTCisgICAgaWYgQ19MT09QIG9yIENfTE9PUF9XSU4KKyAgICAgICAgY2xvb3BDYWxs
U2xvd1BhdGg0IGZ1bmN0aW9uLCBhMCwgYTEsIGEyLCBhMworICAgIGVsc2lmIEFSTXY3IG9yIE1J
UFMKICAgICAgICAgY2FsbCBmdW5jdGlvbgogICAgIGVsc2lmIFg4NiBvciBYODZfV0lOCiAgICAg
ICAgIHB1c2ggYTMKQEAgLTIxNTEsMzUgKzIxNTMsNjAgQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9y
Q2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUpCiAgICAgYmluZXEgVGhpc0FyZ3VtZW50T2Zmc2V0ICsg
VGFnT2Zmc2V0W2NmciwgdDMsIDhdLCBDZWxsVGFnLCAuZG9uZQogICAgIGxvYWRpIFRoaXNBcmd1
bWVudE9mZnNldCArIFBheWxvYWRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgbG9hZGkgSlND
ZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDAKLSAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVj
dHVyZUlEW3Q1XQorICAgIHN0b3JlaSB0MCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Fy
cmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCiAuZG9uZToKIGVuZAogCi1tYWNy
byBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJv
ZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykKLSAgICBtZXRhZGF0YSh0NSwgdDApCi0gICAgZ2V0Q2FsbGVlKHQwKQor
IyB0NSBob2xkcyBtZXRhZGF0YS4KK21hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1Bh
dGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBw
cmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0Nh
bGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0
LCBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICBnZXRDYWxsZWUodDMpCiAKLSAg
ICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVl
T3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0W3Q1XSwgdDIKLSAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlUGF5bG9hZChzaXplLCB0MCwgQ2VsbFRhZywgdDMsIC5vcENhbGxTbG93KQotICAgIGJp
bmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQzLCB0MSwgdDApCisKKyAgICAjIEFsaWduZWQgdG8gSklUOjpjb21waWxlU2V0dXBGcmFtZQog
ICAgIGdldEFyZ3VtZW50U3RhcnQodDMpCiAgICAgbHNoaWZ0aSAzLCB0MwogICAgIG5lZ2kgdDMK
ICAgICBhZGRwIGNmciwgdDMgICMgdDMgY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiBjZnIKLSAg
ICBzdG9yZWkgdDIsIENhbGxlZSArIFBheWxvYWRPZmZzZXRbdDNdCi0gICAgZ2V0QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXModDIpICAgIAotICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQorICAgIGdldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKHQyKQogICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQ
YXlsb2FkT2Zmc2V0W3QzXQotICAgIHN0b3JlaSBDZWxsVGFnLCBDYWxsZWUgKyBUYWdPZmZzZXRb
dDNdCisKKyAgICAjIFN0b3JlIGxvY2F0aW9uIGJpdHMgYW5kIHxjYWxsZWV8LCBhbmQgY29uZmln
dXJlIHNwLgorICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdP
ZmZzZXRbY2ZyXQorICAgIHN0b3JlaSB0MCwgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFt0M10KKyAg
ICBzdG9yZWkgdDEsIENhbGxlZSArIFRhZ09mZnNldFt0M10KICAgICBtb3ZlIHQzLCBzcAotICAg
IHByZXBhcmVDYWxsKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9t
YWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5UHRyVGFnKQotICAg
IGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVl
UHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50
cnlQdHJUYWcpCisgICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKKworICAgIGJpbmVx
IHQxLCBDZWxsVGFnLCAub3BDYWxsU2xvdworICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQzCisgICAgYnRw
eiB0MywgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5u
b3RQb2x5bW9ycGhpYworICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50YWcg
cmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGlu
ZSBzZXBhcmF0ZWx5LgorICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9s
eW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9y
cGhpYyB0aHVuayBzaWRlLgorICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlz
cGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgam1wIC5nb1BvbHltb3JwaGljCisKKy5ub3RQb2x5
bW9ycGhpYzoKKyAgICBicG5lcSB0MCwgdDMsIC5vcENhbGxTbG93CisgICAgcHJlcGFyZUNhbGwo
dDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgorICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxE
ZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNv
ZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gs
IHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKIAogLm9wQ2FsbFNsb3c6Ci0gICAgc2xvd1BhdGhGb3JD
YWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQorICAgICMg
NjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorICAgICMgdDIgaXMgQ2FsbExpbmtJbmZv
KgorICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICBhZGRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1LCB0MiAjIENhbGxMaW5rSW5mbyog
aW4gdDIKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
Lm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGxvYWRwIENvZGVCbG9ja1tj
ZnJdLCB0MworICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDNdLCB0MworICAg
IHByZXBhcmVTbG93Q2FsbCgpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9z
bG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRyVGFnKQogZW5kCiAgICAgICAgIAotbWFjcm8g
Y29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVD
YWxsLCBwcm9sb2d1ZSkKK21hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwg
b3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGlj
LCBwcmVwYXJlU2xvd0NhbGwsIHByb2xvZ3VlKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCkBAIC0yMTg4LDcgKzIyMTUs
NyBAQCBtYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVj
dCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQogICAgICAgICBlbmQsIG1ldGFkYXRhKQogCiAgICAg
ICAgIG1hY3JvIGdldENhbGxlZShkc3QpCi0gICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisg
ICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAgICAgICBlbmQKIAogICAgICAgICBtYWNy
byBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTIxOTksMTAgKzIyMjYsNjggQEAgbWFjcm8gY29t
bW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxs
LCBwcm9sb2d1ZSkKICAgICAgICAgICAgIGdldHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2Ms
IGRzdCkKICAgICAgICAgZW5kCiAgICAgICAgIAotICAgICAgICBjYWxsSGVscGVyKG9wY29kZU5h
bWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIHByZXBhcmVDYWxs
LCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwg
Z2V0QXJndW1lbnRDb3VudCkKKyAgICAgICAgIyB0NSBob2xkcyBtZXRhZGF0YQorICAgICAgICBj
YWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwg
bV9kc3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBh
cmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3Vt
ZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCiAgICAgZW5kKQogZW5kCiAKK21hY3JvIGRvQ2Fs
bFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6ZSwgZ2V0LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBmcmFtZVNsb3dQ
YXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhp
YywgcHJlcGFyZVNsb3dDYWxsKQorICAgIGNhbGxTbG93UGF0aChmcmFtZVNsb3dQYXRoKQorICAg
IGJyYW5jaElmRXhjZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5l
KQorICAgICMgY2FsbGVlRnJhbWUgaW4gcjEKKyAgICBpZiBKU1ZBTFVFNjQKKyAgICAgICAgbW92
ZSByMSwgc3AKKyAgICBlbHNlCisgICAgICAgICMgVGhlIGNhbGxlZUZyYW1lIGlzIG5vdCBzdGFj
ayBhbGlnbmVkLCBtb3ZlIGRvd24gYnkgQ2FsbGVyRnJhbWVBbmRQQ1NpemUgdG8gYWxpZ24KKyAg
ICAgICAgaWYgQVJNdjcKKyAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXpl
LCB0MgorICAgICAgICAgICAgbW92ZSB0Miwgc3AKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCisgICAgICAgIGVuZAorICAgIGVuZAor
ICAgIGNhbGxDYWxsU2xvd1BhdGgoCisgICAgICAgIHNsb3dQYXRoLAorICAgICAgICAjIFRob3Nl
IGFyZSByMCBhbmQgcjEKKyAgICAgICAgbWFjcm8gKHJlc3RvcmVkUENPclRocm93LCBjYWxsZWVG
cmFtZVB0cikKKyAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250VXBkYXRlU1AK
KyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQorICAgICAgICAgICAgbW92ZSBj
YWxsZWVGcmFtZVB0ciwgc3AKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDIpCisgICAgICAg
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MSwgdDApCisgICAgICAgICAg
ICBtZXRhZGF0YSh0NSwgdDIpCisKKyAgICAgICAgICAgIGJpbmVxIHQxLCBDZWxsVGFnLCAub3BD
YWxsU2xvdworICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDMKKyAgICAgICAgICAgIGJ0cHog
dDMsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90
UG9seW1vcnBoaWMKKyAgICAgICAgICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3Qg
dW50YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJh
bXBvbGluZSBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRh
ZyB0aGF0IGZvciBwb2x5bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUg
aW4gdGhlIHBvbHltb3JwaGljIHRodW5rIHNpZGUuCisgICAgICAgICAgICBwcmVwYXJlUG9seW1v
cnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBk
c3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAgICAgICAgICAg
am1wIC5nb1BvbHltb3JwaGljCisKKyAgICAgICAgLm5vdFBvbHltb3JwaGljOgorICAgICAgICAg
ICAgYnBuZXEgdDAsIHQzLCAub3BDYWxsU2xvdworICAgICAgICAgICAgcHJlcGFyZUNhbGwodDIs
IHQzLCB0NCwgdDEpCisKKyAgICAgICAgLmdvUG9seW1vcnBoaWM6CisgICAgICAgICAgICBsb2Fk
cCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAgICAgaW52b2tlQ2FsbChv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworICAgICAgICAu
b3BDYWxsU2xvdzoKKyAgICAgICAgICAgICMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxl
ZQorICAgICAgICAgICAgIyB0MiBpcyBDYWxsTGlua0luZm8qCisgICAgICAgICAgICAjIHQzIGlz
IGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgICAgICAgICBhZGRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1LCB0MiAjIENhbGxMaW5rSW5mbyogaW4gdDIK
KyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgdDMKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxP
YmplY3RbdDNdLCB0MworICAgICAgICAgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICAgICAgICAg
IGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0
LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNF
bnRyeVB0clRhZykKKyAgICAgICAgLmRvbnRVcGRhdGVTUDoKKyAgICAgICAgICAgIGptcCBfbGxp
bnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQorICAgICAgICBlbmQpCitlbmQKKwog
bGxpbnRPcChvcF9yZXQsIE9wUmV0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKICAgICBj
aGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQogICAgIGdldChtX3ZhbHVlLCB0MikKQEAgLTI4
NjYsNyArMjk1MSw4IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jfb3BlbiwgT3BJ
dGVyYXRvck9wZW4sIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgICAgIG1vdmUgMSwg
ZHN0CiAgICAgZW5kCiAKLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9z
bG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclBy
b2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5
SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUs
IHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9p
dGVyYXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9p
dGVyYXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJl
cGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGws
IHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQog
CiAuZ2V0QnlJZFN0YXJ0OgogICAgIG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNoKHZhbHVlVGFn
LCB2YWx1ZVBheWxvYWQpCkBAIC0yOTI3LDcgKzMwMTMsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRh
KG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1ZSBzbG90IGFzIGEgdG1wIHNpbmNlIHdl
IGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4KLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJh
dG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9y
TmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxs
LCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFy
Z3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkK
KyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBf
bGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4
dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9y
UmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9y
U2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1
ZGluZ1RoaXNDb3VudCkKIAogLmdldERvbmVTdGFydDoKICAgICBtYWNybyBzdG9yZURvbmVBbmRK
bXBUb0dldFZhbHVlKGRvbmVWYWx1ZVRhZywgZG9uZVZhbHVlUGF5bG9hZCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5k
ZXggYTkxMzE0ZmNlOWVlNDRjYTZlMGJhYzc4MmQ5YmUyZjU5YzBhODM3MC4uMzkyNWM3YzM2YzRl
MzgwMDI4MzcyZmJmNmJkZjVlNzE0Yzk2NWI0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTE0Myw3ICsxNDMs
OSBAQCBlbmQKICMgVGhpcyBiYXJlbHkgd29ya3MuIGFyZzMgYW5kIGFyZzQgc2hvdWxkIHByb2Jh
Ymx5IGJlIGltbWVkaWF0ZXMuCiBtYWNybyBjQ2FsbDQoZnVuY3Rpb24pCiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQodDQsIDB4YmFkMGMwMDQpCi0gICAgaWYgWDg2XzY0IG9yIEFSTTY0
IG9yIEFSTTY0RSBvciBSSVNDVjY0CisgICAgaWYgQ19MT09QIG9yIENfTE9PUF9XSU4KKyAgICAg
ICAgY2xvb3BDYWxsU2xvd1BhdGg0IGZ1bmN0aW9uLCBhMCwgYTEsIGEyLCBhMworICAgIGVsc2lm
IFg4Nl82NCBvciBBUk02NCBvciBBUk02NEUgb3IgUklTQ1Y2NAogICAgICAgICBjYWxsIGZ1bmN0
aW9uCiAgICAgZWxzaWYgWDg2XzY0X1dJTgogICAgICAgICAjIE9uIFdpbjY0LCByY3gsIHJkeCwg
cjgsIGFuZCByOSBhcmUgdXNlZCBmb3IgcGFzc2luZyB0aGUgZmlyc3QgZm91ciBwYXJhbWV0ZXJz
LgpAQCAtMzA5LDEyICszMTEsMTIgQEAgbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCBw
cm90b0NhbGxGcmFtZSwgdGVtcDEsIHRlbXAyKQogICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lO
CiAgICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50cnkKICAgICBlbHNpZiBBUk02NEUKLSAg
ICAgICAgbW92ZSBlbnRyeSwgdDMKLSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIg
SlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnZtRW50cnlU
b0phdmFTY3JpcHQpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklU
R2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKKyAgICAgICAgbW92ZSBlbnRyeSwgdDUKKyAgICAg
ICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVN
YXAgKyAoY29uc3RleHByIEdhdGU6OnZtRW50cnlUb0phdmFTY3JpcHQpICogUHRyU2l6ZSwgYTcK
KyAgICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcK
ICAgICAgICAgZ2xvYmFsIF92bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZQogICAgICAgICBf
dm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmU6Ci0gICAgICAgIGNhbGwgdDMsIEpTRW50cnlQ
dHJUYWcKKyAgICAgICAgY2FsbCB0NSwgSlNFbnRyeVB0clRhZwogICAgIGVsc2UKICAgICAgICAg
Y2FsbCBlbnRyeSwgSlNFbnRyeVB0clRhZwogICAgIGVuZApAQCAtMjM2MCw0MSArMjM2Miw1OCBA
QCBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAgICBsb2Fk
cSBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgYnRxbnogdDAsIG5vdENl
bGxNYXNrLCAuZG9uZQogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQzCi0g
ICAgc3RvcmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1f
YXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDMsICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVy
ZUlEW3Q1XQogLmRvbmU6CiBlbmQKIAotbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93
UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEo
dDUsIHQwKQotICAgIGdldENhbGxlZSh0MCkKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCittYWNybyBj
YWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBh
cmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEs
IGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpCisgICAgZ2V0Q2FsbGVlKHQxKQogCi0gICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0
NV0sIHQyCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCi0gICAgYnFu
ZXEgdDMsIHQyLCAub3BDYWxsU2xvdworICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDEsIHQwKQogCisgICAgIyBBbGlnbmVkIHRvIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUKICAgICBn
ZXRBcmd1bWVudFN0YXJ0KHQzKQogICAgIGxzaGlmdGkgMywgdDMKICAgICBuZWdwIHQzCiAgICAg
YWRkcCBjZnIsIHQzCi0gICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgZ2V0QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXModDIpCi0gICAgc3RvcmVQQygpCiAgICAgc3RvcmVpIHQyLCBBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbdDNdCisKKyAgICAjIFN0b3Jl
IGxvY2F0aW9uIGJpdHMgYW5kIHxjYWxsZWV8LCBhbmQgY29uZmlndXJlIHNwLgorICAgIHN0b3Jl
UEMoKQorICAgIHN0b3JlcSB0MCwgQ2FsbGVlW3QzXQogICAgIG1vdmUgdDMsIHNwCi0gICAgaWYg
QVJNNjRFCi0gICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQwCi0gICAgICAgIHByZXBhcmVDYWxsKHQw
LCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgbG9hZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwg
dDAKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDAs
IEpTRW50cnlQdHJUYWcpCi0gICAgZWxzZQotICAgICAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0
MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9u
KG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0Vmly
dHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNFbnRyeVB0clRhZykKLSAgICBlbmQK
LS5vcENhbGxTbG93OgotICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNv
ZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gs
IHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLWVuZAorICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1Np
emUsIHNwCisKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgIGJ0cHogdDEsIChjb25zdGV4cHIg
Q2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAg
ICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBT
byB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAg
ICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2Fz
ZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4K
KyAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRy
VGFnKQorICAgIGptcCAuZ29Qb2x5bW9ycGhpYwogCi1tYWNybyBjb21tb25DYWxsT3Aob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3VlKQorLm5v
dFBvbHltb3JwaGljOgorICAgIGJxbmVxIHQwLCB0MSwgLm9wQ2FsbFNsb3cKKyAgICBwcmVwYXJl
Q2FsbCh0MiwgdDMsIHQ0LCB0MSkKKworLmdvUG9seW1vcnBoaWM6CisgICAgbG9hZHAgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGlj
Q2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisub3BDYWxsU2xvdzoKKyAgICAjIDY0Yml0
OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAg
ICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgYWRkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQy
CisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Ns
b3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICBwcmVw
YXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKK2VuZAorCittYWNybyBjb21tb25DYWxsT3Ao
b3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNh
bGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0
MCkKIApAQCAtMjQwMyw3ICsyNDIyLDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUs
IHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAg
ZW5kLCBtZXRhZGF0YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAg
ICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0KQogICAg
ICAgICBlbmQKIAogICAgICAgICBtYWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAgLTI0MTQs
MTAgKzI0MzMsNjcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBv
cGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgICAgIGdldHUoc2l6
ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIGRzdCkKICAgICAgICAgZW5kCiAKLSAgICAgICAgY2Fs
bEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1f
ZHN0LCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdl
dEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCisgICAgICAgICMgdDUgaG9sZHMgbWV0
YWRhdGEKKyAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3Ry
dWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBv
bHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0
Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVuZCkKIGVu
ZAogCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBw
cmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJh
bWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93
X3BhdGhfdHJhbXBvbGluZSkKKyAgICAjIGNhbGxlZUZyYW1lIGluIHIxCisgICAgaWYgSlNWQUxV
RTY0CisgICAgICAgIG1vdmUgcjEsIHNwCisgICAgZWxzZQorICAgICAgICAjIFRoZSBjYWxsZWVG
cmFtZSBpcyBub3Qgc3RhY2sgYWxpZ25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZyYW1lQW5kUENT
aXplIHRvIGFsaWduCisgICAgICAgIGlmIEFSTXY3CisgICAgICAgICAgICBzdWJwIHIxLCBDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSwgdDIKKyAgICAgICAgICAgIG1vdmUgdDIsIHNwCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorICAgICAg
ICBlbmQKKyAgICBlbmQKKyAgICBjYWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBzbG93UGF0aCwK
KyAgICAgICAgIyBUaG9zZSBhcmUgcjAgYW5kIHIxCisgICAgICAgIG1hY3JvIChyZXN0b3JlZFBD
T3JUaHJvdywgY2FsbGVlRnJhbWVQdHIpCisgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRy
LCAuZG9udFVwZGF0ZVNQCisgICAgICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAg
ICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCisgICAgICAgICAgICBnZXQobV9jYWxs
ZWUsIHQxKQorICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDAp
CisgICAgICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCisKKyAgICAgICAgICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0
NV0sIHQxCisgICAgICAgICAgICBidHB6IHQxLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9s
eW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAgICAgICAgICAjIHByZXBh
cmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVk
IHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAgICAgICAg
ICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNl
IHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgor
ICAgICAgICAgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0
cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgSlNF
bnRyeVB0clRhZykKKyAgICAgICAgICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisgICAgICAgIC5u
b3RQb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGJxbmVxIHQwLCB0MSwgLm9wQ2FsbFNsb3cKKyAg
ICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisgICAgICAgIC5nb1BvbHlt
b3JwaGljOgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUK
KyAgICAgICAgICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpT
RW50cnlQdHJUYWcpCisKKyAgICAgICAgLm9wQ2FsbFNsb3c6CisgICAgICAgICAgICAjIDY0Yml0
OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMgQ2FsbExpbmtJ
bmZvKgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgICAg
ICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwg
dDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVd
LCB0NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAgICAgIHByZXBh
cmVTbG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUl
X3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5kb250VXBkYXRl
U1A6CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xp
bmUKKyAgICAgICAgZW5kKQorZW5kCisKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAg
ICBnZXQobV92YWx1ZSwgdDIpCkBAIC0zMDQ2LDggKzMxMjIsOCBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRlcmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRzdAogICAgIGVuZAogCi0KLSAgICBjYWxsSGVscGVy
KG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBP
cEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2Fs
bGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdU
aGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0
b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JP
cGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxs
LCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGws
IHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwg
bWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFy
Z3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0QnlJZFN0YXJ0OgogICAgIG1hY3JvIHN0
b3JlTmV4dEFuZERpc3BhdGNoKHZhbHVlKQpAQCAtMzEwNCw3ICszMTgwLDggQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBhcyBhIHRt
cCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCi0gICAgY2FsbEhlbHBl
cihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwg
T3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2Fs
bGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdU
aGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0
b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JO
ZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwg
cHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBt
ZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CiAgICAgbWFjcm8gc3Rv
cmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL2Nsb29wLnJiCmluZGV4IGNhZDIxNWFlMzQzY2M4NmIzYTEwYTVmYWY2NjI4NDI0
YTljMDJmMjguLmM3MDE2NjRhYjJiZmZmMjA3ZDEyZTVlMjIyZjk2NGNmYTkxMmEyZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCkBAIC01NzIsNiArNTcyLDE0
IEBAIGRlZiBjbG9vcEVtaXRDYWxsU2xvd1BhdGhWb2lkKG9wZXJhbmRzKQogICAgICRhc20ucHV0
YyAiI3tvcGVyYW5kc1swXS5jTGFiZWx9KCN7b3BlcmFuZHNbMV0uY2xEdW1wfSwgI3tvcGVyYW5k
c1syXS5jbER1bXB9KTsiCiBlbmQKIAorZGVmIGNsb29wRW1pdENhbGxTbG93UGF0aDQob3BlcmFu
ZHMpCisgICAgJGFzbS5wdXRjICJ7IgorICAgICRhc20ucHV0YyAiICAgIGNsb29wU3RhY2suc2V0
Q3VycmVudFN0YWNrUG9pbnRlcihzcC52cCgpKTsiCisgICAgJGFzbS5wdXRjICIgICAgU2xvd1Bh
dGhSZXR1cm5UeXBlIHJlc3VsdCA9ICN7b3BlcmFuZHNbMF0uY0xhYmVsfSgje29wZXJhbmRzWzFd
LmNsRHVtcH0sICN7b3BlcmFuZHNbMl0uY2xEdW1wfSwgI3tvcGVyYW5kc1szXS5jbER1bXB9LCAj
e29wZXJhbmRzWzRdLmNsRHVtcH0pOyIKKyAgICAkYXNtLnB1dGMgIiAgICBkZWNvZGVSZXN1bHQo
cmVzdWx0LCB0MCwgdDEpOyIKKyAgICAkYXNtLnB1dGMgIn0iCitlbmQKKwogY2xhc3MgSW5zdHJ1
Y3Rpb24KICAgICBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgY2FzZSBvcGNvZGUKQEAgLTExNzUs
NiArMTE4Myw5IEBAIGRlZiBsb3dlckNfTE9PUAogICAgICAgICB3aGVuICJjbG9vcENhbGxTbG93
UGF0aFZvaWQiCiAgICAgICAgICAgICBjbG9vcEVtaXRDYWxsU2xvd1BhdGhWb2lkKG9wZXJhbmRz
KQogCisgICAgICAgIHdoZW4gImNsb29wQ2FsbFNsb3dQYXRoNCIKKyAgICAgICAgICAgIGNsb29w
RW1pdENhbGxTbG93UGF0aDQob3BlcmFuZHMpCisKICAgICAgICAgIyBGb3IgZGVidWdnaW5nIG9u
bHkuIFRoaXMgaXMgdXNlZCB0byBpbnNlcnQgaW5zdHJ1bWVudGF0aW9uIGludG8gdGhlCiAgICAg
ICAgICMgZ2VuZXJhdGVkIExMSW50QXNzZW1ibHkuaCBkdXJpbmcgbGxpbnQgZGV2ZWxvcG1lbnQg
b25seS4gRG8gbm90IHVzZQogICAgICAgICAjIGZvciBwcm9kdWN0aW9uIGNvZGUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKaW5kZXggOWNi
YTVkNjhmM2NhZDMxY2ZhMmQ5NmVhNGM5YmJhOGRmZTlkYTliMi4uYzAwYjUxNmIzM2VjNWFkMTI5
ZDU2YzNmZmQyM2U5ZjVlYzIwNWY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgpAQCAtNDU5LDYgKzQ1OSw3IEBACiAgICAgICJjbG9v
cENhbGxOYXRpdmUiLCAgICAgICAgICMgb3BlcmFuZHM6IGNhbGxlZQogICAgICAiY2xvb3BDYWxs
U2xvd1BhdGgiLCAgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBjdXJyZW50RnJhbWUsIGN1
cnJlbnRQQwogICAgICAiY2xvb3BDYWxsU2xvd1BhdGhWb2lkIiwgICAjIG9wZXJhbmRzOiBjYWxs
VGFyZ2V0LCBjdXJyZW50RnJhbWUsIGN1cnJlbnRQQworICAgICAiY2xvb3BDYWxsU2xvd1BhdGg0
IiwgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBhMCwgYTEsIGEyLCBhMwogCiAgICAgICMg
Rm9yIGRlYnVnZ2luZyBvbmx5OgogICAgICAjIFRha2VzIG5vIG9wZXJhbmRzIGJ1dCBzaW1wbHkg
ZW1pdHMgd2hhdGV2ZXIgZm9sbG93cyBpbiAvLyBjb21tZW50cyBhcwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKaW5kZXggOTU4MTA1ZDMyNjZkZGZm
ODViZTVkNzZkODdjZGU1Y2IzMzEzMTRjMy4uNDhmZDkyZjhiNmE4ZWQyOTQ0YTcyNDhiMTU3ZDJh
ZjcyNzczYzViNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZUJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlQmFzZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIGlubGluZSBib29sIGlzQ2FsbChDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCiAKIGNsYXNzIEV4ZWN1dGFibGVCYXNlIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogICAgIGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7CiAKIHByb3RlY3RlZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKaW5k
ZXggNWFhNTQyYTEyZjI3MWRiZGZmMDIwYjkxMGVkYmNjOWExMWM4MzY1Ni4uMmU5YjUwNjYwNWNm
YzZmMWM1ZWRkMjJkYWQ5NzNlNzNlYWE4ZjYxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oIgorI2lu
Y2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRhYmxlLmgiCiAjaW5j
bHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dhdGUuaAppbmRleCBmNmEwNWIwNjVlMzJkOGFlY2Q1NjdiZjZhYjc0YWFlNjM4
OTk3Nzc4Li5lNDc3OTJiODc2NGU5MWQ1MDYxMGU0Y2RkYWUzMjMxYzE0NTllMjA0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHYoaml0Q2FnZVB0ciwgTm9QdHJUYWcpIFwKICAgICB2KHRhaWxDYWxsSlNFbnRy
eVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KHRhaWxDYWxsSlNFbnRyeVNsb3dQYXRoUHRyVGFn
LCBOb1B0clRhZykgXAorICAgIHYodGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnLCBO
b1B0clRhZykgXAogICAgIHYobG9vcE9TUkVudHJ5LCBOb1B0clRhZykgXAogICAgIHYoZW50cnlP
U1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KHdhc21PU1JFbnRyeSwgTm9QdHJUYWcpIFwKQEAg
LTQ2LDIwICs0NywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBKU0NfSlNfR0FURV9P
UENPREVTKHYpIFwKICAgICB2KG9wX2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKLSAgICB2KG9wX3Rh
aWxfY2FsbCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY29uc3RydWN0LCBKU0VudHJ5UHRy
VGFnKSBcCiAgICAgdihvcF9pdGVyYXRvcl9uZXh0LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihv
cF9pdGVyYXRvcl9vcGVuLCBKU0VudHJ5UHRyVGFnKSBcCi0gICAgdihvcF9jYWxsX3Nsb3csIEpT
RW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX3Nsb3csIEpTRW50cnlT
bG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3Nsb3csIEpTRW50cnlTbG93UGF0
aFB0clRhZykgXAotICAgIHYob3BfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0
clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVNsb3dQYXRo
UHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvdywgSlNF
bnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93LCBK
U0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfdmFyYXJncywgSlNFbnRyeVB0
clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3MsIEpTRW50cnlQdHJUYWcpIFwKKyAg
ICB2KG9wX2NhbGxfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfdGFpbF9jYWxsX3Ns
b3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF9zbG93LCBKU0VudHJ5UHRy
VGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9uZXh0X3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAg
ICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY2Fs
bF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2FsbF92YXJh
cmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50c19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3RfdmFyYXJn
c19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9jYWxsX2V2YWxfc2xvdywgSlNFbnRy
eVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9pdGVyYXRvcl9uZXh0X3Nsb3csIEpTRW50cnlT
bG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3Jfb3Blbl9zbG93LCBKU0VudHJ5U2xv
d1BhdGhQdHJUYWcpIFwKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDljZjVmZWEwMTk4NDlkYjZlNjYwOTEwYmI5NDUxY2Qy
N2MyNWZiYzUuLmVjNDgyMmY1YTkwM2Q0ZmI4NWNiNDg0MWE0Y2Q2OGYwYzEwYmZiZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEzOCw2ICsxMzgsNyBAQAogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1
ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50RXhjZXB0aW9ucy5oIgogI2luY2x1ZGUg
Ik1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCkBAIC05MTAsNiAr
OTExLDQxIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kCiAgICAgcmV0dXJuIExMSW50OjpnZXRD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90
cmFtcG9saW5lKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IFZN
OjpnZXRDVElMaW5rQ2FsbCgpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoT3B0aW9uczo6
dXNlSklUKCkpCisgICAgICAgIHJldHVybiBnZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICByZXR1
cm4gTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4obGxpbnRfbGlua19jYWxsX3RyYW1w
b2xpbmUpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gVk06Omdl
dENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpCit7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiBnZXRDVElTdHViKHRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWQ8
SlNFbnRyeVB0clRhZz4oKTsKKyNlbmRpZgorICAgIHJldHVybiBMTEludDo6Y2FsbFRvVGhyb3co
KnRoaXMpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7Cit9CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gVk06OmdldENUSVZpcnR1YWxDYWxs
KENhbGxNb2RlIGNhbGxNb2RlKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6
OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKCp0aGlzLCBjYWxsTW9k
ZSk7CisjZW5kaWYKKyAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7CisgICAgY2FzZSBDYWxsTW9kZTo6
UmVndWxhcjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSk7CisgICAgY2FzZSBDYWxsTW9k
ZTo6VGFpbDoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lKTsKKyAgICBjYXNlIENh
bGxNb2RlOjpDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7Cisg
ICAgfQorICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4o
bGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworfQorCiBWTTo6Q2xpZW50RGF0YTo6fkNs
aWVudERhdGEoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOWVmMzgy
YzYwZWU4MzRmY2JiMWQ5MDgxYzc4MThmZDc4NjdmYTQwOC4uM2FiZjcxMWE2NTUyYmU0YjMxYWZl
NDdlMDU5ZjMzMWUwODk5MTkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0x
MDYsNiArMTA2LDggQEAgY2xhc3MgQmFzaWNCbG9ja0xvY2F0aW9uOwogY2xhc3MgQnVpbHRpbkV4
ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIGNsYXNzIENhbGxG
cmFtZTsKK2NsYXNzIENhbGxMaW5rSW5mbzsKK2VudW0gY2xhc3MgQ2FsbE1vZGU7CiBzdHJ1Y3Qg
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2Rl
Q2FjaGU7CkBAIC05MDIsNiArOTA0LDkgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+IHsKICAgICBOYXRp
dmVFeGVjdXRhYmxlKiBnZXRCb3VuZEZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uLCBib29sIGNh
bkNvbnN0cnVjdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENUSUxpbmtD
YWxsKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENUSVRo
cm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clRhZz4gZ2V0Q1RJVmlydHVhbENhbGwoQ2FsbE1vZGUpOwogCiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBleGNlcHRpb25PZmZzZXQoKQogICAgIHsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjQzZmQ3NTllYjM3
NTkwNTQ3YTM4ZGU4ZWMyMjE2YzgwMmIwMmFiNi4uMWE5NDQ4MmZmMmM2OTVmODU3MDk3NjFmM2I2
MzJjN2IyMGYwM2E5YiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMS0xMS0xMiAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFVzZSBDYWxsTGlua0luZm8gaW4g
TExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
Mjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
c3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qczoK
KyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanM6
CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci52bS5pc1dhc21TdXBw
b3J0ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzOgorICAg
ICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudm0uaXNXYXNtU3VwcG9ydGVk
KToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5q
czoKKyAgICAgICAgKGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2UpOgorICAgICAgICAocnVuVGVzdCk6
CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qczoKKwogMjAyMS0x
MS0xMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBJbmxp
bmUgUmVnRXhwLnRlc3QgSklUIGNvZGUgaW4gREZHIGFuZCBGVEwKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5q
cyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1v
Zi1wcm94eS5qcwppbmRleCA1MGNhZWVkMTE0ODQyOWZkMWI1Y2UwYjBmZWFlNmJkZGRlNjcxMGI4
Li45NGRhYjQ2ZDJkNzE4NGYzNWQ0M2UyZGI0YTJkZDU2NDE5OGJlZmY1IDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJv
eHkuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJl
LWF3YXJlLW9mLXByb3h5LmpzCkBAIC0xLDQgKzEsNCBAQAotLy9AIHJ1bkRlZmF1bHQoIi0tdmFs
aWRhdGVPcHRpb25zPXRydWUgLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdXNlQ29uY3Vy
cmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIsICItLXRocmVzaG9sZEZv
ckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcD0x
MDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcD0xMDAiLCAiLS10aHJl
c2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVBZnRl
cldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29uPTEwMDAiLCAiLS12
YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQorLy9AIHJ1bkRlZmF1bHQoIi0t
dmFsaWRhdGVPcHRpb25zPXRydWUiLCAiLS11c2VDb25jdXJyZW50SklUPWZhbHNlIiwgIi0tdXNl
Q29uY3VycmVudEdDPWZhbHNlIiwgIi0tdGhyZXNob2xkRm9ySklUU29vbj0xMCIsICItLXRocmVz
aG9sZEZvckpJVEFmdGVyV2FybVVwPTEwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldh
cm1VcD0xMDAiLCAiLS10aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcD0xMDAiLCAi
LS10aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb249MTAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1p
emVBZnRlcldhcm1VcD0xMDAwIiwgIi0tdGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29uPTEwMDAi
LCAiLS12YWxpZGF0ZUJDRT10cnVlIiwgIi0tdXNlRlRMSklUPXRydWUiKQogCiBmdW5jdGlvbiBt
YWluKCkgewogICAgIGxldCB2MTYyOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxp
bmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGlu
Zy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcwppbmRleCA2ODlhMDA1YWI1NTVhMWZjNjAx
YTU0ZTRlYmY5NGU5OWE2NjhmNzdlLi41YzIyMGZkNzZjZGM1YzQwZTU5Y2M2NmU1NzM0MmM3MmQ4
YzdmM2FhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNt
LW5hbWUtc2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13
YXNtLW5hbWUtc2VjdGlvbi5qcwpAQCAtNjksNSArNjksNSBAQAogICAgIHZhciB3YXNtRW50cnkg
PSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMuX3BhcnJvdCgx
KTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93biki
LCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0i
LCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3Rd
IiwgIndhc20tc3R1YiIsICIyNCIsICJ3YXNtRW50cnkiXSk7CisgICAgcnVuVGVzdCh3YXNtRW50
cnksIFsiX3NpbGx5IiwgIih1bmtub3duKSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfZWdnc10iLCAi
PD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV0iLCAi
PD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF0iLCAiKHVua25vd24pIiwgIndhc21FbnRyeSJdKTsK
IH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20uanMg
Yi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCmluZGV4IGNkMjFmMjg4
YzE0OGE0Yjc0MDViZjg2OGRlZjliNTQ1NzM0MDUwNDUuLjA2ZGYwMTI0OTU5NjllMjg0MjE4Nzc4
NjkwMTM1YmYwOTAxMGVjNmQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXBy
b2ZpbGVyLXdhc20uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2Fz
bS5qcwpAQCAtOCw1ICs4LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5ID0gZnVuY3Rpb24oKSB7CiAg
ICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLmxvb3AoMTAwMDAwMDApOwogICAgIH07Ci0g
ICAgcnVuVGVzdCh3YXNtRW50cnksIFsiPD8+Lndhc20tZnVuY3Rpb25bMF0iLCAid2FzbS1zdHVi
IiwgIjAiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNt
LWZ1bmN0aW9uWzBdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnkiXSk7CiB9CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzIGIv
SlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcwppbmRl
eCA5NjQyZGRjN2MxZTZmMDZlM2IxMzI3OWMwZTRhMDI1YjU0ZGNhYmYxLi4xYjkyZTk0ODU0YWY2
M2Y2N2QwOGY1NDg4N2M1MjE3OTE0ZWUyYmY1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9z
YW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNz
L3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMKQEAgLTcwLDExICs3MCwxMyBA
QCBmdW5jdGlvbiBjaGVjayhub2RlKSB7CiAgICAgCiAgICAgbGV0IG5vZGUgPSB0cmVlOwogICAg
IGZvciAobGV0IGkgPSBzdGFja1RyYWNlLmxlbmd0aDsgaS0tOyApIHsKKyAgICAgICAgbGV0IHBy
ZXYgPSBub2RlOwogICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJlbltzdGFja1RyYWNlW2ldXTsK
ICAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICBpZiAoVkVSQk9TRSkgewogICAgICAg
ICAgICAgICAgIHByaW50KCJmYWlsaW5nIG9uICIgKyBpICsgIiA6ICIgKyBzdGFja1RyYWNlW2ld
KTsKICAgICAgICAgICAgICAgICBwcmludChKU09OLnN0cmluZ2lmeSh0cmVlKSk7CisgICAgICAg
ICAgICAgICAgcHJpbnQoT2JqZWN0LmtleXMocHJldi5jaGlsZHJlbikpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMDgsNyArMTEwLDcg
QEAgZnVuY3Rpb24gcnVuVGVzdChmdW5jLCBzdGFja1RyYWNlT3JTdHJpbmcpIHsKICAgICAgICAg
fQogICAgIH0gd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCB0aW1lVG9GYWlsKTsKICAg
ICBwcmludChKU09OLnN0cmluZ2lmeShyb290LCB1bmRlZmluZWQsIDIpKTsKLSAgICBkb2VzVHJl
ZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2UsIHRydWUsIHRydWUpOworICAgIGRvZXNU
cmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwgc3RhY2tUcmFjZU9yU3RyaW5nLCB0cnVlLCB0cnVlKTsK
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGFjayB0cmFjZSIpOwogfQogCmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMgYi9KU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKaW5kZXggNjgwNWU2ODlmNWM4NzllMmNh
NTA5Yzg4ZDNlN2IzNzZkZTA5ZmFhYS4uMzNjODZiZjFjZGU5YThkYWIxMThlMGU0Y2IwYmFjZDU5
Yjc0OTFlOSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0
aW9uLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qcwpA
QCAtNjksNCArNjksNCBAQAogYXNzZXJ0LmVxKHN0YWNrdHJhY2VbM10sICI8Pz4ud2FzbS1mdW5j
dGlvbltfYmFjb25dQFt3YXNtIGNvZGVdIik7CiBhc3NlcnQuZXEoc3RhY2t0cmFjZVs0XSwgIjw/
Pi53YXNtLWZ1bmN0aW9uW19zcGFtXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVxKHN0YWNrdHJh
Y2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XUBbd2FzbSBjb2RlXSIpOwotYXNzZXJ0
LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW3dhc20gY29kZV0iKTsgLy8gd2FzbSBlbnRy
eQorYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNl0sICJ3YXNtLXN0dWJAW25hdGl2ZSBjb2RlXSIpOyAv
LyB3YXNtIGVudHJ5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444126</attachid>
            <date>2021-11-12 17:13:44 -0800</date>
            <delta_ts>2021-11-12 18:20:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211112171343.patch</filename>
            <type>text/plain</type>
            <size>412133</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDVkZDgyYWRiMWUzNWI4NmIyZTdmMzk1ZTI4ZTMzNmE5YTk0MWE5Li44ZGQyMDFlYTllZDZlMmU5
NGEzNDQ2Nzk3YWJiNWI5NzQzMjZhYmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODEgQEAKKzIwMjEtMTEtMTIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludGVncmF0
ZXMgbm9ybWFsIENhbGxMaW5rSW5mbyBpbnRvIExMSW50IGFuZCByZW1vdmUgYWRob2MgTExJbnRD
YWxsTGlua0luZm8uCisgICAgICAgIFNvIHRoYXQgd2UgY2FuIHNpbXBsaWZ5IG91ciBJQyBzb2Z0
d2FyZSBzdGFjaywgYW5kIHVuaWZ5aW5nIGNhbGwgSUMgbWVjaGFuaXNtIGludG8gb25lIENhbGxM
aW5rSW5mby4KKworICAgICAgICAxLiBMTEludCBjYW4gZnVsbHkgdXNlIG91ciBwb2x5bW9ycGhp
YyBjYWxsIElDLCBhbmQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gcmVzZXQgY2FsbCBJQyB3aGVuCisg
ICAgICAgICAgIHRpZXJpbmcgdXAgZnJvbSBMTEludCB0byBCYXNlbGluZSBKSVQgc2luY2UgYm90
aCBub3cgdXNlcyB0aGUgc2FtZSBDYWxsTGlua0luZm8gZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAg
ICAgIERGRyBhbmQgRlRMIGNhbiBhbHNvIHJldHJpZXZlIGNhbGwgaW5mb3JtYXRpb24gZnJvbSB0
aGlzIENhbGxMaW5rSW5mby4KKyAgICAgICAgMi4gTExJbnQgdmFyYXJncyBjYWxscyBnZXQgdGhl
IHNhbWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIEJhc2VsaW5lLiBQcmV2aW91c2x5IGl0IGRv
ZXMgbm90IGhhdmUKKyAgICAgICAgICAgY2FsbCBJQy4KKyAgICAgICAgMy4gV2hlbiBKSVQgaXMg
ZGlzYWJsZWQsIHdlIGRpc2FibGUgcG9seW1vcnBoaWMgY2FsbCBJQyBzaW5jZSBpdCByZXF1aXJl
cyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSBv
bmx5IHVzZSBtb25vbW9ycGhpYyBvbmUsIHdoaWNoIGlzIHRoZSBzYW1lIHRvIHRoZSBvbGQgTExJ
bnRDYWxsTGlua0luZm8uCisgICAgICAgIDQuIENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uIGlz
IHNldCB1cCBvbmx5IGFmdGVyIEJhc2VsaW5lIEpJVC4gV2UgYWRqdXN0IGNhbGwgSUMgY29kZSBz
byB0aGF0CisgICAgICAgICAgIHdlIG5vIGxvbmdlciByZWx5IG9uIGRvbmVMb2NhdGlvbiB3aGVu
IHVzaW5nIERhdGFJQy4gVGhpcyBhbGxvd3MgdXMgdG8gc21vb3RobHkgdGllcmluZyB1cAorICAg
ICAgICAgICBmcm9tIExMSW50IHRvIEJhc2VsaW5lIEpJVCB3aGlsZSB1c2luZyB0aGUgc2FtZSBD
YWxsTGlua0luZm8uCisgICAgICAgICAgIFdlIHNldCB1cCBkb25lTG9jYXRpb24gaW4gQmFzZWxp
bmUgSklUIGp1c3QgYmVjYXVzZSBERkcgT1NSIGV4aXQgcmVxdWlyZXMgd2hlbiBleGl0aW5nIHRv
CisgICAgICAgICAgIEJhc2VsaW5lIEpJVCBjb2RlLgorICAgICAgICA1LiBXZSByZW1vdmUgQ2Fs
bExpbmtJbmZvIGZyb20gSklUIGNvbnN0YW50IHBvb2wsIGFuZCB3ZSBzdG9yZSBDYWxsTGlua0lu
Zm8gaW4gbWV0YWRhdGEgc28gdGhhdAorICAgICAgICAgICBMTEludCBhbmQgQmFzZWxpbmUgSklU
IHF1aWNrbHkgYWNjZXNzIHRvIHRoYXQgYW5kIGtlZXBpbmcgdW5saW5rZWQgQmFzZWxpbmUgSklU
IHdvcmtpbmcuCisgICAgICAgIDYuIFdlIGltcGxlbWVudCBMTEludCB2ZXJzaW9uIG9mIGNhbGwg
SUMgdGh1bmtzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiBKSVQgaXMgZGlzYWJs
ZWQuCisKKyAgICAgICAgU3BlZWRvbWV0ZXIyIGlzIG5ldXRyYWwuIEpldFN0cmVhbTIgaXMgMC43
JSBwcm9ncmVzc2VkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmg6CisgICAgICAgICogYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHA6CisgICAgICAgIChKU0M6
OnNob3VsZER1bXBEaXNhc3NlbWJseUZvcik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1
bXBXaXRoTmFtZSBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgor
ICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAg
ICAgIChKU0M6OmNhbGxMaW5rSW5mb0Zvcik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhclN0dWIpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OnNldE1vbm9tb3JwaGljQ2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjpjbGVhckNhbGxlZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJ
bXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OnJldmVydENhbGxUb1N0dWIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5r
SW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmlzTGlua2VkIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpzdHViIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjp1cGRhdGVNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rSW5mbzo6Zm9yRWFjaERlcGVuZGVudENlbGwgY29uc3QpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua0luZm86OnNldFNsb3dTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjpjbGVhclNsb3dTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAo
SlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElD
U3RhdHVzTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxs
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJh
eVByb2ZpbGVQcmVkaWN0aW9ucyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9PcGNvZGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9SZXBhdGNoLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAuCisgICAgICAgIChKU0M6
OmxpbmtTbG93UGF0aFRvKToKKyAgICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseU93bmVyKToKKyAgICAgICAgKEpTQzo6bGlua01vbm9tb3JwaGljQ2Fs
bCk6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtDYWxs
KToKKyAgICAgICAgKEpTQzo6anNUb1dhc21JQ0NvZGVQdHIpOgorICAgICAgICAoSlNDOjpsaW5r
VmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1JlcGF0Y2guaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oLgorICAgICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtG
b3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKToKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0VmlydHVhbENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAg
ICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKToKKyAgICAg
ICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbyk6CisgICAgICAgIChK
U0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6
OkpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KToKKyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAg
KEpTQzo6dmlydHVhbFRodW5rRm9yUmVndWxhckNvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OnZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50X2xpbmtfY2FsbCk6CisgICAg
ICAgIChKU0M6OkxMSW50OjpsbGludF92aXJ0dWFsX2NhbGwpOgorICAgICAgICAoSlNDOjpMTElu
dDo6aGFuZGxlSG9zdENhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAgIChKU0M6OkxMSW50OjpM
TElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZh
bCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5lcmljQ2FsbCk6IERlbGV0ZWQuCisgICAgICAg
ICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5j
cHA6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVhdGVKU0dhdGVUaHVuayk6CisgICAgICAgIChK
U0M6OkxMSW50OjpjcmVhdGVUYWlsQ2FsbEdhdGUpOgorICAgICAgICAoSlNDOjpMTEludDo6cmV0
dXJuTG9jYXRpb25UaHVuayk6CisgICAgICAgICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3BlcmF0
b3IgQ2FsbExpbmtJbmZvKik6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAg
ICAgICAqIG9mZmxpbmVhc20vY2xvb3AucmI6CisgICAgICAgICogb2ZmbGluZWFzbS9pbnN0cnVj
dGlvbnMucmI6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9HYXRlLmg6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElMaW5r
Q2FsbCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGgpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJVmlydHVhbENhbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKwogMjAyMS0xMS0xMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIFZNOjp3cml0ZUJhcnJpZXIoKSBhbmQgVk06Om11dGF0b3JGZW5j
ZSgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDEyYzRhNWM4Mjc3Y2E3
NzAxZDg0OWVmZjY0NjdiZDg4Nzk1OTAwMDguLmNjNDFmYzAzZDBhMDg2Y2M3N2NlNGU3ZDAwMmRl
MTdjODY0MzIwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY1OSw3
ICs2NTksNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIGJ5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0
ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKICAgICBieXRlY29kZS9KdW1wVGFibGUuaAot
ICAgIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKICAgICBieXRlY29kZS9MTEludFByb3Rv
dHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAogICAgIGJ5dGVjb2RlL0xhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmgKICAgICBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODljOWMxNzRiYjIyM2IzNmMzOTZiYWZjNDZm
ZTExNjZhNjgyMGY0My4uMzE1YjRmMGY5NmU0MTczN2YzN2IwMTE5ZjcwYzZiNjk5NzE0ODhhMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCQkwRjBD
QUVGQzFFQzREQTZCMDA5NzBEMTIgLyogSlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0FFRkExRUM0REE2MjAw
OTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBDQUVGRjFFQzREQTg4MDA5NzBEMTIgLyog
SGVhcEZpbmFsaXplckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjBDQUVGRTFFQzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNh
bGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYw
NDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBM
TEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMEYx
QTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1
c3RvbS5oICovOyB9OwogCQkwRjEyREUxMDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6
ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMkRF
MEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQg
LyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTg2LDcgKzE4NSw2IEBACiAJCTBG
MjRFNTQ0MTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BS
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjRFNTRGMTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJT
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRF
NTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIy
MTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyNEU1NEExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCAqLzsgfTsKIAkJMEYy
NEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NEIxN0VFMjc0
OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIx
NyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJh
bWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovOyB9OwpAQCAtMTg5Miw2ICsxODkwLDcgQEAKIAkJRTMzRjUwODcx
Qjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzNGNTA4NjFCODQ0
OUVGMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsK
IAkJRTM0MDBFQzEyMkExQ0M3QjAwOURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNDAwRUMw
MjJBMUNDNzgwMDlERUQ1NCAvKiBGdW5jdGlvbkV4ZWN1dGFibGVJbmxpbmVzLmggKi87IH07CiAJ
CUUzNDlBNzgxMjQ5MUYxNjEwMDFCQTMzNiAvKiBERkdDb2RlT3JpZ2luUG9vbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0OUE3ODAyNDkxRjE1QTAw
MUJBMzM2IC8qIERGR0NvZGVPcmlnaW5Qb29sLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTM0RDFBRTUyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0
Y2hJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzREMUFFNDI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRjaElubGluZXMuaCAqLzsgfTsKIAkJ
RTM0RTY1NzUyMDY2OEVBQTAwRkI4MUFDIC8qIFBhcnNlSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM0RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8q
IFBhcnNlSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUUzNEVEQkY3MURCNUZGQzkwMERDODdBNSAvKiBGcmFtZVRyYWNlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEVEQkY2MURCNUZGQzEw
MERDODdBNSAvKiBGcmFtZVRyYWNlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMzRGOTMwRTIzMjJEODgyMDAyQjhEQjQgLyogSlNHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNEY5
MzBDMjMyMkQ4ODEwMDJCOERCNCAvKiBKU0dlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTA2LDYgKzE5MDUsNyBAQAogCQlFMzVB
MEI5RDIyMEFEODdBMDBBQzQ0NzQgLyogRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVBMEI5QzIyMEFEODdBMDBB
QzQ0NzQgLyogRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1Q0ExNTQxREJDM0E1QzAwRjgzNTE2IC8qIERP
TUpJVEhlYXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM1Q0ExNTIxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNUNBMTU2MURC
QzNBNUYwMEY4MzUxNiAvKiBET01KSVRBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNUNBMTUwMURCQzNBNTYwMEY4MzUxNiAvKiBE
T01KSVRBYnN0cmFjdEhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFMzVFMzYzRTI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1RTM2M0MyNzNEQzhD
NjAwREIyNENDIC8qIFJlcGF0Y2guaCAqLzsgfTsKIAkJRTM1RTg5RkQyNUM1MEY4NzAwNzFFRTFF
IC8qIEJpZ0ludDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUzNUU4OUZCMjVDNTBGODYwMDcxRUUxRSAvKiBCaWdJbnQ2NEFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTM1RTg5RkUy
NUM1MEY4NzAwNzFFRTFFIC8qIEJpZ1VpbnQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzVFODlGQzI1QzUwRjg3MDA3MUVFMUUgLyogQmln
VWludDY0QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMzYzN0VFOTIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2MzdFRTcyMzZF
NTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM5MSw3ICsyMzkxLDYgQEAKIAkJMEYwQ0FF
RkUxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwRmluYWxpemVyQ2FsbGJhY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVj
dEluZGV4TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXREaXJlY3RJ
bmRleE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzMxNUY2QjZC
NTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5r
SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMTEludENhbGxMaW5rSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEwRjFBMjFDNDIwQkYwMDAxQzA3
RDIgLyogQWlyQ3VzdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckN1
c3RvbS5oOyBwYXRoID0gYjMvYWlyL0FpckN1c3RvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25GdXp6LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4
Y2VwdGlvbkZ1enouaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9u
RnV6ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ1NCw4ICsyNDUzLDYgQEAK
IAkJMEYyNEU1NDUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ2MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVy
YXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE9wZXJhdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NDgxN0VFMjc0OTAwQUJCMjE3
IC8qIFRlbXBSZWdpc3RlclNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZW1wUmVnaXN0ZXJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyNEU1NDkx
N0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MjRFNTRBMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
NEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8q
IElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUNhbGxGcmFtZVNldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTIwNyw2ICs1MjA0LDcgQEAKIAkJRTM0MDBFQzAyMkEx
Q0M3ODAwOURFRDU0IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRnVuY3Rpb25FeGVjdXRhYmxlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzQ5QTc3RjI0OTFGMTU5MDAxQkEzMzYgLyogREZHQ29kZU9yaWdpblBvb2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ29kZU9yaWdpblBvb2wuY3BwOyBwYXRoID0gZGZnL0RGR0Nv
ZGVPcmlnaW5Qb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0OUE3ODAy
NDkxRjE1QTAwMUJBMzM2IC8qIERGR0NvZGVPcmlnaW5Qb29sLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0NvZGVPcmlnaW5Qb29sLmg7IHBhdGggPSBkZmcvREZHQ29kZU9yaWdpblBvb2wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM0RDFBRTQyNzNEQzkxRjAwMDVCQjkxIC8qIFJlcGF0
Y2hJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2hJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEU2NTczMjA2NjhFOEQwMEZC
ODFBQyAvKiBQYXJzZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFy
c2VIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNEU2NTc0MjA2NjhFOEUw
MEZCODFBQyAvKiBQYXJzZUhhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUGFyc2VIYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM0RURC
RjYxREI1RkZDMTAwREM4N0E1IC8qIEZyYW1lVHJhY2Vycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGcmFtZVRyYWNlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUyMjksNiArNTIyNyw4IEBACiAJCUUzNUNBMTUwMURCQzNBNTYwMEY4MzUxNiAvKiBET01K
SVRBYnN0cmFjdEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NSklU
QWJzdHJhY3RIZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNUNBMTUxMURC
QzNBNTYwMEY4MzUxNiAvKiBET01KSVRIZWFwUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRE9NSklUSGVhcFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTM1Q0ExNTIxREJDM0E1NjAwRjgzNTE2IC8qIERPTUpJVEhlYXBSYW5nZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01KSVRIZWFwUmFuZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM1RTM2M0MyNzNEQzhDNjAwREIyNENDIC8qIFJl
cGF0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzVFMzYzRDI3M0RDOEM2MDBEQjI0Q0MgLyogUmVw
YXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBhdGNoLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM1RTg5RkIyNUM1MEY4NjAwNzFFRTFF
IC8qIEJpZ0ludDY0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmln
SW50NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzVFODlGQzI1QzUw
Rjg3MDA3MUVFMUUgLyogQmlnVWludDY0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmlnVWludDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM2MzdFRTcyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlua1RpbWVDb25zdGFudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjQ1OCw4ICs2NDU4LDYgQEAKIAkJCQk2MjNBMzdFQjFCODdBN0JE
MDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAwMzMy
MzIgLyogUmVnaXN0ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIzMiAv
KiBSZWdpc3RlclNldC5oICovLAotCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBh
dGNoLmNwcCAqLywKLQkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICov
LAogCQkJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwICovLAogCQkJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuY3BwICovLApAQCAtODgxNSw3ICs4ODEzLDYgQEAKIAkJCQkwRkI1NDY3NjE0
RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQlFMzYz
N0VFODIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8sCiAJCQkJRTM2
MzdFRTcyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLywKLQkJCQkwRjBG
QzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLywKIAkJCQk1M0ZB
MkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmNwcCAqLywKIAkJCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMTRG
NzlGNkUyMTZFQUQ1MDAwMDQ2RDM5IC8qIE1ldGFkYXRhVGFibGUuY3BwICovLApAQCAtODg2Miw2
ICs4ODU5LDkgQEAKIAkJCQkwRjQ0QTdBQTIwQkY2ODVFMDAyMkIxNzEgLyogUmVjb3JkZWRTdGF0
dXNlcy5oICovLAogCQkJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNw
YWNlLmNwcCAqLywKIAkJCQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVz
cGFjZS5oICovLAorCQkJCUUzNUUzNjNEMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNoLmNwcCAq
LywKKwkJCQlFMzVFMzYzQzI3M0RDOEM2MDBEQjI0Q0MgLyogUmVwYXRjaC5oICovLAorCQkJCUUz
NEQxQUU0MjczREM5MUYwMDA1QkI5MSAvKiBSZXBhdGNoSW5saW5lcy5oICovLAogCQkJCTg2NURB
MEM5MjVCODk2MkEwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJhbmRTdGF0dXMuY3BwICovLAogCQkJ
CTg2NURBMEM3MjVCODk2MEMwMDg3NTc3MiAvKiBTZXRQcml2YXRlQnJhbmRTdGF0dXMuaCAqLywK
IAkJCQk4NjVEQTBDNjI1Qjg5NTlFMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5j
cHAgKi8sCkBAIC05NzQ3LDYgKzk3NDcsNyBAQAogCQkJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1
MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0RERFMTk4
MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEz
NkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU5
RkE3QzUyNzNDOEIyNjAwNUQ5RTcwIC8qIERlZmVyR0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkM3MTJERjE3Q0Q4NzdDMDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVm
ZXJyZWRTb3VyY2VEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzQ2Mzg3NTFFNzBEREVDMDBG
MTJBQzEgLyogRGVmZXJyZWRXb3JrVGltZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzMjMsOCAr
MTAzMjQsNiBAQAogCQkJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVy
UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTkxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
QTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNjUzQkM0M0YyNkQwMTNBNjAwRDhCRTIwIC8qIFlhcnJKSVRSZWdpc3RlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5REQ3RjUyM0MxQkJCNTAwOTA1RjEzIC8q
IEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUI3MENGREUxREI2OUU2NjAw
RUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDUyNiw3ICsx
MDUyNSw2IEBACiAJCQkJRTM2MzdFRTkyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3Rh
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTJFQTZCMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRl
cmFsUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERFOUEwOTFCRTdENjlFMDA1RDg5RDkg
LyogTExJbnRBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYwRkM0NUExNEJEMTVGNTAw
QjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTIwQ0U5
RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0
NjgwQ0ExNEJCQjE2QzAwQkZFMjcyIC8qIExMSW50Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjQ2ODBEMzE0QkJEMTY3MDBCRkUyNzIgLyogTExJbnREYXRhLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwNzI2LDcgKzEwNzI0LDggQEAKIAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJFNjkgLyog
UmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFQTE4MjM0MEI0MDBB
ODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTJGNTZCNzFFNEU4NEIyMDAzNTk1M0IgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2gu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUzNUUzNjNFMjczREM4QzYwMERCMjRDQyAvKiBSZXBhdGNo
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzREMUFFNTI3M0RDOTFGMDAwNUJCOTEgLyogUmVwYXRj
aElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFOUYzRkI5MjYxM0M3ODkwMDY5RTg5RiAv
KiBSZXNvdXJjZUV4aGF1c3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OUVCQ0I3MEU4QzZE
NEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTNCNjQyRjI1
RDZGQjREMDAxQUREQjQgLyogUm9vdE1hcmtSZWFzb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTA3
ODQsNyArMTA3ODMsNiBAQAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQ
cm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5
NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJRkU5RkE3QzUyNzNDOEIyNjAwNUQ5RTcwIC8qIERlZmVyR0NJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8q
IFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3
QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKQEAgLTEx
MDUyLDYgKzExMDUwLDggQEAKIAkJCQlFMzI4MkJCQjFGRTkzMEFGMDBFREFGNzEgLyogWWFyckVy
cm9yQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNGRjlCQzcyMjM0NzQ5MTAwQjFBOUFCIC8q
IFlhcnJGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODY3MDRCODcxMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1M0JDNDNGMjZEMDEz
QTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0Yw
RkM5NTI2QTExQjRBMDA5OUZGQTAgLyogWWFyck1hdGNoaW5nQ29udGV4dEhvbGRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVy
bi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggNzkzZjQ2
ZjdiYzU4ZTUwOGNkYTZjYjkwMTVhYTA5MmU4Yzk4NjBkOS4uYjY5NTU1N2FmZTYwZjE0NzUxMDA5
YjFiNTA1ZjU1MTMzNDA1YjkwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjcz
LDYgKzI3Myw3IEBAIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAogYnl0ZWNvZGUvUHV0QnlWYXJp
YW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKIGJ5dGVjb2RlL1JlZHVjZVdo
aXRlc3BhY2UuY3BwCitieXRlY29kZS9SZXBhdGNoLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJy
YW5kU3RhdHVzLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFyaWFudC5jcHAKIGJ5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmNwcApAQCAtNjc2LDcgKzY3Nyw2IEBAIGppdC9SZWcuY3BwCiBq
aXQvUmVnaXN0ZXJBdE9mZnNldC5jcHAKIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAKIGpp
dC9SZWdpc3RlclNldC5jcHAKLWppdC9SZXBhdGNoLmNwcAogaml0L1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5jcHAKIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKIGppdC9TbG93UGF0aENhbGwu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2Nh
dGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaApp
bmRleCBhNmNhNWM4MWM1MTA5NWY4MTk4ZDliODJkYjE0YTU4MWEyNWNlNjA5Li4wNzUwNGJhMDRl
NTliNmQxZGNhMjM1ODhiZWZiNTRkZjE5MTg1YTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKQEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogCi0jaWYgRU5BQkxFKEFTU0VNQkxFUikKLQog
bmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gY2xhc3MgTmVhckNhbGxNb2RlIDogdWludDhfdCB7IFJl
Z3VsYXIsIFRhaWwgfTsKQEAgLTI2OSw1ICsyNjcsMyBAQCBpbmxpbmUgQ29kZUxvY2F0aW9uQ29u
dmVydGlibGVMb2FkPHJlc3VsdFRhZz4gQ29kZUxvY2F0aW9uQ29tbW9uPHRhZz46OmNvbnZlcnRp
YgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAppbmRl
eCAwNjI0MGU4NzQzNjM4NzNiOWRmMmNjOWYzN2YzODI5MThmZTdlMjllLi5mZjkzMDU4OWRiMjcx
MTgwZDA5OWUyMzU2Yzk5N2RjNTliMzU2ZTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJE
aXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgotI2luY2x1ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKIAogI2lmIE9TKExJTlVYKQogI2lu
Y2x1ZGUgIlBlcmZMb2cuaCIKQEAgLTQzLDI5ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0Mgewogc2l6
ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkU2l6ZXNbTGlua0J1ZmZl
cjo6bnVtYmVyT2ZQcm9maWxlc107CiBzaXplX3QgTGlua0J1ZmZlcjo6c19wcm9maWxlQ3VtbXVs
YXRpdmVMaW5rZWRDb3VudHNbTGlua0J1ZmZlcjo6bnVtYmVyT2ZQcm9maWxlc107CiAKLWJvb2wg
c2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIGlm
IChjb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlw
ZSgpKSAmJiBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpOwotfQotCi1ib29sIHNo
b3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUgbW9kZSkKLXsKLSAg
ICBpZiAoT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1v
ZGU6OkJCUU1vZGU6Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHko
KTsKLSAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HTW9kZToKLSAgICBjYXNlIFdh
c206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlOgotICAgICAgICByZXR1cm4g
T3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogTGlua0J1ZmZlcjo6Q29kZVJlZjxM
aW5rQnVmZmVyUHRyVGFnPiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1i
bHlJbXBsKCkKIHsKICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCmluZGV4IDVhM2YwMGYwNWM2ODU4Mjk1Nzcy
NjY3ZmMyMjM1NjdmNjhlOTJiODcuLjI4NWRmMGQxYTE4MDlkYjIwYjQ3OTRjZDMxMjA1OWVmYzZl
ZTAwZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5o
CkBAIC00MywxMiArNDMsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIFdhc20g
ewotZW51bSBjbGFzcyBDb21waWxhdGlvbk1vZGUgOiB1aW50OF90OwotfQotCi1jbGFzcyBDb2Rl
QmxvY2s7Ci0KIC8vIExpbmtCdWZmZXI6CiAvLwogLy8gVGhpcyBjbGFzcyBhc3Npc3RzIGluIGxp
bmtpbmcgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG1hY3JvIGFzc2VtYmxlciwgb25jZSBjb2RlIGdl
bmVyYXRpb24KQEAgLTQ0Niw4ICs0NDAsNiBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICAgICAgICAg
OiAobGlua0J1ZmZlclJlZmVyZW5jZSkuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5PHJl
c3VsdFB0clRhZz4oKSkKICNlbmRpZgogCi1ib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihD
b2RlQmxvY2sqKTsKLQogI2RlZmluZSBGSU5BTElaRV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtC
dWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgLi4uKSAgXAogICAgIEZJTkFMSVpFX0NPREVf
SUYoKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjb2RlQmxvY2spIHx8IE9wdGlvbnM6OmFzeW5j
RGlzYXNzZW1ibHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywgX19WQV9B
UkdTX18pCiAKQEAgLTQ3Niw4ICs0NjgsNiBAQCBib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihDb2RlQmxvY2sqKTsKICNkZWZpbmUgRklOQUxJWkVfUkVHRVhQX0NPREUobGlua0J1ZmZlclJl
ZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBkYXRhTG9nRkFyZ3VtZW50c0ZvckhlYWRpbmcpICBcCiAg
ICAgRklOQUxJWkVfQ09ERV9JRihKU0M6Ok9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBK
U0M6Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBSZWdFeHBEaXNh
c3NlbWJseSgpLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIGRhdGFMb2dGQXJn
dW1lbnRzRm9ySGVhZGluZykKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6
Q29tcGlsYXRpb25Nb2RlKTsKLQogI2RlZmluZSBGSU5BTElaRV9XQVNNX0NPREUobGlua0J1ZmZl
clJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCAuLi4pICBcCiAgICAgRklOQUxJWkVfQ09ERV9JRigo
SlNDOjpPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgSlNDOjpPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpLCBsaW5rQnVmZmVy
UmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIF9fVkFfQVJHU19fKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAK
aW5kZXggNWQ1Njc0MWVmZTY2NDI2ZWZjYTIwNTJhYzI1MDk4MzIyMDIzNzdkMC4uNzBkYjBkMDM5
ZWE3ZWQ2MTFjOGE2ZTVkODA4OTEzZjBhZDViZDU1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcApAQCAt
MjYsOCArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCIKIAorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRpc2Fz
c2VtYmxlci5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0NQdHJUYWcuaCIK
KyNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1By
aW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjMsNSArNjYsMjggQEAgQ1N0cmlu
ZyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZCYXNlOjpkaXNhc3NlbWJseShNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8RGlzYXNzZW1ibHkKICAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwogfQogCitib29s
IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBp
ZiAoY29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5
cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKTsKK30KKworYm9vbCBz
aG91bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIG1vZGUpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlOgorICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEJCUURpc2Fzc2VtYmx5
KCk7CisgICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR01vZGU6CisgICAgY2FzZSBX
YXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZToKKyAgICAgICAgcmV0dXJu
IE9wdGlvbnM6OmR1bXBPTUdEaXNhc3NlbWJseSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAppbmRleCA5MjU1OTE4YjFiYTE3NWExZjQ5ZGMzMDI1ZWM2ZmNhODg5Mzlk
MzY0Li4xZWEzMjQ1NDE1YWIwOGE0NWM3ZDNlNTk1OTYwYzQ0NWIxOWZmNzUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKQEAgLTU0LDYgKzU0LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1lc3BhY2Ug
V2FzbSB7CitlbnVtIGNsYXNzIENvbXBpbGF0aW9uTW9kZSA6IHVpbnQ4X3Q7Cit9IC8vIG5hbWVz
cGFjZSBXYXNtCisKK2NsYXNzIENvZGVCbG9jazsKIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOwogCiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CkBAIC0zNzcs
NyArMzgyLDEwIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciA6IHByaXZhdGUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyQmFzZSB7CiAKICAgICB2b2lkIGR1bXBXaXRoTmFtZShjb25zdCBjaGFy
KiBuYW1lLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFM
b2NhdGlvbigpLCBuYW1lLCBvdXQpOworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBXaXRoTmFtZShleGVjdXRhYmxlQWRkcmVz
cygpLCBkYXRhTG9jYXRpb24oKSwgbmFtZSwgb3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFzZTo6ZHVtcFdpdGhOYW1lKG51bGxwdHIsIG51bGxw
dHIsIG5hbWUsIG91dCk7CiAgICAgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0IHsgZHVtcFdpdGhOYW1lKCJDb2RlUHRyIiwgb3V0KTsgfQpAQCAtNTM3LDYgKzU0NSw5
IEBAIGlubGluZSBGdW5jdGlvblB0cjx0YWc+OjpGdW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8dGFnPiBwdHIpCiB7CiB9CiAKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENv
ZGVCbG9jayopOworYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoV2FzbTo6Q29tcGlsYXRp
b25Nb2RlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYmUyZThj
ODExZDZkZGQwYzE4NGJhNWVkNGQ5NTc5MzZmZDIyNThhMi4uMDEzODYwYjY2YzJiMTlhOGNiYjU5
NTNhNWQwZTQ0ZGQyNzdmYmQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0yNiw2ICsyNiw3IEBACiAKICAgICA6QmFzaWNCbG9ja0xv
Y2F0aW9uLAogICAgIDpCb3VuZExhYmVsLAorICAgIDpDYWxsTGlua0luZm8sCiAgICAgOkRlYnVn
SG9va1R5cGUsCiAgICAgOkVDTUFNb2RlLAogICAgIDpFcnJvclR5cGVXaXRoRXh0ZW5zaW9uLApA
QCAtNDQsNyArNDUsNiBAQAogICAgIDpKU1Njb3BlLAogICAgIDpKU1R5cGUsCiAgICAgOkpTVmFs
dWUsCi0gICAgOkxMSW50Q2FsbExpbmtJbmZvLAogICAgIDpSZXN1bHRUeXBlLAogICAgIDpPcGVy
YW5kVHlwZXMsCiAgICAgOlByaXZhdGVGaWVsZFB1dEtpbmQsCkBAIC04NDAsNyArODQwLDggQEAK
ICAgICAgICAgYXJndjogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAg
ICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86
IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTg1Miw3ICs4NTMsOCBAQAog
ICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAg
IGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzog
Q2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAg
ICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODY1LDcgKzg2Nyw4IEBACiAg
ICAgICAgIGVjbWFNb2RlOiBFQ01BTW9kZSwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5m
bzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAg
ICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApAQCAtODc5LDYgKzg4Miw3IEBA
CiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAg
ICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKICAgICB9LApAQCAt
OTAwLDYgKzkwNCw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAgICBt
ZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKICAgICB9LApAQCAtOTIxLDYgKzkyNiw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5r
SW5mbywKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKICAgICB9CkBAIC05MzMsNyArOTM5LDggQEAKICAgICAgICAgYXJn
djogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0lu
Zm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5m
bywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6
IFZhbHVlUHJvZmlsZSwKICAgICB9CiAKQEAgLTk0Nyw2ICs5NTQsNyBAQAogICAgICAgICBmaXJz
dFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJ
bmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAog
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTEyNDksNyArMTI1Nyw4
IEBACiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgaXRlcmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlv
bk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCi0g
ICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisgICAgICAgIGNhbGxMaW5r
SW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwK
ICAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgICAgIG1vZGVNZXRh
ZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKQEAgLTEyNzIsNyArMTI4MSw4IEBACiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgaXRl
cmF0aW9uTWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCi0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlu
a0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgbmV4dFJlc3VsdFByb2ZpbGU6IFZhbHVl
UHJvZmlsZSwKICAgICAgICAgZG9uZU1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwK
ICAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKQEAgLTEzOTMsNiArMTQwMyw5IEBA
CiBvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pzXzQ0CiBvcCA6bGxpbnRfY2xvb3Bf
ZGlkX3JldHVybl9mcm9tX2pzXzQ1CiBvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pz
XzQ2CitvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9tX2pzXzQ3CitvcCA6bGxpbnRfY2xv
b3BfZGlkX3JldHVybl9mcm9tX2pzXzQ4CitvcCA6bGxpbnRfY2xvb3BfZGlkX3JldHVybl9mcm9t
X2pzXzQ5CiAKIGVuZF9zZWN0aW9uIDpDTG9vcEhlbHBlcnMKIApAQCAtMTQxNSw2ICsxNDI4LDEw
IEBACiBvcCA6bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lCiBvcCA6bGxpbnRfaW50ZXJuYWxfZnVuY3Rp
b25fY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDpsbGludF9saW5rX2NhbGxfdHJhbXBvbGluZQor
b3AgOmxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF9jb25z
dHJ1Y3RfdHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUK
IG9wIDpjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmUKIG9w
IDpjaGVja3BvaW50X29zcl9leGl0X3RyYW1wb2xpbmUKIG9wIDpub3JtYWxfb3NyX2V4aXRfdHJh
bXBvbGluZQpAQCAtMTQyMyw2ICsxNDQwLDggQEAKIG9wIDpsbGludF9oYW5kbGVfdW5jYXVnaHRf
ZXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3Rf
cmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY2FsbF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgorb3Ag
Om9wX2NvbnN0cnVjdF92YXJhcmdzX3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NhbGxfdmFyYXJn
c19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbgpAQCAtMTQzOCwx
NSArMTQ1NywxNSBAQAogb3AgOm9wX2NvbnN0cnVjdF9zbG93X3JldHVybl9sb2NhdGlvbgogb3Ag
Om9wX2l0ZXJhdG9yX29wZW5fc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9pdGVyYXRvcl9u
ZXh0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCi1vcCA6b3BfdGFpbF9jYWxsX3JldHVybl9sb2NhdGlv
bgogb3AgOm9wX3RhaWxfY2FsbF9zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50c19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX3RhaWxfY2Fs
bF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF9ldmFsX3Nsb3dfcmV0
dXJuX2xvY2F0aW9uCiAKIG9wIDpqc190cmFtcG9saW5lX29wX2NhbGwKLW9wIDpqc190cmFtcG9s
aW5lX29wX3RhaWxfY2FsbAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0CitvcCA6anNf
dHJhbXBvbGluZV9vcF9jYWxsX3ZhcmFyZ3MKK29wIDpqc190cmFtcG9saW5lX29wX2NvbnN0cnVj
dF92YXJhcmdzCiBvcCA6anNfdHJhbXBvbGluZV9vcF9pdGVyYXRvcl9uZXh0CiBvcCA6anNfdHJh
bXBvbGluZV9vcF9pdGVyYXRvcl9vcGVuCiBvcCA6anNfdHJhbXBvbGluZV9vcF9jYWxsX3Nsb3cK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKaW5kZXggNGY0N2M4YmNjZjhlNTc0OGFhOWIwZjM2
ZTZmMzYzMDVhZGMzMDAxMS4uMjcwY2Q2ZjFkMDJmNDRkNTNkYjNlNmFhNjNhZmZhMTVlMGMwOTI2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKQEAgLTE4MCw3ICsxODAsNyBAQCBwdHJk
aWZmX3Qgc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCB1bnNpZ25lZCBjaGVjawogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFk
YXRhPgotTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1ldGFkYXRh
JiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQorQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9p
bnRJbmRleCkKIHsKICAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4KTsKICAgICByZXR1
cm4gbWV0YWRhdGEubV9jYWxsTGlua0luZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDNiODAzYjM4YTc4NjliNDkzODljMDc5MGFi
YzhiZWI4ZDQwYTU1OGEuLmExYWZjZjkzOGE1MWYyYmMxNzJmMGZkMjAyNzEzMmU2NzJlZWQ5N2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3Bw
CkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CiAKLSNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAK
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihPcGNvZGVJ
RCBvcGNvZGVJRCkKQEAgLTgyLDExICs4MSwxMyBAQCBDYWxsTGlua0luZm86On5DYWxsTGlua0lu
Zm8oKQogCiB2b2lkIENhbGxMaW5rSW5mbzo6Y2xlYXJTdHViKCkKIHsKKyNpZiBFTkFCTEUoSklU
KQogICAgIGlmICghc3R1YigpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0dWItPmNsZWFy
Q2FsbE5vZGVzRm9yKHRoaXMpOwogICAgIG1fc3R1YiA9IG51bGxwdHI7CisjZW5kaWYKIH0KIAog
dm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0pCkBAIC0xMTMsMTkgKzExNCwxOSBAQCBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmRvbmVMb2Nh
dGlvbigpCiAgICAgcmV0dXJuIG1fZG9uZUxvY2F0aW9uOwogfQogCi1zdGF0aWMgY29uc3RleHBy
IHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwotCiB2b2lkIENhbGxMaW5rSW5m
bzo6c2V0TW9ub21vcnBoaWNDYWxsZWUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCog
Y2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghaXNEaXJlY3QoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIShi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpICYgcG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7
CiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5zZXQodm0sIG93bmVyLCBjYWxsZWUpOwogCi0gICAg
aWYgKGlzRGF0YUlDKCkpIAorICAgIGlmIChpc0RhdGFJQygpKQogICAgICAgICB1LmRhdGFJQy5t
X21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gY29kZVB0cjsKICAgICBlbHNlIHsKKyNpZiBF
TkFCTEUoSklUKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKHUuY29k
ZUlDLm1fY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPihjb2Rl
UHRyKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5t
X2NhbGxlZUxvY2F0aW9uLCBjYWxsZWUpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC0xMzUsOCAr
MTM2LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNhbGxlZSgpCiAgICAgbV9jYWxsZWVP
ckNvZGVCbG9jay5jbGVhcigpOwogICAgIGlmIChpc0RhdGFJQygpKQogICAgICAgICB1LmRhdGFJ
Qy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gbnVsbHB0cjsKLSAgICBlbHNlIGlmICgh
Y2xlYXJlZEJ5SmV0dGlzb24oKSkKKyAgICBlbHNlIGlmICghY2xlYXJlZEJ5SmV0dGlzb24oKSkg
eworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uLCBudWxscHRyKTsKKyNlbmRpZgorICAgIH0KIH0K
IAogSlNPYmplY3QqIENhbGxMaW5rSW5mbzo6Y2FsbGVlKCkKQEAgLTIyNCw2ICsyMjgsNyBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKICAgICAKICAgICBpZiAoaXNMaW5r
ZWQoKSkgewogICAgICAgICBpZiAoc3R1YigpKSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
ICAgIGlmICghc3R1YigpLT52aXNpdFdlYWsodm0pKSB7CiAgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygKQEAgLTIzNCw2ICsyMzksNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZN
JiB2bSkKICAgICAgICAgICAgICAgICB1bmxpbmsodm0pOwogICAgICAgICAgICAgICAgIG1fY2xl
YXJlZEJ5R0MgPSB0cnVlOwogICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIH0gZWxzZSBp
ZiAoIXZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSkpIHsKICAgICAg
ICAgICAgIGlmIChpc0RpcmVjdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKQEAgLTI4MCwxMyArMjg2LDE0IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSYgc2h1ZmZsZURhdGEpCiB7CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVu
aXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oc2h1ZmZsZURhdGEpOwogICAgIG1fZnJhbWVTaHVm
ZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywg
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lk
KCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKQEAgLTM0NSw3ICszNTIsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbAog
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6
Ok5vKTsKQEAgLTM1OCw3ICszNjUsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUgogICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKQEAg
LTM2Niw3ICszNzMsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmCiAKIHZvaWQgQ2FsbExpbmtJ
bmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBzZXRTbG93
UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2FsbCgpLmNvZGUoKSk7CiAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZvOjpyZWdUMik7
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KQEAgLTM3
NiwyMSArMzgzLDMxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mCiAgICAgaml0Lm1vdmUoY2Fs
bExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9u
KCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KKyNlbmRpZgogCi12b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3ZvaWQg
Q2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgQ2FsbFR5cGUgY2FsbFR5cGUs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1l
U2h1ZmZsZURhdGEpCiB7Ci0gICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENh
bGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKLSAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlu
a0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7Ci0gICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtl
ZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247Ci0gICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZv
LmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVTaHVmZmxlRGF0YSk7
CisgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KTsKKyAgICBtX2Nh
bGxUeXBlID0gY2FsbFR5cGU7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IEdQUkluZm86
OnJlZ1QyOworICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOworICAgIGlmIChmcmFtZVNodWZm
bGVEYXRhKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEg
cmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZy
YW1lU2h1ZmZsZURhdGEpOworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVl
PENhbGxGcmFtZVNodWZmbGVEYXRhPigqZnJhbWVTaHVmZmxlRGF0YSk7CiAgICAgfQotICAgIHNl
dFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5m
b0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29k
ZTxKU0VudHJ5UHRyVGFnPigpKTsKKyNlbmRpZgorICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJ
Qzo6WWVzKTsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2Fs
bCgpLmNvZGUoKSk7CisgICAgLy8gSWYgSklUIGlzIGRpc2FibGVkLCB3ZSBzaG91bGQgbm90IHN1
cHBvcnQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNhbGwgSUMuCisgICAgaWYgKCFPcHRpb25zOjp1
c2VKSVQoKSkKKyAgICAgICAgZGlzYWxsb3dTdHVicygpOwogfQogCisjaWYgRU5BQkxFKEpJVCkK
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CkBAIC00MDYsNyArNDIzLDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCkKICAgICB9KTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWls
Q2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogCkBAIC00NjIsNiAr
NDc5LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgdGFyZ2V0KTsKIH0KKyNlbmRp
ZgogCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CkBAIC00ODMsMTEgKzUw
MSwxNCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6cmV2ZXJ0Q2FsbFRvU3R1YigpCiAgICAgICAgIG1f
Y2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoSklU
KQogICAgICAgICBDQ2FsbEhlbHBlcnM6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRy
V2l0aFBhdGNoKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFydE9mQnJhbmNoUHRyV2l0
aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwgY2FsbGVlR1BSKCks
IG51bGxwdHIpOworI2VuZGlmCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKIHZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdT
dHViKQogewogICAgIGNsZWFyU3R1YigpOwpAQCAtNTA0LDcgKzUyNSw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjpzZXRTdHViKFJlZjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4mJiBuZXdTdHVi
KQogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1f
c3R1Yi0+Y29kZSgpLmNvZGUoKSkpOwogICAgIH0KIH0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKaW5kZXggZTVmNzdjZjM3YmYyNjZmNGI5YzkzYzUwY2Y5
OTZkMjFjNjY4Y2U0NS4uYjJkM2FmYTZjZjYwZDE1YmU3YTVkNDlkODYyY2M0NWNmOGI1OGE3NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaApAQCAt
MjgsMjUgKzI4LDI5IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKICNpbmNs
dWRlICJDYWxsTW9kZS5oIgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRh
Lmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAotI2lmIEVOQUJMRShKSVQpCi0KIGNsYXNzIENDYWxsSGVscGVyczsKK2NsYXNzIEV4ZWN1
dGFibGVCYXNlOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBKU0Z1bmN0aW9uOwor
Y2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU7CiBlbnVtIE9wY29kZUlEIDogdW5zaWdu
ZWQ7CiAKK3N0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIHN0cnVjdCBVbmxpbmtlZENhbGxM
aW5rSW5mbzsKIAogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVs
Tm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOworCiAgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBO
b25lLAogICAgICAgICBDYWxsLApAQCAtNTksNiArNjMsOCBAQCBjbGFzcyBDYWxsTGlua0luZm8g
OiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgICAgICBE
aXJlY3RDb25zdHJ1Y3QsCiAgICAgICAgIERpcmVjdFRhaWxDYWxsCiAgICAgfTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBvbHltb3JwaGljQ2FsbGVlTWFzayA9IDE7CiAgICAg
CiAgICAgc3RhdGljIENhbGxUeXBlIGNhbGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKTsKIApA
QCAtMTc0LDM1ICsxODAsNDMgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJh
d1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgcmV0dXJuIGlzVmFyYXJnc0Nh
bGxUeXBlKHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKSk7CiAgICAgfQogCi0gICAg
Ym9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YiB8fCBtX2NhbGxlZU9yQ29kZUJs
b2NrOyB9CisgICAgYm9vbCBpc0xpbmtlZCgpIGNvbnN0IHsgcmV0dXJuIHN0dWIoKSB8fCBtX2Nh
bGxlZU9yQ29kZUJsb2NrOyB9CiAgICAgdm9pZCB1bmxpbmsoVk0mKTsKIAorI2lmIEVOQUJMRShK
SVQpCiAgICAgdm9pZCBzZXRVcENhbGwoQ2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWVH
UFIpCiAgICAgewogICAgICAgICBtX2NhbGxUeXBlID0gY2FsbFR5cGU7CiAgICAgICAgIG1fY2Fs
bGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhW
TSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUik7Ci0KICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVHUFI7IH0KKyNlbmRpZgorCisgICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgQ2Fs
bFR5cGUsIEJ5dGVjb2RlSW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKik7CiAgICAgCiAgICAg
ZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKICAgICAgICAgWWVzLAogICAgICAgICBO
bwogICAgIH07CiAKKyNpZiBFTkFCTEUoSklUKQogcHJpdmF0ZToKLSAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlz
VGFpbENhbGwsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CiAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwg
R1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJl
cGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7Ci0gICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKTsKKyAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYs
IFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVt
aXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOwogICAgIHN0YXRpYyB2b2lkIGVtaXREYXRh
SUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwor
CisgICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2FsbCgpOworICAgIHZvaWQgc2V0RGlyZWN0Q2Fs
bFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CisjZW5kaWYKKwogICAg
IHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6
WWVzOyB9CkBAIC0yMTcsNyArMjMxLDYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgbV9kb25lTG9jYXRp
b24gPSBkb25lTG9jYXRpb247CiAgICAgfQogCi0gICAgdm9pZCBpbml0aWFsaXplRGlyZWN0Q2Fs
bCgpOwogCiAgICAgYm9vbCBhbGxvd1N0dWJzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1N0dWJz
OyB9CiAKQEAgLTIzNyw3ICsyNTAsNiBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgc2V0Q29kZUJsb2Nr
KFZNJiwgSlNDZWxsKiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKICAgICB2b2lkIGNsZWFyQ29kZUJs
b2NrKCk7CiAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaygpOwotICAgIHZvaWQgc2V0
RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPik7CiAKICAg
ICB2b2lkIHNldExhc3RTZWVuQ2FsbGVlKFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNPYmpl
Y3QqIGNhbGxlZSk7CiAgICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVlKCk7CkBAIC0yNDcsMjIg
KzI1OSwxOCBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgc2V0RXhlY3V0YWJsZUR1cmluZ0NvbXBpbGF0
aW9uKEV4ZWN1dGFibGVCYXNlKik7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKTsK
ICAgICAKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0U3R1YihSZWY8UG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU+JiYpOworI2VuZGlmCiAgICAgdm9pZCBjbGVhclN0dWIoKTsKIAogICAg
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViKCkgY29uc3QKICAgICB7CisjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgcmV0dXJuIG1fc3R1Yi5nZXQoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldFNsb3dTdHViKFJlZjxKSVRTdHViUm91dGluZT4mJiBuZXdTbG93U3R1YikKLSAgICB7Ci0g
ICAgICAgIG1fc2xvd1N0dWIgPSBXVEZNb3ZlKG5ld1Nsb3dTdHViKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGNsZWFyU2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7
CisjZWxzZQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgogICAgIH0KIAogICAgIGJv
b2wgc2Vlbk9uY2UoKQpAQCAtMzMwLDE5ICszMzgsMTcgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDog
cHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpOwogICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdWludDMyX3Qq
IGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICB9Ci0jZW5kaWYK
LQogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHNldE1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVuc2lnbmVkKTsK
KyAgICB2b2lkIHVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKKyAgICAg
ICAgICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1Bh
dGhDb3VudCgpCiAgICAgewpAQCAtMzY0LDEwICszNzAsMTIgQEAgY2xhc3MgQ2FsbExpbmtJbmZv
IDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fc2xvd1BhdGhDYWxsRGVzdGlu
YXRpb24pOwogICAgIH0KIAorI2lmIEVOQUJMRShKSVQpCiAgICAgR1BSUmVnIGNhbGxlZUdQUigp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9jYWxsZWVHUFI7CiAgICAgfQorI2VuZGlmCiAKICAg
ICB1aW50MzJfdCBzbG93UGF0aENvdW50KCkKICAgICB7CkBAIC0zODMsOSArMzkxLDExIEBAIGNs
YXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJ
bmZvPiB7CiAgICAgdm9pZCBmb3JFYWNoRGVwZW5kZW50Q2VsbChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzTGlua2VkKCkpIHsKLSAgICAgICAgICAg
IGlmIChzdHViKCkpCisgICAgICAgICAgICBpZiAoc3R1YigpKSB7CisjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgICAgICAgICBzdHViKCktPmZvckVhY2hEZXBlbmRlbnRDZWxsKGZ1bmN0b3IpOwot
ICAgICAgICAgICAgZWxzZSB7CisjZW5kaWYKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgZnVuY3RvcihtX2NhbGxlZU9yQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNEaXJlY3QoKSkKICAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihtX2xhc3RT
ZWVuQ2FsbGVlT3JFeGVjdXRhYmxlLmdldCgpKTsKQEAgLTM5NywyNiArNDA3LDM1IEBAIGNsYXNz
IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZv
PiB7CiAKICAgICB2b2lkIHZpc2l0V2VhayhWTSYpOwogCisjaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIHNldEZyYW1lU2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEmKTsKIAog
ICAgIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhKiBmcmFtZVNodWZmbGVEYXRhKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2ZyYW1lU2h1ZmZsZURhdGEuZ2V0KCk7CiAgICAgfQorI2VuZGlm
CiAKIHByaXZhdGU6CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBm
YXN0UGF0aFN0YXJ0KCk7CiAKKyAgICB1aW50MzJfdCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIHsgMCB9OyAvLyBGb3IgdmFyYXJnczogdGhlIHByb2ZpbGVkIG1heGltdW0gbnVtYmVy
IG9mIGFyZ3VtZW50cy4gRm9yIGRpcmVjdDogdGhlIG51bWJlciBvZiBzdGFjayBzbG90cyBhbGxv
Y2F0ZWQgZm9yIGFyZ3VtZW50cy4KICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewog
ICAgICAgICBVbmlvblR5cGUoKSAKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgOiBkYXRh
SUMgeyBudWxscHRyLCBJbnZhbGlkR1BSUmVnIH0KKyNlbHNlCisgICAgICAgICAgICA6IGRhdGFJ
QyB7IG51bGxwdHIgfQorI2VuZGlmCiAgICAgICAgIHsgfQogICAgICAgICBzdHJ1Y3QgRGF0YUlD
IHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21v
bm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uOworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICBH
UFJSZWcgbV9jYWxsTGlua0luZm9HUFI7CisjZW5kaWYKICAgICAgICAgfSBkYXRhSUM7CiAKICAg
ICAgICAgc3RydWN0IHsKQEAgLTQyOSw5ICs0NDgsMTAgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDog
cHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIAogICAgIFdyaXRl
QmFycmllcjxKU0NlbGw+IG1fY2FsbGVlT3JDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9sYXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZTsKKyNpZiBFTkFCTEUoSklUKQogICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gbV9zdHViOwotICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gbV9zbG93U3R1YjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+IG1fZnJhbWVTaHVmZmxlRGF0YTsKKyNlbmRpZgogICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAgICAg
Ym9vbCBtX2hhc1NlZW5DbG9zdXJlIDogMTsKQEAgLTQ0MSw5ICs0NjEsMTAgQEAgY2xhc3MgQ2Fs
bExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsK
ICAgICBib29sIG1fY2xlYXJlZEJ5SmV0dGlzb24gOiAxOwogICAgIHVuc2lnbmVkIG1fY2FsbFR5
cGUgOiA0OyAvLyBDYWxsVHlwZQogICAgIHVuc2lnbmVkIG1fdXNlRGF0YUlDIDogMTsgLy8gVXNl
RGF0YUlDCisjaWYgRU5BQkxFKEpJVCkKICAgICBHUFJSZWcgbV9jYWxsZWVHUFIgeyBJbnZhbGlk
R1BSUmVnIH07CisjZW5kaWYKICAgICB1aW50MzJfdCBtX3Nsb3dQYXRoQ291bnQgeyAwIH07Ci0g
ICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9y
IHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBk
aXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMu
CiB9OwogCiBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvKQpAQCAtNDUzLDExICs0NzQsNyBAQCBpbmxpbmUgQ29kZU9y
aWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpZ2luKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KQogCiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8gewogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMg
Y2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KLSAgICBDYWxsTGlua0luZm86OkNh
bGxUeXBlIGNhbGxUeXBlOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGRvbmVMb2NhdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
IGZyYW1lU2h1ZmZsZURhdGE7CiB9OwogCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcAppbmRleCBmN2FmYjJiMGYyOGZkOWU1ZmZjNWMzNGI2YTNhODU2YWUzNzMw
MmY1Li5kNTkwNGE4ZTkwYTJjZGE0NjkzNzFmODdlOTc3YmQyYzhkMzkzMTdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKQEAgLTMw
LDcgKzMwLDYgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTExJbnRDYWxsTGlua0lu
Zm8uaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CiAKQEAgLTUyLDQ3ICs1MSw2IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1
cyhKU1ZhbHVlIHZhbHVlKQogICAgIG1fdmFyaWFudHMuYXBwZW5kKENhbGxWYXJpYW50KHZhbHVl
LmFzQ2VsbCgpKSk7CiB9CiAKLUNhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQotewotICAgIFVOVVNFRF9QQVJBTShw
cm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0jaWYgRU5B
QkxFKERGR19KSVQpCi0gICAgaWYgKHByb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkt
Pmhhc0V4aXRTaXRlKERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25z
dGFudFZhbHVlKSkpIHsKLSAgICAgICAgLy8gV2UgY291bGQgZm9yY2UgdGhpcyB0byBiZSBhIGNs
b3N1cmUgY2FsbCwgYnV0IGluc3RlYWQgd2UnbGwganVzdCBhc3N1bWUgdGhhdCBpdAotICAgICAg
ICAvLyB0YWtlcyBzbG93IHBhdGguCi0gICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBhdXRvIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgT3Bjb2RlSUQgb3Ag
PSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKLQotICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm87Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAg
Y2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENhbGw+KCkubWV0YWRhdGEocHJvZmls
ZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfY29u
c3RydWN0OgotICAgICAgICBjYWxsTGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3Ry
dWN0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIG9wX3RhaWxfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmlu
c3RydWN0aW9uLT5hczxPcFRhaWxDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2Fs
bExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46Ci0g
ICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCku
bWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2Nh
bGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gQ2FsbExpbmtTdGF0dXMoKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcmV0dXJuIENhbGxM
aW5rU3RhdHVzKGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUoKSk7Ci19Ci0KIENhbGxMaW5r
U3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBjb25zdCBJQ1N0YXR1c01hcCYg
bWFwLAogICAgIEV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGEpCkBAIC0xMDUsMTAgKzYzLDE5IEBA
IENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIFVOVVNFRF9Q
QVJBTShleGl0U2l0ZURhdGEpOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKS5jYWxs
TGlua0luZm87Ci0gICAgaWYgKCFjYWxsTGlua0luZm8pIHsKKyAgICBpZiAoIWNhbGxMaW5rSW5m
bykKKyAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7CisgICAgLy8gZG9uZUxvY2F0aW9u
IGlzIG51bGxwdHIgd2hlbiBpdCBpcyB0aWVkIHRvIExMSW50IChub3QgQmFzZWxpbmUpLgorICAg
IGlmICghY2FsbExpbmtJbmZvLT5kb25lTG9jYXRpb24oKSkgewogICAgICAgICBpZiAoZXhpdFNp
dGVEYXRhLnRha2VzU2xvd1BhdGgpCiAgICAgICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgp
OwotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChsb2NrZXIsIHByb2ZpbGVkQmxvY2ss
IGJ5dGVjb2RlSW5kZXgpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBpZiAocHJvZmls
ZWRCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+aGFzRXhpdFNpdGUoREZHOjpGcmVxdWVudEV4
aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSkgeworICAgICAgICAgICAg
Ly8gV2UgY291bGQgZm9yY2UgdGhpcyB0byBiZSBhIGNsb3N1cmUgY2FsbCwgYnV0IGluc3RlYWQg
d2UnbGwganVzdCBhc3N1bWUgdGhhdCBpdAorICAgICAgICAgICAgLy8gdGFrZXMgc2xvdyBwYXRo
LgorICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKKyAgICAgICAgfQorI2VuZGlm
CiAgICAgfQogICAgIAogICAgIHJldHVybiBjb21wdXRlRm9yKGxvY2tlciwgcHJvZmlsZWRCbG9j
aywgKmNhbGxMaW5rSW5mbywgZXhpdFNpdGVEYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgKaW5kZXggNWI1MzgwZjkwYzU2ZmMwNTRlNjlm
MzdkNDM3NTJlNDNjZGMwNzAyYS4uYTkyZDkwMDFiOTZiZTQ5ZDkwMWI0YWJhOWNkNTI5MTAyMTAx
MDBkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3Rh
dHVzLmgKQEAgLTExNyw3ICsxMTcsNiBAQCBjbGFzcyBDYWxsTGlua1N0YXR1cyBmaW5hbCB7CiBw
cml2YXRlOgogICAgIHZvaWQgbWFrZUNsb3N1cmVDYWxsKCk7CiAgICAgCi0gICAgc3RhdGljIENh
bGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
Q29kZUJsb2NrKiwgQnl0ZWNvZGVJbmRleCk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBzdGF0aWMg
Q2FsbExpbmtTdGF0dXMgY29tcHV0ZUZyb21DYWxsTGlua0luZm8oCiAgICAgICAgIGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYsIENhbGxMaW5rSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA3N2NhYThlNTdlOTRhZDczMmE4NzAzYjcx
MGZkNDgwZjcxODEzYWU2Li41YThiNzg1NmNlYmNjMGM1OTllZmI1ODUxNDAxYjM1NDBjZWFkMWUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAt
NDQ5LDE0ICs0NDksMTcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHRoaXMpOyBcCiAgICAgbmV3ICgmbWV0YWRhdGEpIF9f
b3A6Ok1ldGFkYXRhIHsgYnl0ZWNvZGUgfTsgXAogCi0jZGVmaW5lIENBU0UoX19vcCkgY2FzZSBf
X29wOjpvcGNvZGVJRAotCi0jZGVmaW5lIExJTksoLi4uKSBcCi0gICAgQ0FTRShXVEZfTEFaWV9G
SVJTVChfX1ZBX0FSR1NfXykpOiB7IFwKKyNkZWZpbmUgTElOS19JTVBMKC4uLikgXAogICAgICAg
ICBJTklUSUFMSVpFX01FVEFEQVRBKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSkgXAogICAg
ICAgICBXVEZfTEFaWV9IQVNfUkVTVChfX1ZBX0FSR1NfXykoeyBcCiAgICAgICAgICAgICBXVEZf
TEFaWV9GT1JfRUFDSF9URVJNKExJTktfRklFTEQsICBXVEZfTEFaWV9SRVNUXyhfX1ZBX0FSR1Nf
XykpIFwKICAgICAgICAgfSkgXAorCisjZGVmaW5lIENBU0UoX19vcCkgY2FzZSBfX29wOjpvcGNv
ZGVJRAorCisjZGVmaW5lIExJTksoLi4uKSBcCisgICAgQ0FTRShXVEZfTEFaWV9GSVJTVChfX1ZB
X0FSR1NfXykpOiB7IFwKKyAgICAgICAgTElOS19JTVBMKF9fVkFfQVJHU19fKSBcCiAgICAgICAg
IGJyZWFrOyBcCiAgICAgfQogCkBAIC00NjUsMTAgKzQ2OCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwg
VW5saW5rCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCk7CiAgICAgICAgIG1fYnl0ZWNvZGVDb3N0ICs9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdOwog
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIExJTksoT3BDYWxsVmFyYXJncywg
cHJvZmlsZSkKLSAgICAgICAgTElOSyhPcFRhaWxDYWxsVmFyYXJncywgcHJvZmlsZSkKLSAgICAg
ICAgTElOSyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgcHJvZmlsZSkKLSAgICAgICAgTElO
SyhPcENvbnN0cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwg
cHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFByaXZhdGVOYW1lLCBwcm9maWxlKQogCkBAIC00
OTgsMTEgKzQ5Nyw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BF
bnVtZXJhdG9ySGFzT3duUHJvcGVydHkpCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlW
YWwsIHByb2ZpbGUpCiAKLSAgICAgICAgTElOSyhPcENhbGwsIHByb2ZpbGUpCi0gICAgICAgIExJ
TksoT3BUYWlsQ2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENhbGxFdmFsLCBwcm9maWxl
KQotICAgICAgICBMSU5LKE9wQ29uc3RydWN0LCBwcm9maWxlKQotCiAgICAgICAgIExJTksoT3BJ
bkJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlWYWwpCiAgICAgICAgIExJTksoT3BQdXRCeVZh
bERpcmVjdCkKQEAgLTUyNywxMyArNTIxLDY4IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAg
ICAgICAgIExJTksoT3BDYXRjaCkKICAgICAgICAgTElOSyhPcFByb2ZpbGVDb250cm9sRmxvdykK
IAorICAgICAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENhbGws
IHByb2ZpbGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXpl
RGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rp
b24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BUYWls
Q2FsbCwgcHJvZmlsZSkKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZURhdGEgc2h1ZmZsZURhdGEgPSBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6Y3JlYXRlRm9yQmFz
ZWxpbmVPckxMSW50VGFpbENhbGwoYnl0ZWNvZGUsIG51bVBhcmFtZXRlcnMoKSk7CisgICAgICAg
ICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlu
a0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgJnNodWZm
bGVEYXRhKTsKKyNlbHNlCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0
aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5z
dHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKKyAgICAgICAgICAgIExJ
TktfSU1QTChPcENhbGxFdmFsLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxs
TGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihv
cGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogeworICAgICAgICAg
ICAgTElOS19JTVBMKE9wQ29uc3RydWN0LCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEu
bV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlw
ZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsK
LSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BJdGVyYXRvck9wZW4pCisgICAgICAg
ICAgICBMSU5LX0lNUEwoT3BJdGVyYXRvck9wZW4pCisgICAgICAgICAgICBtZXRhZGF0YS5tX2Nh
bGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9y
KG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogewotICAg
ICAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShPcEl0ZXJhdG9yTmV4dCkKKyAgICAgICAgICAg
IExJTktfSU1QTChPcEl0ZXJhdG9yTmV4dCkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExp
bmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bj
b2RlSUQpLCBpbnN0cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAg
ICAgIExJTktfSU1QTChPcENhbGxWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRh
dGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUp
CisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZt
LCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgo
KSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzOiB7CisgICAgICAgICAgICBMSU5LX0lN
UEwoT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUpCisgICAgICAgICAgICBtZXRh
ZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBDYWxsTGlua0luZm86OmNh
bGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENvbnN0cnVjdFZhcmFyZ3MsIHByb2Zp
bGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlD
KHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5k
ZXgoKSwgbnVsbHB0cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC03ODMs
MjEgKzgzMiwxOCBAQCB2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNv
ZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOwogICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQ
b29sLnNpemUoKSk7CiAgICAgICAgIGppdERhdGEubV9zdHViSW5mb3MgPSBGaXhlZFZlY3RvcjxT
dHJ1Y3R1cmVTdHViSW5mbz4oaml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpOwot
ICAgICAgICBqaXREYXRhLm1fY2FsbExpbmtJbmZvcyA9IEZpeGVkVmVjdG9yPENhbGxMaW5rSW5m
bz4oaml0Q29kZS0+bV91bmxpbmtlZENhbGxzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYg
dW5saW5rZWRDYWxsTGlua0luZm8gOiBqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMpIHsKKyAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gZ2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleChsb2NrZXIsIHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldENvZGVMb2NhdGlvbnMoeyB9LCB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRp
b24pOworICAgICAgICB9CisKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgYXV0byBlbnRyeSA9
IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOwogICAgICAgICAgICAgc3dpdGNoIChlbnRy
eS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9i
YWxPYmplY3Q6CiAgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9
IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucG9p
bnRlcigpKTsKLSAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRD
YWxsTGlua0luZm8gPSBqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHNbaW5kZXhdOwotICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5m
b3NbaW5kZXhdOwotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlD
KHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDIpOwotICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSAmY2Fs
bExpbmtJbmZvOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihl
bnRyeS5wb2ludGVyKCkpOwogICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8mIHVubGlua2VkU3R1YkluZm8gPSBqaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zW2luZGV4
XTsKQEAgLTE1NjcsMTUgKzE2MTMsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElu
bGluZUNhY2hlcygpCiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwotCi0gICAgZm9y
RWFjaExMSW50Q2FsbExpbmtJbmZvKFsmXShMTEludENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KSB7Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8uaXNMaW5rZWQoKSAmJiAhdm0uaGVhcC5pc01h
cmtlZChjYWxsTGlua0luZm8uY2FsbGVlKCkpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlT1NSKCksICJDbGVhcmluZyBMTEludCBjYWxsIGZyb20gIiwgKnRoaXMp
OwotICAgICAgICAgICAgY2FsbExpbmtJbmZvLnVubGluaygpOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChj
YWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUoKSkpCi0gICAgICAgICAgICBjYWxsTGlua0luZm8u
Y2xlYXJMYXN0U2VlbkNhbGxlZSgpOwotICAgIH0pOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAg
LTE1OTMsOCArMTYzMCw2IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVK
SVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0
RGF0YS5nZXQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERhdGEt
Pm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0o
KSk7CiAgICAgICAgIGZvciAoYXV0byYgc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykg
ewogICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyQmFzZSBsb2NrZXIoTm9Mb2NraW5nTmVj
ZXNzYXJ5KTsKICAgICAgICAgICAgIHN0dWJJbmZvLnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2Vy
LCB0aGlzKTsKQEAgLTE2MTIsMTkgKzE2NDcsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVK
SVRJbmxpbmVDYWNoZXMoKQogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0KLSNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIGlmIChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKLSAg
ICAgICAgLy8gVmVyaWZ5IHdlIGRvbid0IG5lZWQgdG8gZmluYWxpemUgdGhlc2Ugc2luY2UgdGhl
eSdyZSB2aXJ0dWFsIGNhbGxzLgotICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvIDogc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9l
dmFsQ2FsbExpbmtJbmZvcykgewotICAgICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlz
TGlua2VkKCkpOwotICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5mb3JFYWNoRGVwZW5kZW50Q2Vs
bChbXSAoSlNDZWxsKikgewotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgIH0KLSNlbmRpZgogfQogI2VuZGlmCiAK
QEAgLTE2MzQsOCArMTY1NiwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoVk0mIHZtKQogCiAgICAgdXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKIAotICAgIGlmIChK
SVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKKyAgICBpZiAoSklUQ29kZTo6
Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpIHsKICAgICAgICAgZmluYWxpemVMTEludElu
bGluZUNhY2hlcygpOworICAgICAgICAvLyBJZiB0aGUgQ29kZUJsb2NrIGlzIERGRyBvciBGVEws
IENhbGxMaW5rSW5mbyBpbiBtZXRhZGF0YSBpcyBub3QgcmVsYXRlZC4KKyAgICAgICAgZm9yRWFj
aExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pIHsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby52aXNpdFdlYWsodm0pOworICAgICAgICB9
KTsKKyAgICB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWppdENvZGUoKSkKQEAgLTE2
OTksMTMgKzE3MjYsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQog
CiB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgSUNTdGF0dXNNYXAmIHJlc3VsdCkKIHsKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVy
cHJldGVkKGppdFR5cGUoKSkpIHsKKyAgICAgICAgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxM
aW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAgICAgICAgIHJl
c3VsdC5hZGQoY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRlcmF0b3It
PnZhbHVlLmNhbGxMaW5rSW5mbyA9ICZjYWxsTGlua0luZm87CisgICAgICAgIH0pOworICAgIH0K
ICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChKSVRDb2RlOjppc0pJVChqaXRUeXBlKCkpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgICAg
ICBmb3IgKGF1dG8mIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpCiAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFkZChzdHViSW5mby5jb2RlT3JpZ2luLCBJQ1N0YXR1cygpKS5pdGVyYXRv
ci0+dmFsdWUuc3R1YkluZm8gPSAmc3R1YkluZm87Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNh
bGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuYWRkKGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCksIElDU3RhdHVzKCkpLml0ZXJhdG9y
LT52YWx1ZS5jYWxsTGlua0luZm8gPSAmY2FsbExpbmtJbmZvOwogICAgICAgICB9CiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkgewpAQCAtMTc2MCwxNSArMTc5MCwyNCBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJs
b2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1DYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGluZGV4KQorQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6
OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgQnl0ZWNvZGVJbmRleCBpbmRleCkKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3Mp
IHsKLSAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uY29kZU9yaWdpbigpID09IENvZGVPcmln
aW4oaW5kZXgpKQotICAgICAgICAgICAgICAgIHJldHVybiAmY2FsbExpbmtJbmZvOworICAgIGlm
IChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkgeworICAgICAgICBhdXRv
JiBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmF0KGluZGV4KTsKKyAgICAgICAgc3dpdGNo
IChpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSkgeworI2RlZmluZSBDQVNFKE9wKSBcCisgICAgICAg
IGNhc2UgT3A6Om9wY29kZUlEOiBcCisgICAgICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5h
czxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX2NhbGxMaW5rSW5mbzsgXAorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8o
Q0FTRSkKKworI3VuZGVmIENBU0UKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQorCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgIERGRzo6Q29tbW9uRGF0
YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKQEAgLTIxMzUsMTMgKzIxNzQs
NiBAQCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiwgU2hyaW5rTW9kZSBzaHJpbmtNb2RlKQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLXZvaWQgQ29k
ZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENhbGxMaW5r
SW5mbyogaW5jb21pbmcpCi17Ci0gICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsK
LSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0
YShsb2NrZXIpLm1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKLX0KLQogdm9pZCBDb2Rl
QmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1l
LCBQb2x5bW9ycGhpY0NhbGxOb2RlKiBpbmNvbWluZykKIHsKICAgICBub3RpY2VJbmNvbWluZ0Nh
bGwoY2FsbGVyRnJhbWUpOwpAQCAtMjE1MiwxMCArMjE4NCwxNiBAQCB2b2lkIENvZGVCbG9jazo6
bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHlt
b3JwaGljQwogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKK3ZvaWQgQ29kZUJsb2NrOjpsaW5r
SW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyogaW5jb21p
bmcpCit7CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBtX2luY29t
aW5nQ2FsbHMucHVzaChpbmNvbWluZyk7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNv
bWluZ0NhbGxzKCkKIHsKLSAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAh
PSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2Fs
bHMuYmVnaW4oKS0+dW5saW5rKCk7CisgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigp
ICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2lu
KCktPnVubGluayh2bSgpKTsKICNpZiBFTkFCTEUoSklUKQogICAgIEpJVERhdGEqIGppdERhdGEg
PSBudWxscHRyOwogICAgIHsKQEAgLTIxNjMsMjAgKzIyMDEsMTIgQEAgdm9pZCBDb2RlQmxvY2s6
OnVubGlua0luY29taW5nQ2FsbHMoKQogICAgICAgICBqaXREYXRhID0gbV9qaXREYXRhLmdldCgp
OwogICAgIH0KICAgICBpZiAoaml0RGF0YSkgewotICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9p
bmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmVuZCgpKQot
ICAgICAgICAgICAgaml0RGF0YS0+bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgp
KTsKICAgICAgICAgd2hpbGUgKGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJl
Z2luKCkgIT0gaml0RGF0YS0+bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkpCiAgICAg
ICAgICAgICBqaXREYXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxp
bmsodm0oKSk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJs
b2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExp
bmtJbmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUp
OwotICAgIG1faW5jb21pbmdMTEludENhbGxzLnB1c2goaW5jb21pbmcpOwotfQotCiBDb2RlQmxv
Y2sqIENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQogewogICAgIHJldHVybiBvd25lckV4ZWN1
dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkp
OwpAQCAtMjMyOSwyMiArMjM1OSwyMiBAQCB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmls
ZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1vZAogICAgIGlm
ICh2bS5oZWFwLmN1cnJlbnRUaHJlYWRJc0RvaW5nR0NXb3JrKCkgJiYgIXZtLmhlYXAuaXNNYXJr
ZWQob3duZXJFeGVjdXRhYmxlKCkpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUoSklU
KQogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAg
ICAgICBpZiAoSklURGF0YSogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAg
ICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0g
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeUpldHRpc29uKCk7Ci0gICAg
ICAgIH0KLSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGNh
bGxMaW5rSW5mbyA6IGRmZ0NvbW1vbi0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAgfQorI2lmIEVO
QUJMRShERkdfSklUKQorICAgICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChq
aXRUeXBlKCkpKSB7CisgICAgICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24g
PSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byogY2Fs
bExpbmtJbmZvIDogZGZnQ29tbW9uLT5tX2NhbGxMaW5rSW5mb3MpCisgICAgICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKKyAgICAgICAgICAgIH0K
ICNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yRWFjaExMSW50T3JCYXNl
bGluZUNhbGxMaW5rSW5mbyhbJl0oQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5SmV0dGlzb24oKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAKICAgICAvLyBUaGlzIGFjY29tcGxp
c2hlcyAoMikuCiAgICAgb3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKHZtLCBhbHRlcm5h
dGl2ZSgpLCBjb2RlVHlwZSgpLCBzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yODQ3LDE5ICsy
ODc3LDEzIEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRlCiB7CiAgICAgYXV0byBpbnN0cnVjdGlv
biA9IGluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwogICAgIHN3aXRjaCAoaW5zdHJ1
Y3Rpb24tPm9wY29kZUlEKCkpIHsKLSNkZWZpbmUgQ0FTRTEoT3ApIFwKKyNkZWZpbmUgQ0FTRShP
cCkgXAogICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCiAgICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJyYXlQcm9maWxlOwogCi0jZGVmaW5lIENB
U0UyKE9wKSBcCi0gICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKLSAgICAgICAgcmV0dXJuICZpbnN0
cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9jYWxsTGlua0luZm8ubV9hcnJheVBy
b2ZpbGU7Ci0KLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENBU0UxKQot
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENBU0UyKQorICAg
IEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ0FTRSkKIAotI3VuZGVmIENBU0Ux
Ci0jdW5kZWYgQ0FTRTIKKyN1bmRlZiBDQVNFCiAKICAgICBjYXNlIE9wR2V0QnlJZDo6b3Bjb2Rl
SUQ6IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7CkBAIC0zMDI5LDE3ICszMDUzLDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxBcnJh
eVByb2ZpbGVQcmVkaWN0aW9ucyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlCiAgICAg
ICAgIH0KICAgICB9KTsKIAotI2RlZmluZSBWSVNJVDEoX19vcCkgXAorI2RlZmluZSBWSVNJVChf
X29wKSBcCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRh
KSB7IHByb2Nlc3MobWV0YWRhdGEubV9hcnJheVByb2ZpbGUpOyB9KTsKIAotI2RlZmluZSBWSVNJ
VDIoX19vcCkgXAotICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRh
ZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlKTsg
fSk7Ci0KLSAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKFZJU0lUMSkKLSAg
ICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJVDIpCisgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShWSVNJVCkKIAotI3VuZGVmIFZJU0lU
MQotI3VuZGVmIFZJU0lUMgorI3VuZGVmIFZJU0lUCiAKICAgICBtX21ldGFkYXRhLT5mb3JFYWNo
PE9wSXRlcmF0b3JOZXh0PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7CiAgICAgICAgIHByb2Nlc3Mo
bWV0YWRhdGEubV9pdGVyYWJsZVByb2ZpbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCmluZGV4IDY0ZjlmNWFiY2ZlMmFlNzA1ZDFkYTY1YWE5ZjgzMTk3Yjk2
YzZkMzEuLmI3YWVhMjY3N2Y1ZTk0OTA4YWIzNTVmOTZiMGQyM2MzNzgyNDIwMTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTU0LDcgKzU0LDYgQEAK
ICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIkp1bXBUYWJsZS5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVk
ZSAiTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJNZXRhZGF0YVRhYmxlLmgi
CiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCIKQEAgLTI2MSw4ICsyNjAsNiBA
QCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgICAgICBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVT
dHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEZpeGVkVmVjdG9yPENhbGxMaW5rSW5mbz4g
bV9jYWxsTGlua0luZm9zOwotICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZv
LCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwog
ICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3
U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWND
YWxsczsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9Owog
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CkBAIC0y
OTEsNyArMjg4LDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8g
VGhpcyBpcyBhIHNsb3cgZnVuY3Rpb24gY2FsbCB1c2VkIHByaW1hcmlseSBmb3IgY29tcGlsaW5n
IE9TUiBleGl0cyBpbiB0aGUgY2FzZQogICAgIC8vIHRoYXQgdGhlcmUgaGFkIGJlZW4gaW5saW5p
bmcuIENoYW5jZXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzLCB5b3UncmUgcmVhbGx5CiAg
ICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qg
b2YgY2FsbGluZyB0aGlzLgotICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0
ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKKyAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5r
SW5mb0ZvckJ5dGVjb2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJ
bmRleCk7CiAgICAgCiAgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCkBAIC0z
MDksMTQgKzMwNiwxMSBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0KLSNp
ZiBFTkFCTEUoSklUKQogICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lLCBDYWxsTGlua0luZm8qKTsKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgbGlua0lu
Y29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGlj
Q2FsbE5vZGUqKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0gICAgdm9pZCBsaW5rSW5jb21p
bmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7Ci0KICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogb3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlv
biogcGMpOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQgb2Zmc2V0KQogICAgIHsKQEAgLTQ1Myw3ICs0NDcsNyBAQCBjbGFzcyBDb2RlQmxvY2sg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZv
ckVhY2hWYWx1ZVByb2ZpbGUoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFycmF5QWxsb2NhdGlvblByb2ZpbGUoY29uc3QgRnVuY3Rv
ciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB2b2lkIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTExJbnRPckJhc2VsaW5l
Q2FsbExpbmtJbmZvKGNvbnN0IEZ1bmN0b3ImKTsKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICBV
bmFyeUFyaXRoUHJvZmlsZSogdW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXgpOwpAQCAtOTU5LDcgKzk1Myw3IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBK
U0NlbGwgewogICAgIFZNKiBtX3ZtOwogCiAgICAgY29uc3Qgdm9pZCogbV9pbnN0cnVjdGlvbnNS
YXdQb2ludGVyIHsgbnVsbHB0ciB9OwotICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxM
aW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNv
bWluZ0xMSW50Q2FsbHM7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICBT
dHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAppbmRleCAxZDU5NGFi
ODM1Mjg5N2VjOGE3NDVlYTI0OTNmOGQyZGEwMThiOTYyLi45MmRhOTlhMGJhMmFjYzFmY2RiNmE5
NzM1ZmNkZGUyM2VmYzkzM2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJiBmdW5jKQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTElu
dENhbGxMaW5rSW5mbyhjb25zdCBGdW5jdG9yJiBmdW5jKQordm9pZCBDb2RlQmxvY2s6OmZvckVh
Y2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYgZnVuYykKIHsKICAg
ICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmYTMyZTliNjZiYjdjNjFmZWIzMzlmODA1MjhjMmQzNDcxZDgw
NjhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCisrKyAvZGV2L251
bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSlNDUHRyVGFnLmgiCi0j
aW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
IgotI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLXN0cnVjdCBJbnN0cnVjdGlvbjsKLQotY2xhc3MgTExJbnRDYWxsTGlua0luZm8gOiBwdWJs
aWMgUGFja2VkUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPiB7Ci1wdWJsaWM6Ci0g
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludHB0cl90IHVubGlua2VkQml0ID0gMHgxOwotCi0gICAgTExJbnRDYWxsTGlua0lu
Zm8oKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgfkxMSW50Q2FsbExpbmtJbmZvKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiAhKG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0ICYgdW5saW5rZWRCaXQpOyB9Ci0gICAgCi0KLSAgICB2b2lkIGxp
bmsoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLSAgICB7Ci0gICAgICAgIGlmIChpc09u
TGlzdCgpKQotICAgICAgICAgICAgcmVtb3ZlKCk7Ci0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2FsbGVlKTsKLSAg
ICAgICAgdm0ud3JpdGVCYXJyaWVyKG93bmVyLCBjYWxsZWUpOwotICAgICAgICBtX21hY2hpbmVD
b2RlVGFyZ2V0ID0gY29kZVB0cjsKLSAgICB9Ci0KLSAgICB2b2lkIHVubGluaygpCi0gICAgewot
ICAgICAgICAvLyBNYWtlIGxpbmsgaW52YWxpZGF0ZWQuIEl0IHdvcmtzIGJlY2F1c2UgTExJbnQg
dGVzdHMgdGhlIGdpdmVuIGNhbGxlZSB3aXRoIHRoaXMgcG9pbnRlci4gQnV0IGl0IGlzIHN0aWxs
IHZhbGlkIGFzIGxhc3RTZWVuQ2FsbGVlIQotICAgICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxs
ZWVXaXRoTGlua0JpdCB8PSB1bmxpbmtlZEJpdDsKLSAgICAgICAgbV9tYWNoaW5lQ29kZVRhcmdl
dCA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICBpZiAo
aXNPbkxpc3QoKSkKLSAgICAgICAgICAgIHJlbW92ZSgpOwotICAgIH0KLQotICAgIEpTT2JqZWN0
KiBjYWxsZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFpc0xpbmtlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNPYmpl
Y3QqPihtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCk7Ci0gICAgfQotCi0gICAg
SlNPYmplY3QqIGxhc3RTZWVuQ2FsbGVlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8SlNPYmplY3QqPihtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0Jp
dCAmIH51bmxpbmtlZEJpdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckxhc3RTZWVuQ2FsbGVl
KCkKLSAgICB7Ci0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ID0g
dW5saW5rZWRCaXQ7Ci0gICAgfQotCi0gICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOwot
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQotCi1wcml2
YXRlOgotICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7
IHVubGlua2VkQml0IH07Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IG1fbWFjaGluZUNvZGVUYXJnZXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAppbmRleCBjYThiZWYzMjhiNGJmYjJiMGRmZGM4
YjI4NTI0OTIxYWM4MzliZDM2Li4xY2JjNjZmODQ5OTU0OTk3ZWY3YzUwZDQ5Mzg0MzAyZjM1YzYy
OWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCkBAIC0xMjYsMTEg
KzEyNiwxOSBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2Rl
TGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wUnNoaWZ0KSBc
CiAgICAgbWFjcm8oT3BHZXRQcml2YXRlTmFtZSkgXAogCi0jZGVmaW5lIEZPUl9FQUNIX09QQ09E
RV9XSVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfTExJTlRfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwKKyAgICBtYWNybyhPcENhbGwpIFwKKyAg
ICBtYWNybyhPcFRhaWxDYWxsKSBcCisgICAgbWFjcm8oT3BDYWxsRXZhbCkgXAorICAgIG1hY3Jv
KE9wQ29uc3RydWN0KSBcCisgICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKKyAgICBtYWNybyhP
cEl0ZXJhdG9yTmV4dCkgXAogICAgIG1hY3JvKE9wQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhP
cFRhaWxDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
KSBcCiAgICAgbWFjcm8oT3BDb25zdHJ1Y3RWYXJhcmdzKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wR2V0QnlWYWwp
IFwKICAgICBtYWNybyhPcEluQnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsKSBcCkBAIC0x
MzksNiArMTQ3LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcEVudW1l
cmF0b3JHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRvckluQnlWYWwpIFwKICAgICBt
YWNybyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSkgXAorICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3JvKSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BD
T0RFX1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BO
ZXdBcnJheSkgXApAQCAtMTQ4LDE0ICsxNTcsNiBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQog
I2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9PQkpFQ1RfQUxMT0NBVElPTl9QUk9GSUxFKG1h
Y3JvKSBcCiAgICAgbWFjcm8oT3BOZXdPYmplY3QpIFwKIAotI2RlZmluZSBGT1JfRUFDSF9PUENP
REVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhtYWNybykgXAotICAgIG1hY3JvKE9wQ2FsbCkg
XAotICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKLSAgICBtYWNybyhPcENhbGxFdmFsKSBcCi0gICAg
bWFjcm8oT3BDb25zdHJ1Y3QpIFwKLSAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAotICAgIG1h
Y3JvKE9wSXRlcmF0b3JOZXh0KSBcCi0KICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcEFkZCkgXAogICAgIG1hY3Jv
KE9wTXVsKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVw
YXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGQ5YzJlZDdkNDhlNWJhMjU2YTMzNDRkZjE2NmRjYWZiNzVjNjFiOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmNwcApA
QCAtMCwwICsxLDIwMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgor
CisjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDYWxsRnJh
bWVTaHVmZmxlci5oIgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdT
cGVjdWxhdGl2ZUpJVC5oIgorI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgorI2luY2x1
ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5o
IgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkZ1bGxDb2RlT3JpZ2luLmgiCisj
aW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJv
dXRpbmUuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0cy5oIgorI2luY2x1ZGUgIklubGluZUFj
Y2Vzcy5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJ
VElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRl
ICJNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1
ZGUgIlN1cGVyU2FtcGxlci5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhW
TSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgY2FsbExpbmtJbmZvLnNldFNsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50
cnlQdHJUYWc+KCkpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyB2b2lkIGxpbmtTbG93
UGF0aFRvKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcikKK3sKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2bS5n
ZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwor
fQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChjYWxsTGlua0lu
Zm8uY2FsbE1vZGUoKSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmly
dHVhbFRodW5rKTsKK30KKworc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25lcihKU0NlbGwq
IGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgLy8gRWFjaCBXZWJBc3Nl
bWJseS5JbnN0YW5jZSBzaGFyZXMgdGhlIHN0dWJzIGZyb20gdGhlaXIgV2ViQXNzZW1ibHkuTW9k
dWxlLCB3aGljaCBhcmUgdGhlcmVmb3JlIHRoZSBhcHByb3ByaWF0ZSBvd25lci4KKyAgICByZXR1
cm4ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjYWxsZWUpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oY2FsbGVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBudWxscHRyOworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKK30KKwordm9p
ZCBsaW5rTW9ub21vcnBoaWNDYWxsKAorICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywK
KyAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gY29kZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkpOworCisgICAg
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICAv
LyBPdXIgY2FsbGVyIG11c3QgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNhbGxpbmcK
KyAgICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBjZWxsLgor
ICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOworCisgICAgQ29kZUJs
b2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CisKKyAgICAv
LyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgor
ICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1lLT5jYWxs
ZWUoKS5hc0NlbGwoKSkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5h
c0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgQVNTRVJUKG93bmVyKTsKKworICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOworICAgIGNhbGxMaW5rSW5mby5zZXRNb25v
bW9ycGhpY0NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7CisgICAgY2FsbExpbmtJ
bmZvLnNldExhc3RTZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKworICAgIGlmIChzaG91
bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKKyAgICAgICAgZGF0YUxvZygi
TGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExp
bmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2Nr
KSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKKworICAgIGlmIChjYWxsZWVD
b2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxs
ZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChjYWxs
TGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJ
bmZvLmFsbG93U3R1YnMoKSkgeworICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJ
bmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisgICAgCisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7
Cit9CisKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2Rl
UmVmKQoreworICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgeworI2lmIEVOQUJMRShK
SVQpCisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOworICAgICAgICBpZiAo
IWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7CisgICAgICAgICAgICBs
aW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKworICAgICAgICAgICAg
aWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLnJl
dmVydENhbGxUb1N0dWIoKTsKKyAgICAgICAgfQorICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJD
YWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJvdGggZm9yIGRh
dGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgorICAgIH0KKyAgICBjYWxsTGlua0luZm8uY2xlYXJT
ZWVuKCk7CisgICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOworICAgIGlmIChjYWxsTGlua0lu
Zm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2b2lk
IHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlu
a0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOworICAgIAorICAgIHJldmVydENh
bGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dlZDxKSVRTdHVi
Um91dGluZVB0clRhZz4oKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgSlNPYmplY3QqIGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYg
KCFjYWxsZWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChraW5kICE9IENvZGVG
b3JDYWxsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byogd2FzbUZ1bmN0
aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNhbGxlZSkpCisg
ICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7CisgICAgVU5VU0VE
X1BBUkFNKGNhbGxlZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2lmIEVO
QUJMRShKSVQpCisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnT3Bl
cmF0aW9uV2l0aFZhbGlkYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVyYXRp
b24pCit7CisgICAgSlNDX1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJREFUSU9O
KG9wZXJhdGlvbik7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJl
dGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0
clRhZz4gY2FsbCkKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhf
VkFMSURBVElPTihjYWxsKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAg
ICAgICByZXR1cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5mby5tX3Nsb3dP
cGVyYXRpb24pOworICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCA9
IHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb247CisjaWYgRU5BQkxFKEZUTF9KSVQpCisg
ICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkgeworICAgICAg
ICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJl
YWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0
aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRo
dW5rKS5jYWxsVGFyZ2V0KCkpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvZGVC
bG9jayk7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmV0dXJuIHJldGFnQ2FsbFRh
cmdldFdpdGhWYWxpZGF0aW9uKGNhbGwpOworfQorCit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNo
Q2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRy
VGFnPiBjYWxsLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9u
KQoreworI2lmIEVOQUJMRShGVExfSklUKQorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpGVExKSVQpIHsKKyAgICAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwor
ICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKKyAgICAgICAgRnVu
Y3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2Fs
bFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CisgICAgICAgIGF1dG8gc2xvd1BhdGhUaHVu
ayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIEZUTDo6
U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93
UGF0aFRodW5rKTsKKyAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1
bmN0aW9uKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0
aW9uUHRyPEpJVFRodW5rUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIGtl
eSkuY29kZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvLyBFTkFCTEUoRlRM
X0pJVCkKKyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVu
Y3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKK30KKworc3RhdGljIHZvaWQgcmVw
YXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9u
KQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIHN0dWJJbmZv
Lm1fc2xvd09wZXJhdGlvbiA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0
clRhZz4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdGxUaHVua0F3YXJlUmVwYXRj
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxs
ZWVGdW5jdGlvbik7Cit9CisKK2VudW0gSW5saW5lQ2FjaGVBY3Rpb24geworICAgIEdpdmVVcE9u
Q2FjaGUsCisgICAgUmV0cnlDYWNoZUxhdGVyLAorICAgIEF0dGVtcHRUb0NhY2hlCit9OworCitz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisK
KyAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKKyAgICBpZiAo
dHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCisgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOworCisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnko
KSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCisg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgLy8gRmxhdHRlbmluZyBj
b3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZvciBhbm90aGVy
IHRyeS4KKyAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZt
KTsKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICB9CisgICAgCisgICAgaWYg
KCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Cit9CisKK3N0
YXRpYyBib29sIGZvcmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKK3sKKyAgICByZXR1cm4g
T3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKTsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgdm9p
ZCBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVyYXRpb25S
ZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVX
YXRjaHBvaW50cygpKSB7CisgICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHModm0pOworCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0KGxvY2tlciwg
Y29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaW5saW5lIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihHZXRCeUtp
bmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJ
ZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAgICBjYXNlIEdl
dEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
SWREaXJlY3Q6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7
CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAg
IHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgIGNhc2UgR2V0QnlL
aW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRl
TmFtZUJ5SWRPcHRpbWl6ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVH
ZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsK
KyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzOworICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgorICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERp
cmVjdDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7CisgICAgY2FzZSBH
ZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmlj
OworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVj
dCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCisgICAgICAg
IC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMuCisgICAgICAg
IGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisgICAg
ICAgIGNvbnN0IGJvb2wgaXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1l
IHx8IGtpbmQgPT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7CisKKyAgICAgICAgUmVmUHRy
PEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNl
bGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJh
c2VDZWxsCisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVB
cnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxs
KSkpIHsKKworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganND
YXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0
aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxl
bmd0aChsb2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNj
ZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAgICAgJiYg
SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZv
KSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVu
dHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFu
ZGxlIHRoaXMgYXMgYSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKKyAgICAgICAgICAg
ICAgICAvLyB0aGlzIHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNh
c2UgZm9yIHRoYXQgbG9hZCBpZiBuZWVkZWQuCisgICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dHMtPm92ZXJyb2RlVGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRz
TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChTY29wZWRBcmd1
bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4odm0sIGJh
c2VDZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIERpdHRvLgorICAgICAgICAgICAgICAgIGlm
ICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQorICAgICAgICAgICAgICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3Bl
ZEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNlbGwtPmlu
aGVyaXRzPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNldCgpKSB7
CisgICAgICAgICAgICBpZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5tb2R1bGVO
YW1lc3BhY2VTbG90KCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5hbWVzcGFj
ZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpzQ2FzdDxK
U01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNlU2xvdC0+
ZW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3BlT2Zmc2V0
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2FzZSkgeworICAgICAg
ICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgICAgICBib29sIGxv
YWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlw
ZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
UHJpdmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdl
dCgpOworICAgICAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAg
ICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBi
YXNlQ2VsbCk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9wdGltaXplIHNl
bGYgYWNjZXNzLgorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQor
ICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAg
ICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAm
JiAhbG9hZFRhcmdldEZyb21Qcm94eSkgeworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
LCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
IHByb3RvdHlwZUFjY2Vzc0NoYWluOworCisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgp
OworCisgICAgICAgICAgICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1c3RvbXMs
IHdlIG11c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKKyAgICAgICAgICAgICAg
ICAvLyBuZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdl
IGNhY2hlIHRoZQorICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBvaW50ZXIu
CisKKyAgICAgICAgICAgICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2Jq
ZWN0LCBzbG90LnNsb3RCYXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlD
YWNoaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisg
ICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpzQ2FzdDxK
U09iamVjdCo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7IC8vIFdlIG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgJiYgc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisg
ICAgICAgICAgICAgICAgLy8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERpcmVjdCBvciBH
ZXRCeUtpbmQ6OlByaXZhdGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3RpZ2F0ZSBwcm90
b3R5cGUgY2hhaW5zIGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgLy8gQ2FjaGVhYmlsaXR5IGp1
c3QgZGVwZW5kcyBvbiB0aGUgaGVhZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgaWYgKGtp
bmQgIT0gR2V0QnlLaW5kOjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFs
T2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVT
dGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMgbWF5IGhhdmUg
Y2hhbmdlZCBkdWUgdG8gZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3Rv
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQ
cm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8
IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgorICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3VsZCBiZSBpbnNp
ZGUgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlCbGFoLgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFz
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjb25kaXRpb25T
ZXQuaXNWYWxpZCgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgp
ID09IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNs
b3QuYXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0Z1
bmN0aW9uKiBnZXR0ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFi
bGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVu
Y3Rpb24qPih2bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOworCisgICAgICAgICAg
ICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZTsKKyAg
ICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21BdHRyaWJ1
dGUoKSkKKyAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJpYnV0ZSgp
OworCisgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsKKyAgICAg
ICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0g
QWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQo
KSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0R2V0dGVyOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwor
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92
ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgfSBlbHNlIGlmICghbG9hZFRh
cmdldEZyb21Qcm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2Fu
RW1pdEludHJpbnNpY0dldHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQorICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgZ2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRlKSB7CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFBy
b3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpMb2Fk
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uZGl0aW9uU2V0LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShw
cm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBz
bG90LmlzVW5zZXQoKSA/IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RG
TW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFj
Y2Vzc29yKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3Rv
bUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMgJiYgdHlw
ZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAg
ICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBv
ZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFi
bGVDdXN0b20oKSA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90LmN1c3Rv
bUdldHRlcigpKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Quc2xv
dEJhc2UoKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUs
IFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRk
QWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZy
b21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFs
dWUpKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1l
LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVD
b2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1
bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwor
ICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6
QnlJZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6CisgICAgICAg
ICAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5k
OjpCeUlkRGlyZWN0OgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJ
ZDoKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lOgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorCisg
ICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2Rl
QmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8g
R2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoR2V0Qnko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBr
aW5kKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
KyAgICAKKyAgICBpZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFz
ZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNh
Y2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFw
cHJvcHJpYXRlR2V0QnlGdW5jdGlvbihraW5kKSk7Cit9CisKKworc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2VWYWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAoIWluZGV4Lmlz
SW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsK
KworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBKU0NlbGwqIGJhc2Ug
PSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlOworICAgICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFyZ3VtZW50c1R5
cGUpCisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERpcmVjdEFy
Z3VtZW50c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBTY29wZWRBcmd1
bWVudHNUeXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRT
Y29wZWRBcmd1bWVudHNMb2FkOworICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU3Ry
aW5nVHlwZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU3Ry
aW5nTG9hZDsKKyAgICAgICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZt
KS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5j
bGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRUeXBlZEFycmF5SW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAgICAgYWNjZXNz
VHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2
TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQx
NjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVk
QXJyYXlVaW50MTZMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2FkOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0
TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRp
bWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOworICAg
ICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBjYXNlIEludDMy
U2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJ
bnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJs
ZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
RG91YmxlTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29u
dGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkQ29udGlndW91c0xvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBzdHVi
SW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFN
b2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNv
bWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0
aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Cisg
ICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5n
SW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVC
bG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2
ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlHZXRC
eVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2Vu
ZXJpYyk7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJp
YXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRC
eUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgc3dpdGNoIChwdXRCeUtp
bmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0Y2ggKHB1dEtp
bmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAo
c2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90Lmlz
U3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgor
ICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNs
b3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRT
ZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2
YXRlRmllbGRHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVs
ZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWM7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAvLyBNYWtlIHdpbiBwb3J0
IGNvbXBpbGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3Qg
JnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBzd2l0
Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NF
UlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3Ry
aWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1v
ZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmIChzbG90
LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZp
ZWxkT3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIg
aGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNl
VmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBy
ZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHBy
b3BlcnR5TmFtZS51aWQoKSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOworCisgICAg
ICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAg
aWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAm
JiAhc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8gc29tZXRoaW5n
IHNtYXJ0ZXIgaGVyZS4uLgorICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1Y3R1cmUt
PmluZGV4aW5nTW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAg
ICAgICAvLyBXZSBjYW4ndCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUgcHJvdG90eXBl
IHNpbmNlIGl0IHNob3VsZG4ndCBvd24gcHJvcGVydGllcy4KKyAgICAgICAgQVNTRVJUKCFpc0Nv
cHlPbldyaXRlKHNsb3QuYmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOworCisgICAgICAgIGlmICgh
b2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNlOworICAgICAg
ICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgeworICAg
ICAgICAgICAgYmFzZUNlbGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7
CisgICAgICAgICAgICBiYXNlVmFsdWUgPSBiYXNlQ2VsbDsKKyAgICAgICAgICAgIGlzUHJveHkg
PSB0cnVlOworCisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNl
IGFuZCBKUy9DdXN0b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAorICAgICAgICAgICAg
Ly8gY2FjaGUgdHJhbnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNo
YXJlIHRoZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1w
bGVtZW50YXRpb24uCisgICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5p
c0NhY2hlYWJsZVB1dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3Rp
bmdQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkK
KyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7CisgICAgICAgICAg
ICBpZiAoIWlzQ2FjaGVhYmxlUHJveHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0S2luZCA9PSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGREZWZpbmUpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKKyAgICAg
ICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVy
dHkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRjaCBidWdzIGlm
IHdlIGFjY2lkZW50YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCisgICAgICAgICAgICAg
ICAgLy8gd2hlbiB3ZSB0cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3RpbmcgcHJvcGVy
dHkuIFRoaXMgaXMgY29tbW9uIGFtb25nCisgICAgICAgICAgICAgICAgLy8gcGF0aHMgdGhhdCBy
ZWlmeSBsYXp5IHByb3BlcnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBhbmQgZm9y
Z2V0CisgICAgICAgICAgICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkgY29tZSBk
b3duIHRoaXMgcGF0aC4gVGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAv
LyBrbm93IGhvdyB0byBtb2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMg
KG9yIGFueSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGZvciB0aGF0
IG1hdHRlcikuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUodm0pID09IG9sZFN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAgICAmJiBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgIWlzUHJveHkpIHsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5s
aW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2Vs
ZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0g
YmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24o
c2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5
TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCgpLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBl
KCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xkIHN0cnVjdHVy
ZSBpcyBkaWN0aW9uYXJ5LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBiZXR3ZWVu
IGFuIG9iamVjdCBhbmQgYSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBp
cyBOZXdQcm9wZXJ0eSBvcGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9lcyBub3Qg
b2ZmZXIgYW55IGJlbmVmaXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFwcGVucyBh
Z2Fpbi4KKyAgICAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworCisgICAgICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBpcyBvdmVycmlk
ZGVuIGJ5IFVzZXJPYmplY3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVmZmVjdCBv
biBKU09iamVjdDo6cHV0LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0UHJvcGVydHlT
bG90IGFzIG5vbi1jYWNoYWVibGUsCisgICAgICAgICAgICAgICAgLy8gdGhlbiBhcmJpdHJhcnkg
c3RydWN0dXJlIHRyYW5zaXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQgb3BlcmF0aW9u
LCBhbmQgdGhpcyBnZW5lcmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBoZXJlIGFz
IGlmIG9sZFN0cnVjdHVyZSAtPiBuZXdTdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8gSW4g
cmVhbGl0eSwgdGhlIHRyYW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0aGluZyB1bmtu
b3duIHN0cnVjdHVyZXMgLT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgorICAgICAgICAgICAgICAg
IC8vIFRvIGd1YXJkIGFnYWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5jb3JyZWN0
IFVzZXJPYmplY3Q6OnB1dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGlz
IGNvbmRpdGlvbiBhbmQgaWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhlIHB1dC4K
KyAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0p
ID09IG5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKHZtKSAhPSBuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwor
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
KyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hp
bmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAg
IGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5
UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0g
UG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBu
dWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hh
aW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90
b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25k
aXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdT
dHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNv
bmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGREZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50LmlzUHJpdmF0
ZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0
cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFj
Y2Vzc0Nhc2U6OmNyZWF0ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBv
ZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUo
cHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBzdHViSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVT
ZXR0ZXIoKSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewor
ICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFj
Y2Vzc0NoYWluOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4g
aWYgd2UncmUgYSBzZWxmIGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJp
ZXMKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYg
dGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50CisgICAgICAg
ICAgICAgICAgLy8gZnVuY3Rpb24gcG9pbnRlci4KKyAgICAgICAgICAgICAgICBhdXRvIGNhY2hl
U3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBz
bG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBpZiAo
c2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWNo
ZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9i
amVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90
b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50
LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdD
YXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1
c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0
LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBz
bG90LmN1c3RvbVNldHRlcigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFnPigpLCBzbG90
LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRl
cigpKTsKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRp
b25TZXQ7CisgICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90
b3R5cGVBY2Nlc3NDaGFpbjsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzbG90LmNhY2hlZE9mZnNldCgpOworCisgICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgp
ICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0g
cHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2Uo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3Rv
dHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxP
YmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3RvdHlwZUFjY2Vz
c0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSkpLT5n
ZXQodm0sIGlkZW50LmltcGwoKSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0
dHJpYnV0ZTo6QWNjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5
cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNl
dCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90
eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAg
IAorICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFs
T2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0
KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7
CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworCisgICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJT
dHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKK30KKwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQg
cHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQor
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Cit9CisK
K3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZh
bHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQp
Cit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNj
ZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEpTQ2VsbCogYmFz
ZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0p
LT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNs
YXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBU
eXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50MTY6CisgICAg
ICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50
MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZVVp
bnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5
cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAg
IGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6Cisg
ICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5
RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRklY
TUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJQworICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4Mwor
ICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNlIFR5cGVCaWdV
aW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbmRleGluZ1R5
cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1h
c2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAgICAgICAgIGNh
c2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxP
YmplY3QtPnZtKCkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxv
Y2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0
ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIp
KTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFz
c0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8s
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5l
ZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30K
Kwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1v
ZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQor
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQg
PT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmlj
dEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsKK30KKworc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xv
dCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxC
eUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAgIHsKKyAgICAg
ICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xv
YmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2Jq
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgIEFTU0VS
VChvbGRTdHJ1Y3R1cmUpOworICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpIHx8ICFv
bGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRTdHJ1Y3R1
cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAg
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZURlbGV0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCktPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAganNDYXN0PEpTT2JqZWN0Kj4oYmFz
ZVZhbHVlKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKwor
ICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAoc2xvdC5p
c0RlbGV0ZUhpdCgpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBp
bnZhbGlkT2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1
cnJlbnRseShvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0KTsKKyAg
ICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBBU1NFUlQobmV3
T2Zmc2V0ID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKG5ld1N0
cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NF
UlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9w
ZXJ0eURlbGV0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0
KCkpOworICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7CisgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2RlQmxvY2ss
IHByb3BlcnR5TmFtZSwgbmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAg
ICBpZiAoZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwg
Y29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHByb3BlcnR5TmFt
ZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0
LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1Yklu
Zm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9k
ZSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dC5jb2RlKCkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRo
SnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
cHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZO
ZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVz
dWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsK
K30KKwordm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBi
YXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCwg
RUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlm
ICh0cnlDYWNoZURlbGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFs
dWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwgZWNtYU1vZGUp
ID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxh
Y2VXaXRoR2VuZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxPYmplY3QtPnZt
KCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAg
ICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7CisgICAgfQorfQorCitp
bmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJ
bkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBj
YXNlIEluQnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkT3B0aW1p
emU7CisgICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25J
bkJ5VmFsT3B0aW1pemU7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6CisgICAgICAg
IHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkK
K3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgorICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkR2VuZXJpYzsKKyAgICBjYXNlIEluQnlLaW5kOjpCeVZh
bDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOworICAgIGNhc2UgSW5C
eUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5h
bWVHZW5lcmljOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAorICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCisgICAgYm9vbCB3YXNGb3VuZCwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlL
aW5kIGtpbmQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworCisgICAgeworICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Cisg
ICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVy
ZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFi
YXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5j
ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAg
ICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwor
ICAgICAgICAKKyAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVB
Y2Nlc3NDaGFpbjsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OworICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIElubGluZUNhY2hlQWN0
aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICAgICAgaWYgKGFj
dGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwor
CisgICAgICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICAgICAgICAgIGlmIChz
dHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAg
JiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQor
ICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAg
ICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUp
OworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNv
ZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAh
PSBiYXNlKSB7CisgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFp
bkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAg
ICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3Jl
YXRlKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
cHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVy
ZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQo
CisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRp
dGlvbigpLm9mZnNldCgpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gY2Fj
aGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVs
bHB0cik7CisgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQ
b2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQ
cm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNl
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2Up
KTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSgKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5I
aXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQgPyBzbG90LmNh
Y2hlZE9mZnNldCgpIDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdU
Rk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5m
by5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2Rl
OjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBp
ZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQor
ICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9p
bnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7
CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2Fj
aGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlL
aW5kIGtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh0cnlDYWNo
ZUluQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwg
d2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7CisgICAg
ICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VPYmplY3QtPmNs
YXNzSW5mbyhnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9w
ZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICB9
Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmpl
Y3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJZGVudGlmaWVy
IGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7CisKKyAgICB7
CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24g
YWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChhY3Rpb24gIT0g
QXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisgICAgICAgIGJv
b2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRk
QWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5
KSk7CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nh
c2U6OkluTWlzcywgYnJhbmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7IH0sIHsgfSk7
CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2Jh
bE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUo
bmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewor
ICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0
dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNv
ZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJT
dHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKK30KKwordm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwg
Q2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1YkluZm8pID09
IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAorICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFz
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgeworICAgICAgICBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7CisgICAgICAg
IGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1
Y3R1cmUodm0pOworCisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZv
ckNlbGwodm0sIGJhc2UpOworICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQor
ICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5
ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZEFkZEFj
Y2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkp
OworCisgICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRl
Q2hlY2tQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0dXJlKTsKKwor
ICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2Jq
ZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdD
YXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7CisgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1w
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2lu
dHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsK
KworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDog
UmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3Qq
IGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKKworICAgIGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25D
YWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMpOworfQorCitzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBp
ZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgewor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCB2bSk7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBBU1NFUlQob2xk
U3RydWN0dXJlKTsKKworICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
KyAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAgSW5saW5lQ2Fj
aGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChh
Y3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworICAg
ICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnNldEJy
YW5kVHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1
cmUsIGJyYW5kSUQudWlkKCkpOworICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKKyAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOworICAg
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25L
aW5kOjpTZXRCcmFuZCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkp
OworICAgICAgICAKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7CisgICAgICAg
IExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVm
PEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2YXRlQnJhbmQo
dm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOworCisg
ICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nh
c2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBv
bGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAg
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
aXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9j
aywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8g
R2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoU2V0UHJp
dmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJs
b2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hl
YWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorewor
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKworICAgIGlm
ICh0cnlDYWNoZVNldFByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9i
amVjdCwgb2xkU3RydWN0dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUp
CisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uU2V0UHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUluc3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5
cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFsdWUuaXND
ZWxsKCkpOyAvLyBzaG91bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2VsbHMuCisgICAg
CisgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOworICAgIAorICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAKKyAgICAgICAgSlND
ZWxsKiB2YWx1ZSA9IHZhbHVlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdmFsdWUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNl
PiBuZXdDYXNlOworICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxK
U09iamVjdCo+KHZtLCBwcm90b3R5cGVWYWx1ZSk7CisgICAgICAgIGlmIChwcm90b3R5cGUpIHsK
KyAgICAgICAgICAgIGlmICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VP
Zk1pc3MsIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgcHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJl
LT5wcm90b3R5cGVRdWVyaWVzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogVGVhY2ggdGhpcyB0byBkbyBwb2x5IHByb3RvLgorICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKKyAgICAgICAgICAg
ICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUsIHdhc0ZvdW5k
ID8gcHJvdG90eXBlIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VP
ZigKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHByb3RvdHlwZSwgd2FzRm91bmQpOworCisgICAgICAgICAgICAgICAgaWYgKGNvbmRp
dGlvblNldC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3Rh
bmNlT2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJ
bnN0YW5jZU9mSGl0IDogQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICghbmV3Q2FzZSkKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hlYWJsZUlkZW50
aWZpZXIoKSk7CisgICAgICAgIAorICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZB
ZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKKyAg
ICAgICAgCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBXVEZN
b3ZlKG5ld0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29t
ZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVwbGFj
ZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAg
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2Rl
QmxvY2ssIHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3co
KSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaElu
c3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQpCit7CisgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIGlmICh0cnlDYWNo
ZUluc3RhbmNlT2YoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUsIHByb3RvdHlw
ZVZhbHVlLCBzdHViSW5mbywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VP
ZkdlbmVyaWMpOworfQorCit2b2lkIGxpbmtEaXJlY3RDYWxsKAorICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2Rl
QmxvY2ssCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIp
Cit7CisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKyAgICAKKyAgICBDb2RlQmxv
Y2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisKKyAgICBWTSYg
dm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgQVNTRVJUKCFjYWxsTGlua0lu
Zm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldENvZGVCbG9jayh2bSwgY2FsbGVy
Q29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjYWxsZWVDb2RlQmxvY2spKTsK
KyAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCisgICAg
ICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2Rl
QmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNh
bGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7CisKKyAg
ICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25MYWJlbDxKU0Vu
dHJ5UHRyVGFnPihjb2RlUHRyKSk7CisKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAg
ICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAmY2FsbExpbmtJ
bmZvKTsKK30KKwordm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNJiB2bSA9IGNh
bGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJ
bmZvKTsKK30KKworc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIGRhdGFM
b2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spLAorICAgICAg
ICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJs
b2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1
YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICByZXZlcnRDYWxsKHZtLCBjYWxs
TGlua0luZm8sIHZpcnR1YWxUaHVuayk7CisgICAgY2FsbExpbmtJbmZvLnNldENsZWFyZWRCeVZp
cnR1YWwoKTsKK30KKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRyIHsKKyAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY29kZVB0cjsKK307Cit9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENhbGxWYXJpYW50IG5l
d1ZhcmlhbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLmFsbG93U3R1YnMo
KSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIC8vIER1cmluZyBl
eGVjdXRpb24gb2YgbGlua1BvbHltb3JwaGljQ2FsbCwgd2Ugc3Ryb25nbHkgYXNzdW1lIHRoYXQg
d2UgbmV2ZXIgZG8gR0MuCisgICAgLy8gR0MgamV0dGlzb25zIENvZGVCbG9ja3MsIGNoYW5nZXMg
Q2FsbExpbmtJbmZvIGV0Yy4gYW5kIGJyZWFrcyBhc3N1bXB0aW9uIGRvbmUgYmVmb3JlIGFuZCBh
ZnRlciB0aGlzIGNhbGwuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDRm9yQVdoaWxlKHZt
KTsKKyAgICAKKyAgICBpZiAoIW5ld1ZhcmlhbnQpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Io
dm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4g
Y2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBh
IGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7CisKKyAg
ICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsK
KyAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZyYW1l
LT5jYWxsZWUoKS5hc0NlbGwoKSk7CisKKyAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBk
b24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgorICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFz
c2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkp
IDogY2FsbGVyQ29kZUJsb2NrOworICAgIEFTU0VSVChvd25lcik7CisKKyAgICBDYWxsVmFyaWFu
dExpc3QgbGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBj
YWxsTGlua0luZm8uc3R1YigpKQorICAgICAgICBsaXN0ID0gc3R1Yi0+dmFyaWFudHMoKTsKKyAg
ICBlbHNlIGlmIChKU09iamVjdCogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZSgpKQor
ICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZhcmlhbnQob2xkQ2FsbGVlKSB9
OworICAgIAorICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3QsIG5ld1Zhcmlh
bnQpOworCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNhbGxzIHRoZW4gaXQgbWFr
ZXMgc2Vuc2UgdG8gdHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBjYWxscy4KKyAgICAvLyBU
aGlzIG1ha2VzIHN3aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQgYWxzbyBwcm9kdWNlcyBw
cm9maWxpbmcgdGhhdCdzIGVhc2llciBvbiB0aGUgREZHOworICAgIC8vIHRoZSBERkcgZG9lc24n
dCByZWFsbHkgd2FudCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBvZiBjbG9zdXJlIGFuZCBu
b24tY2xvc3VyZSBjYWxsZWVzLgorICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZhbHNlOworICAg
IGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpICB7CisgICAgICAgIGlmICh2YXJpYW50
LmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICAgICAgbGlzdCA9IGRlc3BlY2lmaWVkVmFyaWFu
dExpc3QobGlzdCk7CisgICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChpc0Nsb3N1cmVDYWxs
KQorICAgICAgICBjYWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1cmUoKTsKKyAgICAKKyAgICBW
ZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOworICAgIFZlY3RvcjxpbnQ2NF90
PiBjYXNlVmFsdWVzOworICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIgY2FzZXMgYXJl
LgorICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpIHsKKyAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAodmFyaWFudC5leGVjdXRhYmxl
KCkgJiYgIXZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAg
ICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpOwor
ICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1
dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICAvLyBJZiB3ZSBjYW5ub3Qg
aGFuZGxlIGEgY2FsbGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgQ29kZUJsb2Nr
IG9yIGJlY2F1c2UgYXJpdHkgbWlzbWF0Y2gsCisgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBp
dCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhIHZpcnR1YWwgY2FsbC4KKyAg
ICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpIHx8IGNhbGxMaW5rSW5mby5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAgICAgIGxpbmtW
aXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBuZXdD
YXNlVmFsdWUgPSAwOworICAgICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAgICAgICAgICAg
bmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmV4ZWN1dGFibGUo
KSk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBwYXRoIGZvciBJ
bnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTMxMQorICAgICAgICAgICAgaWYg
KCFuZXdDYXNlVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb24gPSB2YXJpYW50LmZ1bmN0aW9uKCkp
CisgICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pihm
dW5jdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVl
ID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmludGVybmFsRnVuY3Rpb24oKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgICAgIGlm
IChjYXNlVmFsdWVzLmNvbnRhaW5zKG5ld0Nhc2VWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCJFUlJPUjogQXR0ZW1wdCB0byBhZGQgZHVwbGljYXRlIGNhc2UgdmFsdWUuXG4iKTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeGlzdGluZyBjYXNlIHZhbHVlczogIik7CisgICAg
ICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgdmFsdWUgOiBjYXNlVmFsdWVzKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1h
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFkZDogIiwgbmV3Q2FzZVZhbHVlLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJWYXJpYW50IGxpc3Q6ICIsIGxpc3REdW1wKGNhbGxDYXNl
cyksICJcbiIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjYWxsQ2FzZXMuYXBwZW5kKFBv
bHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7CisgICAgICAgIGNhc2VWYWx1
ZXMuYXBwZW5kKG5ld0Nhc2VWYWx1ZSk7CisgICAgfQorICAgIEFTU0VSVChjYWxsQ2FzZXMuc2l6
ZSgpID09IGNhc2VWYWx1ZXMuc2l6ZSgpKTsKKworICAgIC8vIElmIHdlIGFyZSBvdmVyIHRoZSBs
aW1pdCwganVzdCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgorICAgIHVuc2lnbmVkIG1heFBv
bHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZTsKKyAgICBpZiAoaXNXZWJBc3NlbWJseSkKKyAg
ICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0gT3B0aW9uczo6bWF4UG9s
eW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9yV2ViQXNzZW1ibHlUb0pTKCk7CisgICAgZWxz
ZSBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6dG9wVGllckpJVCgp
KQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjpt
YXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVyKCk7CisgICAgZWxzZQor
ICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQ
b2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsKKworICAgIC8vIFdlIHVzZSBsaXN0LnNp
emUoKSBpbnN0ZWFkIG9mIGNhbGxDYXNlcy5zaXplKCkgYmVjYXVzZSB3ZSByZXNwZWN0IENhbGxW
YXJpYW50IHNpemUgZm9yIG5vdy4KKyAgICBpZiAobGlzdC5zaXplKCkgPiBtYXhQb2x5bW9ycGhp
Y0NhbGxWYXJpYW50TGlzdFNpemUpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxG
cmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rv
cjxDYWxsVG9Db2RlUHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBVbmlxdWVBcnJh
eTx1aW50MzJfdD4gZmFzdENvdW50czsKKworICAgIGlmICghaXNXZWJBc3NlbWJseSAmJiBjYWxs
ZXJDb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpIHsKKyAgICAg
ICAgZmFzdENvdW50cyA9IG1ha2VVbmlxdWVBcnJheTx1aW50MzJfdD4oY2FsbENhc2VzLnNpemUo
KSk7CisgICAgICAgIG1lbXNldChmYXN0Q291bnRzLmdldCgpLCAwLCBjYWxsQ2FzZXMuc2l6ZSgp
ICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBjYWxsZWVHUFIg
PSBjYWxsTGlua0luZm8uY2FsbGVlR1BSKCk7CisKKyAgICBib29sIGlzRGF0YUlDID0gY2FsbExp
bmtJbmZvLmlzRGF0YUlDKCk7CisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoY2FsbGVyQ29kZUJs
b2NrKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4gZnJhbWVTaHVm
ZmxlcjsKKyAgICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkgeworICAgICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7CisgICAgICAgIGZyYW1lU2h1ZmZs
ZXIgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2FsbExpbmtJbmZv
LmZyYW1lU2h1ZmZsZURhdGEoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgLy8g
V2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbCwg
YW5kIHdlIGNhbgorICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXIgdGhpcyBi
dXlzIHVzLgorICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0NlbGwoKTsKKyNl
bmRpZgorICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7CisgICAgfQor
CisgICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKKyAgICBpZiAoaXNDbG9zdXJlQ2FsbCkg
eworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1
ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKGNhbGxlZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9
IGNhbGxlZUdQUjsKKworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUjsKKyAgICBpZiAoZnJh
bWVTaHVmZmxlcikKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPSBmcmFtZVNodWZmbGVyLT5h
Y3F1aXJlR1BSKCk7CisgICAgZWxzZSB7CisgICAgICAgIGZhc3RDb3VudHNCYXNlR1BSID0KKyAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNv
bXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIH0KKyAgICBzdHViSml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3VudHMuZ2V0KCkpLCBmYXN0Q291
bnRzQmFzZUdQUik7CisKKyAgICBpZiAoIWZyYW1lU2h1ZmZsZXIgJiYgY2FsbExpbmtJbmZvLmlz
VGFpbENhbGwoKSkgeworICAgICAgICAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhhdCBjYWxsZWVH
UFIgaXMgbm90IGEgY2FsbGVlIHNhdmUgcmVnaXN0ZXIgaW4gdGhlIHNsb3cgcGF0aC4KKyAgICAg
ICAgQVNTRVJUKCFjYWxsZXJDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+ZmluZChj
YWxsZWVHUFIpKTsKKyAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Cisg
ICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBpZiAoaXND
bG9zdXJlQ2FsbCkgeworICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVuY3Rpb24g
YW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2hHUFIuCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpCisgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BSLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUikpOworI2Vsc2UKKyAgICAgICAg
Ly8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2Vs
bC4KKyNlbmRpZgorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBwYXRoIGZv
ciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICBzbG93UGF0aC5h
cHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOworCisgICAgICAg
IHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBjb21wYXJpc29uVmFsdWVHUFIp
OworICAgICAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBzdHViSml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBjb21wYXJpc29uVmFsdWVHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29tcGFyaXNvblZhbHVlR1BSLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgY29t
cGFyaXNvblZhbHVlR1BSKTsKKyAgICAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZzdHViSml0KTsK
KyAgICB9CisKKyAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1ZUdQ
UiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoc3R1YkppdCkp
IHsKKyAgICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKTsK
KyAgICAgICAgCisgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNbY2FzZUlu
ZGV4XS52YXJpYW50KCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgp
KSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVG
b3JDYWxsKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb2RlUHRyID0ganNUb1dhc21J
Q0NvZGVQdHIodm0sIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSwgdmFyaWFudC5m
dW5jdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAgICAgICBj
b2RlUHRyID0gdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkt
PmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkpOworICAgICAg
ICAgICAgY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENv
ZGVGb3JDYWxsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZhc3RDb3VudHMp
IHsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2YodWludDMyX3QpKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIG5lZWRzRG9uZUp1bXAgPSBmYWxzZTsKKyAgICAgICAg
aWYgKGZyYW1lU2h1ZmZsZXIpIHsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKHN0dWJK
aXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAg
ICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsK
KyAgICAgICAgfSBlbHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAg
ICAgICBzdHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgIGNhbGxz
W2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAoaXNEYXRhSUMpCisgICAgICAgICAgICAgICAgY2FsbHNbY2Fz
ZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhckNh
bGwoKTsKKyAgICAgICAgICAgICAgICBuZWVkc0RvbmVKdW1wID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIgPSBjb2RlUHRy
OworICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkgeworICAgICAgICAgICAgQVNTRVJUKCFpc0Rh
dGFJQyk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CisgICAgYmluYXJ5
U3dpdGNoLmZhbGxUaHJvdWdoKCkubGluaygmc3R1YkppdCk7CisKKyAgICBpZiAoZnJhbWVTaHVm
ZmxlcikgeworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7Cisg
ICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKKyAg
ICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKSk7CisjZWxz
ZQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVn
cyhHUFJJbmZvOjpyZWdUMCkpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnByZXBh
cmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQubW92ZShjYWxs
ZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBz
dHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0KKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAg
ICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8p
LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0YUlDLCBsaW5r
UmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAgLy8gMi4gSWYg
aXQgaXMgdGFpbC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9j
YXRpb24gZm9yIHNsb3ctY2FsbCBjYXNlLgorICAgIC8vIFRodXMgd2UgbmVlZCB0byBwdXQgaXQg
Zm9yIHRoZSBzbG93LXBhdGggY2FsbC4KKyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAgICAgIHN0
dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsK
KyAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
OjpyZWdUNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzRGF0YUlDKTsKKyAgICAg
ICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6OnJldHVy
bkZyb21CYXNlbGluZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3Mo
KSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAg
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6SW5saW5lQ2FjaGUsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKHBh
dGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Io
dm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7
CisgICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgeworI2lmIENQ
VShBUk1fVEhVTUIyKQorICAgICAgICAvLyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcgZW5zdXJl
cyBwcm9wZXIgbGlua2luZyBvbiBBUk0gVGh1bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBqdW1wcyB0
byBhbiBhZGRyZXNzCisgICAgICAgIC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQg
YnV0IGEgbm9ybWFsIGNhbGwgY2FsbHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRv
bSBiaXQuCisgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0Zs
YWdTZXQoQ0NhbGxIZWxwZXJzOjpDYWxsOjpUYWlsKTsKKyAgICAgICAgdm9pZCogdGFyZ2V0ID0g
aXNUYWlsQ2FsbCA/IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxU
b0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3ModGFyZ2V0KSkpOworI2Vsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9D
b2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29k
ZVB0cikpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKCFkb25lLmVtcHR5KCkpIHsKKyAgICAg
ICAgQVNTRVJUKCFpc0RhdGFJQyk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2Fs
bExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKKyAgICB9CisgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5r
UG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIAorICAgIGF1dG8g
c3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAor
ICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKKyAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywg
cGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAorICAgICAgICAgICAgIlBvbHltb3Jw
aGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCisgICAg
ICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNh
bGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENh
c2VzKSkuZGF0YSgpKSwKKyAgICAgICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1l
KCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAorICAgICAgICBXVEZNb3ZlKGZhc3RDb3VudHMp
KSk7CisKKyAgICAvLyBUaGUgb3JpZ2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0
LWJpdHMsIGJ1dCBzdGlsbAorICAgIC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9u
LWNlbGwgY2FsbGVlIHdpbGwgYWx3YXlzCisgICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCisg
ICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisKKyAgICAvLyBJZiB0aGVyZSBoYWQg
YmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBh
cyB0aGUgR0MgcnVucyBhbmQgc2VlcworICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3Rh
Y2suCisgICAgY2FsbExpbmtJbmZvLnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOworICAg
IAorICAgIC8vIFRoZSBjYWxsIGxpbmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2FsbCBjYWNoZSBh
cGFydCBmcm9tIHRoZSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsCisgICAgLy8gc3R1Yi4K
KyAgICBpZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCisgICAgICAgIGNhbGxMaW5rSW5mby5y
ZW1vdmUoKTsKK30KKwordm9pZCByZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQoreworICAgIHJlcGF0Y2hT
bG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0
QnlGdW5jdGlvbihraW5kKSk7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBHZXRCeUtp
bmQ6OkJ5SWQ6CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKKyAgICBjYXNlIEdl
dEJ5S2luZDo6VHJ5QnlJZDoKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKKyAgICBj
YXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlWYWw6CisgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwordm9pZCByZXNldFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBraW5kKQoreworICAgIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gb3B0aW1pemVkRnVuY3Rpb247CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKKyAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBl
ID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7CisgICAg
ICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxG
dW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAg
b3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwg
dW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6
ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFs
OiB7CisgICAgICAgIHVzaW5nIEZ1bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdl
dChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkK
KyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVu
Y3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNl
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1p
emVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmlj
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVy
aWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVG
aWVsZE9wdGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOworICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rp
b24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9wdGltaXplZEZ1bmN0aW9uKTsKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgSW5saW5lQWNjZXNzOjpy
ZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCByZXNldERlbEJ5KENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBr
aW5kKQoreworICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUpOworICAgIGVsc2UKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nl
c3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCit7CisgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdJ
bkJ5RnVuY3Rpb24oa2luZCkpOworICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQorICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8pOworICAgIGVsc2UKKyAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJ
bkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCit2
b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5l
QWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8pOworfQorCit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
KTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxp
bmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRDaGVja1ByaXZh
dGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQoreworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0
aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CisgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8p
OworfQorCit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Cisg
ICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
M2EwMzY1MzI2YWJmYmVkZWUwNTc1ODljNDU0MDliMmViMzY1ODk1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2guaApAQCAtMCwwICsxLDg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiQ2FsbFZhcmlhbnQuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKworZW51bSBjbGFzcyBHZXRCeUtpbmQgewor
ICAgIEJ5SWQsCisgICAgQnlWYWwsCisgICAgVHJ5QnlJZCwKKyAgICBCeUlkV2l0aFRoaXMsCisg
ICAgQnlJZERpcmVjdCwKKyAgICBQcml2YXRlTmFtZSwKKyAgICBQcml2YXRlTmFtZUJ5SWQsCit9
OworCitlbnVtIGNsYXNzIFB1dEJ5S2luZCB7CisgICAgQnlJZCwKKyAgICBCeVZhbCwKK307CisK
K2VudW0gY2xhc3MgRGVsQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsCit9OworCitlbnVt
IGNsYXNzIEluQnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorICAgIFByaXZhdGVOYW1l
Cit9OworCit2b2lkIHJlcGF0Y2hBcnJheUdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJs
b2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
dm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBD
YWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIEdldEJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFB1dEtpbmQsIEVDTUFNb2RlKTsKK3ZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2Jq
ZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQs
IFB1dEtpbmQpOwordm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBEZWxldGVQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCwgRUNNQU1vZGUpOwordm9p
ZCByZXBhdGNoSW5CeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBJbkJ5S2luZCk7Cit2b2lkIHJlcGF0Y2hIYXNQcml2YXRlQnJhbmQo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZp
ZXIsIGJvb2wgd2FzRm91bmQsICBTdHJ1Y3R1cmVTdHViSW5mbyYpOwordm9pZCByZXBhdGNoQ2hl
Y2tQcml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIENh
Y2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hTZXRQ
cml2YXRlQnJhbmQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIFN0cnVj
dHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJl
cGF0Y2hJbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSB2YWx1
ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZvJiwgYm9vbCB3YXNGb3VuZCk7
Cit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoVk0mLCBDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8m
LCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4pOwordm9pZCBsaW5rRGlyZWN0Q2FsbChDYWxsRnJhbWUqLCBDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwor
dm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgdW5saW5r
Q2FsbChWTSYsIENhbGxMaW5rSW5mbyYpOwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQpOwordm9p
ZCByZXNldEdldEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlLaW5kKTsK
K3ZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2lu
ZCk7Cit2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxC
eUtpbmQpOwordm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBJ
bkJ5S2luZCk7Cit2b2lkIHJlc2V0SGFzUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpOwordm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlc2V0U2V0UHJpdmF0ZUJyYW5kKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIEpTT2JqZWN0KiBjYWxsZWUpOworCisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
ZWZlN2IxYjMzNzY0YmRmNDJiMmU0ZjAyZDRkZjBjZDllODFjNDllCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlcGF0Y2hJbmxpbmVzLmgKQEAgLTAs
MCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlcGF0Y2guaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUs
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBjYWxsZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOworCisgICAgaWYgKGNhbGxMaW5r
SW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKKyAgICAgICAgYXV0
byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOworICAgICAgICBBU1NFUlQoY2Fs
bERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgICAgIGlmIChjYWxsRGF0
YS50eXBlID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKKyAgICAgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIGNhbGxl
ZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAgICAgICB2bS5lbmNv
ZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVj
dChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAgICAgICAgICBE
aXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAg
ICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0
Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAor
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUp
KTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlID09IENhbGxEYXRh
OjpUeXBlOjpOb25lKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgfQorCisg
ICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CisKKyAgICBhdXRvIGNvbnN0cnVjdERhdGEgPSBnZXRDb25zdHJ1Y3REYXRhKHZt
LCBjYWxsZWUpOworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5
cGU6OkpTKTsKKworICAgIGlmIChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6
Ok5hdGl2ZSkgeworICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
ZWVGcmFtZSk7CisgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVl
KSk7CisgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2Fs
bGVlRnJhbWUpOworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoCisgICAgICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlw
b2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihLZWVwVGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBl
ID09IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxl
ZSkpOworICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgIHZtLmdldENUSVRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAg
ICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKK30KKworQUxXQVlT
X0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgbGlua0ZvcihDYWxsRnJhbWUqIGNhbGxlZUZyYW1l
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bykKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFt
ZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIFJFTEVBU0VfQVNT
RVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOworCisgICAgSlNWYWx1ZSBjYWxsZWVBc1Zh
bHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7CisgICAgSlNDZWxs
KiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7Cisg
ICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkgeworICAgICAgICBpZiAoYXV0byogaW50ZXJu
YWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVB
c1ZhbHVlKSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5k
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhY29kZVB0cik7CisKKyAgICAgICAgICAg
IGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0U2VlbigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpbmtN
b25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBp
bnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKKworICAgICAgICAgICAgdm9pZCogbGlua2VkVGFy
Z2V0ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5r
SW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVw
VGhlRnJhbWUpKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNW
YWx1ZSwgY2FsbExpbmtJbmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgSlNTY29wZSog
c2NvcGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cjsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgICAg
ICBjb2RlUHRyID0ganNUb1dhc21JQ0NvZGVQdHIodm0sIGtpbmQsIGNhbGxlZSk7CisgICAgICAg
IGlmICghY29kZVB0cikKKyAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOworCisgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNl
cHRpb24gPSBbJl0gKCkgeworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRD
VElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9OworCisgICAgICAg
IGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0
eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgeworICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3Ry
dWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICAgICAgcmV0dXJuIGhh
bmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sqKiBj
b2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAg
ICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRh
YmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOwor
CisgICAgICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OworICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrKTsKKworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKKyAgICAgICAgaWYgKGNh
bGxlZUZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLT5pc1ZhcmFy
Z3MoKSkKKyAgICAgICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2Rl
UHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKKyAg
ICB9CisKKyAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBsaW5rTW9ub21vcnBoaWNDYWxs
KHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQ
dHIpOworCisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBD
YWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKworQUxX
QVlTX0lOTElORSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCit7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQg
PSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFs
dWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CisgICAgaWYgKFVO
TElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKKyAgICAgICAgaWYgKGpzRHluYW1pY0Nh
c3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJ
bnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
IWNvZGVQdHIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUp
KTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFu
ZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2Fs
bExpbmtJbmZvKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9
IGZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOworICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFi
bGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7
CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2lu
ZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2Jh
bE9iamVjdCwgZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2Vw
dGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9
IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKKyAgICAgICAgZnVuY3Rpb25FeGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGZ1bmN0
aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGhhbmRsZVRocm93RXhjZXB0aW9uKCkpOworICAgIH0KKyAgICAv
LyBGSVhNRTogU3VwcG9ydCB3YXNtIElDLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjAzMzkKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGV4ZWN1dGFi
bGUtPmVudHJ5cG9pbnRGb3IoCisgICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5KS5leGVjdXRh
YmxlQWRkcmVzcygpLAorICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0lu
Zm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRo
ZUZyYW1lKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggMGQxOWUyNzkw
NTZlNWYzN2U3NzFjNWM0OWEyZGIwZTZjMmQ4NDhkNy4uYWM1NzEyN2JjZjg5MDcyYmUwMzg0MTZk
YTEzOWI0MWYxNjRhZTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC00MDMsNyArNDAzLDYgQEAgdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyh1bnNpZ25lZCBudW1CaW5hcnlB
cml0aFByb2ZpbGVzLAogCiAjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJyYXlQcm9maWxl
cyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZPUl9FQUNIX09Q
Q09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCi0gICAgICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAgICAgICAgIG51
bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0b3JO
ZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVt
RW50cmllczxPcEdldEJ5SWQ+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDQwMzk0YTk0Mzk5Mjk5M2Y1NDVhMmFjNjJj
ZjZlZGMwOWRmNTU1ZmEuLjFjNTkwNDJlMGQwYzM4MTFiM2M5YmUyMTU4Y2RjNTRjMDFkYmI4MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCkBAIC03NSw3ICs3NSw2IEBAIGNsYXNzIENhY2hlZENvZGVCbG9jazsKIAogdHlwZWRl
ZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVuc2ln
bmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci10eXBlZGVmIHVuc2lnbmVkIFVu
bGlua2VkTExJbnRDYWxsTGlua0luZm87CiAKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA1YzcyMDU4ZGNmMjE5NjBkY2Y4NTNlMGE5
MmMyN2U4OWEyZDU2YmVlLi41ZTMyZDJkMjRmMWIzZWQ4NzBjMzMwZjJlZjIzZDg1ZTRlY2U0ODM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBA
IC0zMTUsNiArMzE1LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBsbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9m
dW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2xpbmtfY2FsbF90cmFtcG9s
aW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmU6CisgICAgY2FzZSBs
bGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVh
bF90YWlsX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2dldF9ob3N0X2NhbGxfcmV0
dXJuX3ZhbHVlOgogICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbjoKICAg
ICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZToK
QEAgLTMyNSw2ICszMjksOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29k
ZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3Bf
aXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxsX3JldHVybl9s
b2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246CisgICAgY2Fz
ZSBvcF9jYWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzX3Nsb3df
cmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1
cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0aW9uOgpAQCAt
MzM1LDcgKzM0MSw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQg
b3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBvcF9jb25z
dHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuX3Ns
b3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVy
bl9sb2NhdGlvbjoKLSAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb246CiAgICAg
Y2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKQEAgLTM0Myw4ICszNDgs
OSBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugd2FzbV9mdW5jdGlvbl9wcm9s
b2d1ZToKICAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgogICAgIGNhc2Ug
anNfdHJhbXBvbGluZV9vcF9jYWxsOgotICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF90YWlsX2Nh
bGw6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25z
dHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3JfbmV4dDoK
ICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKICAgICBjYXNlIGpzX3Ry
YW1wb2xpbmVfb3BfY2FsbF9zbG93OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGI0NTFjZGI2MWY3YTExYjMz
MDJjMTg1YzY2YmZmMTdhOWZkYmUwOWYuLmU3MjJmOWViZGFjYzg5MzY5MDY1NmQ1YjYzZTlmNjI0
NDQ2MTVmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTE2NiwxMCArMTY2LDEwIEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMoQ29kZUJsb2Nr
KiBiYXNlbGluZUNvCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX2NvbnN0cnVjdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmxp
bmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5U
X1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFy
Z3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2Nv
bnN0cnVjdF92YXJhcmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JF
VFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsKICAgICAgICAgICAg
IGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlfaWQpCkBAIC0yMDEs
MTAgKzIwMSwxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogICAgICAgICBjYXNlIElubGlu
ZUNhbGxGcmFtZTo6Q29uc3RydWN0OgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2Fs
bFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdz
OiB7Ci0gICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9Ci0gICAgICAgICAg
ICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVj
b2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBudWxscHRyOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1fbG9j
ayk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBjYWxsQnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm8pOwotCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5kb25l
TG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDk1NmQ2OTQwZTdkMjBiODIwMmYyNTUzZWM1ZmU3MGI3
ZThlOWU2MGEuLmU2MWY4OTRiZTEwOGNjYmZhMTJkYjIwODkyOWVjZGUyYzNkZjBmMjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcApAQCAtODQ3LDEwICs4NDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ2Fs
bFNpdGVJbmRleChjYWxsU2l0ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGluZm8tPmVt
aXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAgICAgaW5mby0+
ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsm
XXsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7
CiAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVs
KCk7CiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsK
QEAgLTg5Miw3ICs4OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlKQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlz
VGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCht
X2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIHNjb3BlZExhbWJk
YTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7
CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTkwMCw3ICs5MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aChtX2ppdCwgY2Fs
bGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKaW5kZXggMGZlN2E3OTA5MTVhNzI0ZjRlMWZmYmQ5NmJhMTRlN2E4NWNiOGM3OS4uNzcw
NzNmMzRhZmJmZGY5NWZlNTgyNWEzYzg5ODljMzIyM2RkYWE1YSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC05MzgsMTAgKzkz
OCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAg
ICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogCi0gICAgICAg
ICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0g
eworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCht
X2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgSklUQ29t
cGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBAIC05ODEs
NyArOTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAg
ICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWls
KSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBzY29wZWRMYW1iZGE8
dm9pZCgpPihbJl17CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewog
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxl
RGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVE
YXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTk4OSw3ICs5ODksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdEZhc3RQ
YXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpObyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCBlMWM4
MmRmODgzNDE0OTE5ODRiMDk4MzgxYjgwZDVlYTM2NzJkNmViLi4wMThhMmY4NThmNDIxMWQzODdi
NDJiNjkyZTI1YjUxODYxYmU0Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMDQwMywxMCArMTA0MDMsMTAgQEAgSUdOT1JFX0NMQU5H
X1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXgu
Yml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZp
cnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
KTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxG
YXN0UGF0aChqaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1p
dERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21U
YWlsQ2FsbCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA1NTksMTAgKzEwNTU5LDEwIEBA
IElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkQ2FsbExpbmtJbmZvKGNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxM
aW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1
dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVk
TGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KSk7CiAKICAgICAgICAgICAgICAg
ICBzbG93UGF0aC5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFy
dCA9IGppdC5sYWJlbCgpOwpAQCAtMTA5MDIsMTAgKzEwOTAyLDEwIEBAIElHTk9SRV9DTEFOR19X
QVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBb
Jl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4o
WyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAgICAgICBkb25l
ID0gaml0Lmp1bXAoKTsKQEAgLTExMTgzLDEwICsxMTE4MywxMCBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsm
XXsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9
IGppdC5qdW1wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKaW5kZXggYzhjYmJlZTA2YmY3ZDY2NjJjMTlhNGE0YThhMThjMjFjZWZkM2Y3Mi4uZTY0
NTg1MzFlYmM5MDRkZTVkZDA0Y2UzYWJhNTNjNWJkM2M3MGIwZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNzQ1LDE4ICs3NDUsMTggQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwoR1AKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8q
IGluZm8pCiB7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86
OnJlZ1QzKTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZt
LCBpbmZvKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBHUFJJbmZv
OjpyZWdUMiwgaW5mby0+Y2FsbE1vZGUoKSk7CiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBDYWxsTW9k
ZSBjYWxsTW9kZSkKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJl
Z1QyKTsKKyAgICBtb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENh
bGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CiAgICAgICAg
IGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soWz0sICZ2bV0gKCkgewot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2
aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKLSAgICAgICAgICAgIGlu
Zm8tPnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFs
VGh1bmspKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbE1vZGUpOwog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFsVGh1bmsuY29k
ZSgpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggNjVkZDhlZGVmNzQ3OTk2ZDVmNmQ4ZjE5MjQ2ZTZhZDkz
MzZkNDczOC4uYTQ0YWE1Y2Y5NTRmMmMxNjU0NzllYzJkY2Q5MjNkNWZmNGYzZDFmOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xNzUyLDcgKzE3
NTIsNyBAQCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXIgewog
ICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbExpbmtJbmZvKik7Ci0gICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
Q2FsbE1vZGUpOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAg
ICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCmluZGV4IDE1ODk2MDNmMTQ5YzI3NmMzNTllN2Ji
MjZkNjRmNGQ4NTcyN2YxNTAuLjMwMDNiMDczNTAxODhlNWY3M2ZjYzk2NzIwZDZhOWU3NDFmOGJj
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaApAQCAt
NjIsNyArNjIsNiBAQCBjbGFzcyBKSVRDb25zdGFudFBvb2wgewogCiAgICAgZW51bSBjbGFzcyBU
eXBlIDogdWludDhfdCB7CiAgICAgICAgIEdsb2JhbE9iamVjdCwKLSAgICAgICAgQ2FsbExpbmtJ
bmZvLAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKICAgICAgICAgRnVuY3Rpb25EZWNsLAog
ICAgICAgICBGdW5jdGlvbkV4cHIsCkBAIC05Myw3ICs5Miw2IEBAIGNsYXNzIEJhc2VsaW5lSklU
Q29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICB+
QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CiAgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9D
b2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQo
KTsgfQogCi0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKICAgICBG
aXhlZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwogICAgIEZp
eGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7
CiAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3Bw
CmluZGV4IGNmMTVjZTE5OWVkMzc2YWYxNTBlODg3ZjNlZWQwMmZhMTVkYzdiMmEuLjUwMmY5YTA3
MjFkZjFlMzEwNzhmNjk5YTNjZWVkZjUyOTc4OTIxYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKIApA
QCAtODIsNiArODMsMzcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KgogICAgIH0KIH0KIAorQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5l
T3JMTEludFRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDAgfTsKKyNlbmRpZgorICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZm
bGVEYXRhOworICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7
CisgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG51bVBhcmFtZXRlcnM7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86
Om51bWJlclRhZ1JlZ2lzdGVyOworI2VuZGlmCisgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0g
Ynl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lz
dGVyKTsKKyAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgeworICAgICAg
ICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3Bs
YWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAgICAgICAgRGF0
YUZvcm1hdEpTKTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzaHVmZmxlRGF0YS5j
YWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBEYXRh
Rm9ybWF0SlMpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzaHVmZmxlRGF0YS5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1Iu
cGF5bG9hZEdQUigpKTsKKyNlbmRpZgorICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworICAgIHNodWZmbGVEYXRhLnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHNo
dWZmbGVEYXRhOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgKaW5kZXggMzM2NTdlMzNhNjRmMzc4MWY0MzA5OThjMTMzMzcxYTFhYTY0Yjc1YS4uMGJjMTli
OTlkNjFlNGJjYmI3MTllYTlmY2MxYmM4YzM3ZmJmZWM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaApAQCAtMzIsNiArMzIsOCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IE9wVGFpbENhbGw7CisKIHN0cnVjdCBDYWxsRnJh
bWVTaHVmZmxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC00MCw2ICs0Miw4IEBAIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSB7CiAgICAgICAgIGFy
Z3Muc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgY3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYsIHVu
c2lnbmVkIG51bVBhcmFtZXRlcnMpOworCiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7
CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1Q
YXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA5
Mjk0MjQ2MDczNDAwOTExYjZjMzU3Yzc4YTRhMGM2YTc0ZTlhYWQ0Li4yOGFlNmY3NzBkZGFjZDcx
YzZmMTgyYzlkMTc5ZmQxY2NlYjhkZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBA
IC0xMDEsMTIgKzEwMSw5IEBAIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyos
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rCiAgICAgcmV0dXJuIHN0
ZDo6dHVwbGUgeyBzdHViSW5mbywgc3R1YkluZm9JbmRleCB9OwogfQogCi1zdGQ6OnR1cGxlPFVu
bGlua2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4gSklUOjphZGRV
bmxpbmtlZENhbGxMaW5rSW5mbygpCitVbmxpbmtlZENhbGxMaW5rSW5mbyogSklUOjphZGRVbmxp
bmtlZENhbGxMaW5rSW5mbygpCiB7Ci0gICAgdm9pZCogdW5saW5rZWRDYWxsTGlua0luZm9JbmRl
eCA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihtX3VubGlua2Vk
Q2FsbHMuc2l6ZSgpKSk7Ci0gICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSAmbV91bmxp
bmtlZENhbGxzLmFsbG9jKCk7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9JbmRleCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2Fs
bExpbmtJbmZvLCB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4KTsKLSAgICByZXR1cm4gc3RkOjp0
dXBsZSB7IGluZm8sIGNhbGxMaW5rSW5mb0luZGV4IH07CisgICAgcmV0dXJuICZtX3VubGlua2Vk
Q2FsbHMuYWxsb2MoKTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTAxMCw3ICsxMDA3
LDYgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0g
Rml4ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+KG1fdW5saW5rZWRDYWxscy5zaXplKCkp
OwogICAgIGlmIChtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpCiAgICAgICAgIHN0
ZDo6bW92ZShtX3VubGlua2VkQ2FsbHMuYmVnaW4oKSwgbV91bmxpbmtlZENhbGxzLmVuZCgpLCBt
X2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5iZWdpbigpKTsKLSAgICBtX2ppdENvZGUtPm1fZXZh
bENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogICAgIG1faml0
Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8+KG1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKICAgICBpZiAobV9qaXRDb2Rl
LT5tX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSkKICAgICAgICAgc3RkOjptb3ZlKG1fdW5saW5r
ZWRTdHViSW5mb3MuYmVnaW4oKSwgbV91bmxpbmtlZFN0dWJJbmZvcy5lbmQoKSwgbV9qaXRDb2Rl
LT5tX3VubGlua2VkU3R1YkluZm9zLmJlZ2luKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5k
ZXggZGUyYzVjZTc3MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlhMS4uNjdiNDNkOGZhMzBi
NzJjYmQ0OTQ0NjIyOGM2NDI5NjRmM2QzMzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBA
IC0xNTMsNyArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENhbGxDb21waWxh
dGlvbkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwog
ICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87Ci0gICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAg
fTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAt
Mjk0LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
OworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAg
ICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworICAgICAg
ICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwg
VW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxs
RXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAt
NzA2LDYgKzcwNSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+
CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPios
IGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVybkZyb21CYXNlbGluZUdl
bmVyYXRvcihWTSYpOworCisgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9j
aGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihW
TSYpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wR2V0
RnJvbVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQpAQCAtOTU4LDcgKzk2MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgYWRkVG9D
b25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0
cik7CiAgICAgICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyosIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKLSAg
ICAgICAgc3RkOjp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQ+IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIFVubGlua2VkQ2Fs
bExpbmtJbmZvKiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogCiAgICAgICAgIEludGVycHJl
dGVyKiBtX2ludGVycHJldGVyOwogCkBAIC0xMDI5LDcgKzEwMzEsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBWZWN0b3I8SklUQ29uc3RhbnRQb29sOjpWYWx1ZT4gbV9jb25zdGFudFBv
b2w7CiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25z
dGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwotICAgICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5m
b3M7CiAgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFi
bGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0Njhj
MGZlMTAyYjVkZmJmYTJiZTRmZTE3MzE5N2UyYi4uNTcxOTYxMjE1NjBhM2EyOWFlM2QyMDcxMTNj
NjBkY2U2MDgwZDYzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC01
OSwxNyArNTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFs
dWVHUFIgKHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwotCi0j
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCku
Z2V0Q1RJU3R1YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNlbmRpZgorICAg
IGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFzZWxpbmVHZW5l
cmF0b3IpLmNvZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAgIENDYWxsSGVs
cGVycyBqaXQ7CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBq
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJh
c2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBAIC04NCw3ICs4
OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICB1bnNpZ25lZCBjaGVj
a3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBpbnQgYXJnQ291bnRJ
bmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNo
ZWNrcG9pbnQpOwpAQCAtOTcsNyArMTAxLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZy
YW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1IpOwogICAgICAgICBK
dW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAgICAgbG9hZDMyKEFkZHJl
c3ModG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgdG1w
R1BSKTsKLSAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29kZSwgT3BDYWxs
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3Ry
dWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUs
IE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zm
c2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAg
ICAgfQogCkBAIC0xMTAsNyArMTE0LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bj
b2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1K
SVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBi
eXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0
ZWNvZGUubV9hcmd1bWVudHM7CkBAIC0xNjAsNyArMTY0LDcgQEAgSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmYKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1Q1LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVn
VDIpOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhbGxMaW5rSW5mbygpLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwg
cmVnVDMpOwogICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVn
VDIpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zm
c2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CkBAIC0yMDMsNjQgKzIwNywz
OSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0g
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpD
YWxsLCByZWdUMCk7Ci0KICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2
OwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZFZhbHVlKEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsZWVKU1IpOwogICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1f
dm0sIGluZm8pOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcENhbGxFdmFs
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAg
ICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBjYWxsTGlu
a0luZm9HUFIsIENhbGxNb2RlOjpSZWd1bGFyKTsKICAgICByZXNldFNQKCk7CiAKICAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9v
bCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitib29sIEpJVDo6Y29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKIHsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENh
bGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZv
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BU
YWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRh
PiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7Ci0gICAg
c2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZs
ZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0
ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSNlbmRpZgotICAgIHNodWZmbGVEYXRh
LT5udW1Mb2NhbHMgPQotICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6
ZShieXRlY29kZS5tX2FyZ2MpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29k
ZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9Ci0gICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9h
cmd2LAotICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7Ci0gICAgfQotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNh
bGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2Fs
bGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpKTsKLSNlbmRpZgotICAgIHNo
dWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLQogICAgIGNvbnN0ZXhwciBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENvbnN0YW50KGNhbGxMaW5r
SW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOwotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpT
Ui5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIgc2h1ZmZsZXIgeyAqdGhpcywgKnNodWZmbGVEYXRhIH07CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcFRhaWxDYWxsOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBKdW1wTGlzdCBzbG93
UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBj
YWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIHNjb3BlZExhbWJkYTx2b2lk
KCk+KFsmXXsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGEgPSBDYWxs
RnJhbWVTaHVmZmxlRGF0YTo6Y3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwoYnl0ZWNv
ZGUsIG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsIHNodWZmbGVEYXRhIH07CiAgICAgICAgIHNo
dWZmbGVyLmxvY2tHUFIoY2FsbExpbmtJbmZvR1BSKTsKICAgICAgICAgc2h1ZmZsZXIucHJlcGFy
ZUZvclRhaWxDYWxsKCk7Ci0gICAgfSk7CisgICAgfSkpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRocyk7CiAKLSAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKLSAgICBpbmZvLT5mcmFt
ZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7Ci0KICAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yODgsMTcgKzI2Nywx
NCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgICovCiAKICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBp
bmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFs
KSB7Ci0gICAgICAgIHN0ZDo6dGllKGluZm8sIGluZm9Db25zdGFudCkgPSBhZGRVbmxpbmtlZENh
bGxMaW5rSW5mbygpOworICAgICAgICBpbmZvID0gYWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsK
ICAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICAgICAg
aW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKICAg
ICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZv
SW5kZXgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxh
dGlvbkluZm8oKSk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOwotICAgICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0Nv
bnN0YW50OwogICAgIH0KLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0
YW50KTsKKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSk7CiAKICAgICAvLyBTUCBob2xk
cyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRD
b3VudCBpbml0aWFsaXplZC4KICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwpAQCAtMzE2LDE2ICsyOTIsMTYgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmQKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoY2FsbGVl
SlNSKSk7CiAjZW5kaWYKIAotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8s
IGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQorICAgIGlmIChjb21waWxlVGFpbENh
bGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsKLSAgICBsb2Fk
Q29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOworICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxM
aW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0lu
Zm9HUFIsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2Fs
bExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93
KGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAgICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwo
KTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25l
TG9jYXRpb24gPSBkb25lTG9jYXRpb247CkBAIC0zNDQsMTUgKzMyMCwxNiBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25l
ZCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIEFTU0VSVChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOwotICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9m
ZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CkBAIC0zNjYsNyArMzQzLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUK
IAogICAgIHJlc2V0U1AoKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0NTg3ODAzYzI2MThjNjgwMzk4
MzZjZWU2YzdiMzRmZDJjMzA0Li4yZmUyM2M0OWZkMGY5NDA5MWY2ODYwNWI3NTdhZTJjZTMyMjAx
NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTM3MCwy
MSArMzcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQotewotICAg
IENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExp
c3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJ
VGh1bmspOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOwotfQotI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMGUyZDdkMDhjZmI3NWYzMjcxZDA2
MmIwOTZhYmIwYzM1YzdmMWE4NS4uNmJjZTc0YWI4MmM1NTdkMDA4NTE1MDc4NTFhMDRlNGUxNDYz
MGMwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC02MCw3ICs2MCw3IEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKLSNpbmNsdWRlICJS
ZXBhdGNoLmgiCisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIKICNpbmNsdWRlICJTaGFkb3dD
aGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJTdXBl
clNhbXBsZXIuaCIKQEAgLTE0NDYsMTg2ICsxNDQ2LDkgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBn
bG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBTbG93
UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBjYWxsZWVGcmFtZS0+
c2V0Q29kZUJsb2NrKG51bGxwdHIpOwotCi0gICAgaWYgKGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6
YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgYXV0byBjYWxsRGF0YSA9IGdl
dENhbGxEYXRhKHZtLCBjYWxsZWUpOwotICAgICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSAhPSBD
YWxsRGF0YTo6VHlwZTo6SlMpOwotCi0gICAgICAgIGlmIChjYWxsRGF0YS50eXBlID09IENhbGxE
YXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxs
ZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1
cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9i
YWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2Fs
bG93R0M7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICAgICAg
dm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhl
RnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBBU1NFUlQo
Y2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGdsb2Jh
bE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgIH0K
LQotICAgIEFTU0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVG
b3JDb25zdHJ1Y3QpOwotCi0gICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0Q29uc3RydWN0RGF0
YSh2bSwgY2FsbGVlKTsKLSAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlICE9IENhbGxEYXRh
OjpUeXBlOjpKUyk7Ci0KLSAgICBpZiAoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpU
eXBlOjpOYXRpdmUpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbGVlRnJhbWUpOwotICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNh
bGxlZSkpOwotICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVj
dERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSks
IGNhbGxlZUZyYW1lKTsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7
Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlw
ZTo6Tm9uZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
Tm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKLSAgICByZXR1cm4g
ZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7Ci19Ci0KIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25MaW5rQ2FsbCwg
U2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQogewotICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2Fs
bExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxs
TGlua0luZm8tPmlzRGlyZWN0KCkpOwotICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9
IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOwotICAgIEpTQ2VsbCogY2Fs
bGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwotICAgIGlm
ICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAgICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVu
Y3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1
ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOwotCi0gICAgICAgICAgICBpZiAo
IWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFNlZW4oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5rTW9ub21v
cnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJu
YWxGdW5jdGlvbiwgY29kZVB0cik7Ci0KLSAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRhcmdldCA9
IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8t
PmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZy
YW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxlZUFzVmFsdWUs
IGNhbGxMaW5rSW5mbykpOwotICAgIH0KLQotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxw
dHI7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgY29k
ZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBraW5kLCBjYWxsZWUpOwotICAgICAgICBpZiAo
IWNvZGVQdHIpCi0gICAgICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9u
ID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxK
U0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhl
RnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5j
dGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpD
YW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBj
YWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGNhbGxlZUZyYW1l
LT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVw
YXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUsIGtp
bmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKLQotICAgICAgICBjb2RlQmxvY2sgPSAqY29k
ZUJsb2NrU2xvdDsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICAgICAgQXJpdHlD
aGVja01vZGUgYXJpdHk7Ci0gICAgICAgIGlmIChjYWxsZWVGcmFtZS0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBhcml0eSA9
IE11c3RDaGVja0FyaXR5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcml0eSA9IEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7Ci0gICAgfQotCi0gICAgaWYgKCFjYWxsTGlua0lu
Zm8tPnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwotICAgIGVs
c2UKLSAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlu
a0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLQotICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZy
YW1lIDogS2VlcFRoZUZyYW1lKSk7Ci19Ci0KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmly
dHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKiYgY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVG
cmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2lu
ZCgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0K
LSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFs
dWVDYWxsZWUoKTsKLSAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2Fs
bGVlQXNWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsK
LSAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVB
c1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5k
KTsKLSAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNl
VGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVG
cmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7Ci0gICAgfQotICAgIAotICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKTsK
LSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7
Ci0gICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgewot
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotCi0gICAgICAgIGF1dG8gaGFu
ZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJn
ZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAg
ICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9OwotCi0gICAgICAgIGlmICghaXND
YWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENv
bnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgewotICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJv
cihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhy
b3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9j
a1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAgICAgIGZ1bmN0
aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZt
LCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKLSAgICB9
Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5Ci0gICAgcmV0dXJuIGVuY29kZVJlc3VsdChl
eGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fs
bExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6
IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBnbG9iYWxP
YmplY3QsIGNhbGxMaW5rSW5mbyk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25MaW5rUG9seW1vcnBoaWNDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZDUxY2RhNGUyYTIxYTkyMTc5YjUxNWY5ODRhZjJj
NjhkNmRmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjAyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlcGF0Y2guaCIKLQotI2lm
IEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKLSNpbmNsdWRlICJDQ2Fs
bEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgot
I2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0
dGVyLmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiRXhlY3V0YWJs
ZUJhc2VJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRlRMVGh1bmtzLmgiCi0jaW5jbHVkZSAiRnVsbENv
ZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1
ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJJQ1N0YXRzLmgiCi0jaW5j
bHVkZSAiSW5saW5lQWNjZXNzLmgiCi0jaW5jbHVkZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuaCIK
LSNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSklULmgi
Ci0jaW5jbHVkZSAiSklUSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHku
aCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgotI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJQ
b2x5bW9ycGhpY0FjY2Vzcy5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgotI2luY2x1
ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgotI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJ
bmZvLmgiCi0jaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0
b3JzLmgiCi0jaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLSNpbmNsdWRlIDx3dGYv
U3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0YXRpYyBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPiBvcGVyYXRpb24pCi17Ci0gICAgSlNDX1JFVFVSTl9SRVRB
R0dFRF9PUEVSQVRJT05fV0lUSF9WQUxJREFUSU9OKG9wZXJhdGlvbik7Ci19Ci0KLXN0YXRpYyBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9u
KENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCkKLXsKLSAgICBKU0NfUkVU
VVJOX1JFVEFHR0VEX0NBTExfVEFSR0VUX1dJVEhfVkFMSURBVElPTihjYWxsKTsKLX0KLQotc3Rh
dGljIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIGlm
IChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZXR1cm4gcmV0YWdPcGVyYXRpb25X
aXRoVmFsaWRhdGlvbihzdHViSW5mby5tX3Nsb3dPcGVyYXRpb24pOwotICAgIENvZGVMb2NhdGlv
bkNhbGw8SlNJbnRlcm5hbFB0clRhZz4gY2FsbCA9IHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9j
YXRpb247Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkZUTEpJVCkgewotICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRh
Zz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFn
PihjYWxsKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0
aHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIHJl
dHVybiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVu
a3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkpOwotICAgIH0K
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7Ci0jZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCi0gICAgcmV0dXJuIHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKGNhbGwpOwot
fQotCi12b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotI2lmIEVOQUJMRShGVExfSklUKQot
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKLSAgICAg
ICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwotICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtz
ID0gKnZtLmZ0bFRodW5rczsKLSAgICAgICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRh
cmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2Fs
bCk7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5r
cy5rZXlGb3JTbG93UGF0aENhbGxUaHVuayhzbG93UGF0aFRodW5rKTsKLSAgICAgICAga2V5ID0g
a2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih0aHVu
a3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIGtleSkuY29kZSgpKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBVTlVTRURfUEFSQU0oY29k
ZUJsb2NrKTsKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaENhbGwoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRy
VGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKQotewotICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKSB7Ci0gICAgICAgIHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbiA9IG5ld0NhbGxl
ZUZ1bmN0aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5t
X3Nsb3dQYXRoQ2FsbExvY2F0aW9uLCBuZXdDYWxsZWVGdW5jdGlvbik7Ci19Ci0KLWVudW0gSW5s
aW5lQ2FjaGVBY3Rpb24gewotICAgIEdpdmVVcE9uQ2FjaGUsCi0gICAgUmV0cnlDYWNoZUxhdGVy
LAotICAgIEF0dGVtcHRUb0NhY2hlCi19OwotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0
aW9uRm9yQ2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0KLSAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0
cnVjdHVyZS0+dHlwZUluZm8oKTsKLSAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlD
YWNoaW5nKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKHN0cnVj
dHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBpZiAoc3RydWN0dXJl
LT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLSAgICAgICAgLy8gRmxhdHRlbmluZyBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNl
dCwgc28gcmV0dXJuIGVhcmx5IGZvciBhbm90aGVyIHRyeS4KLSAgICAgICAgYXNPYmplY3QoY2Vs
bCktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKLSAgICAgICAgcmV0dXJuIFJldHJ5Q2Fj
aGVMYXRlcjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICBy
ZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7Ci19Ci0KLXN0YXRpYyBib29sIGZvcmNlSUNGYWlsdXJlKEpT
R2xvYmFsT2JqZWN0KikKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKTsK
LX0KLQotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZChWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQmIHJlc3VsdCkKLXsKLSAgICBpZiAo
cmVzdWx0LnNob3VsZFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50cygpKSB7Ci0gICAgICAgIHJl
c3VsdC5maXJlV2F0Y2hwb2ludHModm0pOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAg
ICAgICAgIHN0dWJJbmZvLnJlc2V0KGxvY2tlciwgY29kZUJsb2NrKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVP
cHRpbWl6aW5nR2V0QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtp
bmQpIHsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgY2FzZSBH
ZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFs
OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICBjYXNlIEdl
dEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWRPcHRpbWl6ZTsKLSAgICB9Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5k
KQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgotICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdp
dGhUaGlzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzOwotICAgIGNh
c2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJ
ZDsKLSAgICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkdldEJ5SWREaXJlY3Q7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljOwotICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2
YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lOwotICAgIGNh
c2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZUJ5SWQ7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKLXsK
LSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAgICAgICAg
aWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBh
Y2Nlc3MgZm9yIGltbWVkaWF0ZXMuCi0gICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEpTQ2VsbCogYmFzZUNl
bGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgaXNQcml2YXRlID0g
a2luZCA9PSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lIHx8IGtpbmQgPT0gR2V0QnlLaW5kOjpQcml2
YXRlTmFtZUJ5SWQ7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0KLSAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKLSAg
ICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAg
ICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAgICAgICAgICAgICAg
ICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKLQotICAgICAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlM
ZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBh
cHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6
VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0
cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVu
Z3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0
aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdM
ZW5ndGgobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hl
TGF0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFj
Y2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFy
Z3VtZW50cyo+KHZtLCBiYXNlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3
ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFuZGxlIHRoaXMgYXMgYSBub3JtYWwgcHJvcGVy
dHkgbG9hZCEgR3VhcmRpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHdpdGggc3VjaCBhIGNo
ZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNhc2UgZm9yIHRoYXQgbG9hZCBpZiBuZWVkZWQu
Ci0gICAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChTY29wZWRBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1p
Y0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4odm0sIGJhc2VDZWxsKSkgewotICAgICAgICAgICAgICAg
IC8vIERpdHRvLgotICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5n
cygpKQotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZt
LCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlO
YW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcHJvcGVydHlO
YW1lLmlzU3ltYm9sKCkgJiYgYmFzZUNlbGwtPmluaGVyaXRzPEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0Pih2bSkgJiYgIXNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBtb2R1
bGVOYW1lc3BhY2VTbG90ID0gc2xvdC5tb2R1bGVOYW1lc3BhY2VTbG90KCkpCi0gICAgICAgICAg
ICAgICAgbmV3Q2FzZSA9IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29k
ZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGJh
c2VDZWxsKSwgbW9kdWxlTmFtZXNwYWNlU2xvdC0+ZW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0KG1v
ZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3BlT2Zmc2V0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmICghbmV3Q2FzZSkgewotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxl
KCkgJiYgIXNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25T
ZXQ7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1
cmUodm0pOwotCi0gICAgICAgICAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgYmFzZVZhbHVlID0ganND
YXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOwotICAgICAgICAgICAgICAgIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJh
c2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJv
eHkgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlv
biBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlQ2VsbCk7Ci0gICAgICAgICAgICBpZiAo
YWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247
Ci0KLSAgICAgICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgotICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAg
ICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKQotICAgICAgICAgICAgICAgICYmIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlVmFsdWUKLSAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50
U2V0KCkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewot
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXpp
bmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5p
dEdldEJ5SWRTZWxmKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotCi0g
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFs
aWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0gICAgICAgICAgICBpZiAoc2xvdC5p
c0N1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICAvLyBUbyBjYWNoZSBzZWxmIGN1c3RvbXMsIHdlIG11c3QgZGlzYWxsb3cgZGljdGlvbmFy
aWVzIGJlY2F1c2Ugd2UKLSAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGluZm9ybWVkIGlm
IHRoZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hlIHRoZQotICAgICAgICAgICAgICAg
IC8vIGNvbnN0YW50IGZ1bmN0aW9uIHBvaW50ZXIuCi0KLSAgICAgICAgICAgICAgICBpZiAoIXBy
ZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBzbG90LnNsb3RCYXNlKCksIHNsb3Qu
c2xvdEJhc2UoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5z
bG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRp
Y3Rpb25hcnlTdHJ1Y3R1cmUodm0sIGpzQ2FzdDxKU09iamVjdCo+KGJhc2VDZWxsKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7IC8vIFdlIG1heSBoYXZlIGNo
YW5nZWQgcHJvcGVydHkgb2Zmc2V0cy4KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLmdldE93blBy
b3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgYSBraW5k
IGlzIEdldEJ5S2luZDo6QnlJZERpcmVjdCBvciBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lLCB3ZSBk
byBub3QgbmVlZCB0byBpbnZlc3RpZ2F0ZSBwcm90b3R5cGUgY2hhaW5zIGZ1cnRoZXIuCi0gICAg
ICAgICAgICAgICAgLy8gQ2FjaGVhYmlsaXR5IGp1c3QgZGVwZW5kcyBvbiB0aGUgaGVhZCBzdHJ1
Y3R1cmUuCi0gICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gR2V0QnlLaW5kOjpCeUlkRGlyZWN0
ICYmICFpc1ByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9
IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFByb3BlcnR5IG9mZnNldHMgbWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8gZmxhdHRlbmluZy4g
V2UnbGwgY2FjaGUgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUo
Z2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90
QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
ID09IG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW5zdGVhZCBm
b3IgZmFzdGVyIGFjY2Vzc2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNj
ZXNzQ2hhaW4gPSBudWxscHRyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
TWF5YmUgdGhpcyBgaWZgIHNob3VsZCBiZSBpbnNpZGUgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlCbGFoLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIxNQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpIHx8IGNvbmRpdGlvblNl
dC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IG9mZnNldCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWUudWlkKCksIHNsb3QuYXR0cmlidXRlcygpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRp
b25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0Z1bmN0aW9uKiBnZXR0ZXIgPSBudWxscHRyOwot
ICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAg
ICBnZXR0ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgc2xvdC5nZXR0ZXJTZXR0
ZXIoKS0+Z2V0dGVyKCkpOwotCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0
ZUFubm90YXRpb24+IGRvbUF0dHJpYnV0ZTsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21BdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAgICBkb21B
dHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJpYnV0ZSgpOwotCi0gICAgICAgICAgICBpZiAoa2luZCA9
PSBHZXRCeUtpbmQ6OlRyeUJ5SWQpIHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nl
c3NUeXBlIHR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgp
KQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6
R2V0R2V0dGVyOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQ
cm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlO
YW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5
LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZyb21Qcm94eSAmJiBnZXR0ZXIgJiYg
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihzdHViSW5m
bywgZ2V0dGVyLCBzdHJ1Y3R1cmUpKQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBz
bG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgZ2V0dGVyLCBXVEZN
b3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoaXNQcml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFzbG90LmlzVW5zZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29s
IGlzUHJveHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVh
YmxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpMb2FkLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3Ry
dWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBpc1Byb3h5LCBz
bG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5p
c1Vuc2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmlzVW5zZXQoKSA/IEFjY2Vzc0Nhc2U6
Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVBy
b3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFjY2Vzc0Nh
c2U6OkFjY2Vzc1R5cGUgdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNl
OjpHZXR0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuYXR0cmlidXRlcygp
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2Fz
ZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0g
R2V0QnlLaW5kOjpCeUlkV2l0aFRoaXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nl
c3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC53
YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IEZ1bmN0aW9uUHRyPEN1
c3RvbUFjY2Vzc29yUHRyVGFnPihzbG90LmN1c3RvbUdldHRlcigpKSA6IG51bGxwdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5zbG90
QmFzZSgpICE9IGJhc2VWYWx1ZSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hh
aW4pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNz
SW5mb09yTnVsbCh2bSksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQo
KSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKLQotICAgICAgICByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVD
TUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAg
ICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51
bGwodm0pLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7
Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgICAgIGNhc2UgR2V0
QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJ
ZDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgotICAgICAgICAgICAg
Y2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgot
ICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICAgICAgICAg
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJT
dHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKLX0KLQotdm9pZCByZXBhdGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEdldEJ5S2luZCBraW5kKQotewotICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBpZiAodHJ5Q2FjaGVHZXRC
eShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qs
IHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlvbihraW5k
KSk7Ci19Ci0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlHZXRCeVZh
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKLXsKLSAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0KLSAgICBpZiAoIWluZGV4LmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKLQotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52
bSgpKTsKLQotICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0KLSAg
ICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOwotICAgICAgICBpZiAoYmFz
ZS0+dHlwZSgpID09IERpcmVjdEFyZ3VtZW50c1R5cGUpCi0gICAgICAgICAgICBhY2Nlc3NUeXBl
ID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERpcmVjdEFyZ3VtZW50c0xvYWQ7Ci0gICAgICAgIGVsc2Ug
aWYgKGJhc2UtPnR5cGUoKSA9PSBTY29wZWRBcmd1bWVudHNUeXBlKQotICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRTY29wZWRBcmd1bWVudHNMb2FkOwotICAgICAg
ICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU3RyaW5nTG9hZDsKLSAgICAgICAgZWxzZSBpZiAo
aXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkg
ewotICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDg6Ci0gICAgICAgICAgICAgICAg
YWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKLSAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OExv
YWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50OENs
YW1wZWQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5VWludDhDbGFtcGVkTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgVHlwZUludDE2OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2TG9hZDsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlSW50MzI6Ci0gICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgotICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVp
bnQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVG
bG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUZsb2F0MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDY0TG9hZDsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWlu
dDY0QXJyYXkgaW4gSUMKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjExODMKLSAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgotICAg
ICAgICAgICAgY2FzZSBUeXBlQmlnVWludDY0OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5
cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrOwotICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1No
YXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRJbnQzMkxvYWQ7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgotICAgICAgICAgICAgICAgIGFj
Y2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlTG9hZDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQ29udGlndW91c0xvYWQ7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgot
ICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9y
YWdlTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKLQot
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6R2V0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9P
ck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1
YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29k
ZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICByZXR1cm4g
cmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRl
cjsKLX0KLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKHRyeUNhY2hlQXJyYXlH
ZXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvKSA9
PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oY29u
c3QgUHV0UHJvcGVydHlTbG90ICZzbG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1
dEtpbmQpCi17Ci0gICAgc3dpdGNoIChwdXRCeUtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5S2luZDo6
QnlJZDogewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5k
OjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdDsKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0OwotICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQ
cml2YXRlRmllbGRTdHJpY3Q7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDog
ewotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3RE
aXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljOwotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmlj
OwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2Vu
ZXJpYzsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Ci0g
ICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmljOwotICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZh
bFNldFByaXZhdGVGaWVsZEdlbmVyaWM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIH0KLSAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGlj
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlG
dW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQs
IFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgewotICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeUlkOgotICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
OwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGREZWZpbmU6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
LSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgotICAgICAg
ICBzd2l0Y2ggKHB1dEtpbmQpIHsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Ci0g
ICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdDoKLSAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7
Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAg
ICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgotICAgICAgICAgICAgQVNTRVJUKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0
UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIC8vIE1ha2Ugd2luIHBvcnQgY29tcGlsZXIgaGFwcHkKLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtp
bmQsIFB1dEtpbmQgcHV0S2luZCkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVu
dCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgewot
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCBnbG9iYWxPYmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9i
YWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkg
JiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5pc0NhY2hlYWJsZVNldHRlcigp
KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCB0cnkgdG8gZG8gc29tZXRoaW5nIHNtYXJ0ZXIgaGVyZS4uLgotICAgICAgICBp
ZiAoaXNDb3B5T25Xcml0ZShvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAvLyBXZSBjYW4ndCBlbmQgdXAgc3Rv
cmluZyB0byBhIENvVyBvbiB0aGUgcHJvdG90eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBvd24gcHJv
cGVydGllcy4KLSAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHNsb3QuYmFzZSgpLT5pbmRl
eGluZ01vZGUoKSkpOwotCi0gICAgICAgIGlmICghb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotCi0gICAgICAg
IGJvb2wgaXNQcm94eSA9IGZhbHNlOwotICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQ
dXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICAgICAgYmFzZUNlbGwgPSBqc0Nhc3Q8
SlNQcm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICBiYXNlVmFsdWUgPSBi
YXNlQ2VsbDsKLSAgICAgICAgICAgIGlzUHJveHkgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBX
ZSBjdXJyZW50bHkgb25seSBjYWNoZSBSZXBsYWNlIGFuZCBKUy9DdXN0b20gU2V0dGVycyBvbiBK
U1Byb3h5LiBXZSBkb24ndAotICAgICAgICAgICAgLy8gY2FjaGUgdHJhbnNpdGlvbnMgYmVjYXVz
ZSBnbG9iYWwgb2JqZWN0cyB3aWxsIG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0cnVjdHVyZQotICAg
ICAgICAgICAgLy8gaW4gb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICAgICBi
b29sIGlzQ2FjaGVhYmxlUHJveHkgPSAoc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNsb3QudHlw
ZSgpID09IFB1dFByb3BlcnR5U2xvdDo6RXhpc3RpbmdQcm9wZXJ0eSkKLSAgICAgICAgICAgICAg
ICB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkKLSAgICAgICAgICAgICAgICB8fCBzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCk7Ci0gICAgICAgICAgICBpZiAoIWlzQ2FjaGVhYmxlUHJveHkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaXNQcm94eSAmJiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQgfHwgcHV0S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpKQotICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgUmVmUHRyPEFjY2Vzc0Nh
c2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBz
bG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQ
dXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGFzc2VydCBoZWxwcyBjYXRjaCBidWdzIGlmIHdlIGFjY2lkZW50YWxseSBmb3JnZXQgdG8g
ZGlzYWJsZSBjYWNoaW5nCi0gICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSB0cmFuc2l0aW9uIHRo
ZW4gc3RvcmUgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkuIFRoaXMgaXMgY29tbW9uIGFtb25nCi0g
ICAgICAgICAgICAgICAgLy8gcGF0aHMgdGhhdCByZWlmeSBsYXp5IHByb3BlcnRpZXMuIElmIHdl
IHJlaWZ5IGEgbGF6eSBwcm9wZXJ0eSBhbmQgZm9yZ2V0Ci0gICAgICAgICAgICAgICAgLy8gdG8g
ZGlzYWJsZSBjYWNoaW5nLCB3ZSBtYXkgY29tZSBkb3duIHRoaXMgcGF0aC4gVGhlIFJlcGxhY2Ug
SUMgZG9lcyBub3QKLSAgICAgICAgICAgICAgICAvLyBrbm93IGhvdyB0byBtb2RlbCB0aGVzZSB0
eXBlcyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKG9yIGFueSBzdHJ1Y3R1cmUKLSAgICAgICAg
ICAgICAgICAvLyB0cmFuc2l0aW9uIGZvciB0aGF0IG1hdHRlcikuCi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG9sZFN0
cnVjdHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVy
dHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNl
dAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQot
ICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9j
a2VyLCBjb2RlQmxvY2ssIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwg
b2xkU3RydWN0dXJlLCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLCBpc1Byb3h5KTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQ
cm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3Qo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgb2xkIHN0cnVjdHVyZSBpcyBkaWN0aW9uYXJ5LCBpdCBtZWFucyB0
aGF0IHRoaXMgaXMgb25lLW9uLW9uZSBiZXR3ZWVuIGFuIG9iamVjdCBhbmQgYSBzdHJ1Y3R1cmUu
Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBOZXdQcm9wZXJ0eSBvcGVyYXRpb24sIGdl
bmVyYXRpbmcgSUMgZm9yIHRoaXMgZG9lcyBub3Qgb2ZmZXIgYW55IGJlbmVmaXQgYmVjYXVzZSB0
aGlzIHRyYW5zaXRpb24gbmV2ZXIgaGFwcGVucyBhZ2Fpbi4KLSAgICAgICAgICAgICAgICBpZiAo
b2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dDsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRT
dHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpOb25lKSwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVy
ZSB8fCAhbmV3U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgSlNPYmplY3Q6OnB1dCBpcyBvdmVycmlkZGVuIGJ5IFVzZXJPYmplY3QsIFVzZXJPYmpl
Y3Q6OnB1dCBwZXJmb3JtcyBzaWRlLWVmZmVjdCBvbiBKU09iamVjdDo6cHV0LCBhbmQgaXQgbmVn
bGVjdHMgdG8gbWFyayB0aGUgUHV0UHJvcGVydHlTbG90IGFzIG5vbi1jYWNoYWVibGUsCi0gICAg
ICAgICAgICAgICAgLy8gdGhlbiBhcmJpdHJhcnkgc3RydWN0dXJlIHRyYW5zaXRpb25zIGNhbiBo
YXBwZW4gZHVyaW5nIHRoZSBwdXQgb3BlcmF0aW9uLCBhbmQgdGhpcyBnZW5lcmF0ZXMgd3Jvbmcg
dHJhbnNpdGlvbiBpbmZvcm1hdGlvbiBoZXJlIGFzIGlmIG9sZFN0cnVjdHVyZSAtPiBuZXdTdHJ1
Y3R1cmUuCi0gICAgICAgICAgICAgICAgLy8gSW4gcmVhbGl0eSwgdGhlIHRyYW5zaXRpb24gaXMg
b2xkU3RydWN0dXJlIC0+IHNvbWV0aGluZyB1bmtub3duIHN0cnVjdHVyZXMgLT4gYmFzZVZhbHVl
J3Mgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIC8vIFRvIGd1YXJkIGFnYWluc3QgdGhlIGVt
YmVkZGVyJ3MgcG90ZW50aWFsbHkgaW5jb3JyZWN0IFVzZXJPYmplY3Q6OnB1dCBpbXBsZW1lbnRh
dGlvbiwgd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbiBhbmQgaWYgZm91bmQsIGFu
ZCBnaXZlIHVwIG9uIGNhY2hpbmcgdGhlIHB1dC4KLSAgICAgICAgICAgICAgICBBU1NFUlQoYmFz
ZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG5ld1N0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSAhPSBuZXdTdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVj
dHVyZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNz
Q2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotICAgICAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAgICBpZiAocHV0S2lu
ZCA9PSBQdXRLaW5kOjpOb3REaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNo
ZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwg
bnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAg
ICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNy
ZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBudWxscHRyKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0s
IGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGlkZW50LmlzUHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVRyYW5zaXRpb24o
dm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBvZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBzdHVi
SW5mbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJs
ZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgewotICAgICAgICAgICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewotICAgICAgICAgICAgICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UG9s
eVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwotCi0gICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgd2UncmUgYSBzZWxmIGN1c3RvbSwgc2lu
Y2Ugd2UgbXVzdCBkaXNhbGxvdyBkaWN0aW9uYXJpZXMKLSAgICAgICAgICAgICAgICAvLyBiZWNh
dXNlIHdlIG5lZWQgdG8gYmUgaW5mb3JtZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ug
d2UgY2FjaGUgdGhlIGNvbnN0YW50Ci0gICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24gcG9pbnRl
ci4KLSAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2Fj
aGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9B
Y2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVB
Y2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25T
ZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9s
ZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3Vz
dG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNz
Q2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLAotICAg
ICAgICAgICAgICAgICAgICBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJv
dG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5LCBzbG90LmN1c3RvbVNldHRlcigpLnJldGFnZ2Vk
PEN1c3RvbUFjY2Vzc29yUHRyVGFnPigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90
LmJhc2UoKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKTsKLSAgICAgICAgICAgICAgICBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAgICAgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9i
YWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0
aW9uYXJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
LQotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3Rv
QWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2Uo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9mZnNldCA9IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2
bSwgYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSkpLT5nZXQodm0sIGlkZW50LmltcGwoKSwgYXR0cmli
dXRlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSB8fCAhKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nl
c3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQg
PSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVy
ZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3NvcikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlv
blNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0
LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0
QnlBZGRBY2Nlc3NDYXNlLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQgPSBzdHViSW5m
by5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNT
dHJpY3RNb2RlKCkgPyBFQ01BTW9kZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHBy
b3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5l
cmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVw
bGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOwotCi0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBj
b2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygp
ID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoUHV0
QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQp
Ci17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAg
IAotICAgIGlmICh0cnlDYWNoZVB1dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFs
dWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5k
LCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oc2xv
dCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQpCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXND
ZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFpbmRleC5p
c0ludDMyKCkpCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7
Ci0KLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLQot
ICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Ci0gICAgICAgIGlmIChp
c1R5cGVkVmlldyhiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlSW50ODoKLSAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKLSAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0
b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlVWludDhD
bGFtcGVkOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBUeXBlSW50MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFj
Y2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MTZTdG9yZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZVVpbnQxNjoKLSAgICAgICAgICAgICAgICBhY2Nl
c3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDMyOgotICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3Rv
cmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6
Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDMyU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFR5cGVGbG9hdDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkVHlwZWRBcnJheUZsb2F0MzJTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NFN0b3JlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkg
LyBCaWdVaW50NjRBcnJheSBpbiBJQwotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MwotICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50
NjQ6Ci0gICAgICAgICAgICBjYXNlIFR5cGVCaWdVaW50NjQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmlu
ZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2s7Ci0gICAgICAgICAgICBzd2l0Y2ggKGlu
ZGV4aW5nU2hhcGUpIHsKLSAgICAgICAgICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgICAg
ICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgotICAgICAgICAg
ICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAg
ICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNT
dG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9y
YWdlU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4
ZWRBcnJheVN0b3JhZ2VTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKLQotICAgICAgICBpZiAocmVzdWx0Lmdl
bmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlS
ZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVy
KCkpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAg
ICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
aXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9j
aywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVw
T25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQXJyYXlQdXRCeVZh
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1
dEtpbmQgcHV0S2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17Ci0gICAgaWYgKHRyeUNhY2hlQXJy
YXlQdXRCeVZhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZv
LCBwdXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZh
bE5vblN0cmljdEdlbmVyaWMpKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQot
ewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IHJlc3VsdDsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAg
ICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotCi0gICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOwotICAgICAgICBp
ZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpIHx8ICFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSB8fCBvbGRTdHJ1Y3R1cmUtPmlzUHJveHkoKSkKLSAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZURl
bGV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgaWYg
KGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aGFzQmVlbkZsYXR0
ZW5lZEJlZm9yZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAgICAganNDYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKS0+ZmxhdHRlbkRpY3Rpb25hcnlP
YmplY3Qodm0pOwotICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChvbGRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLQotICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4g
bmV3Q2FzZTsKLQotICAgICAgICBpZiAoc2xvdC5pc0RlbGV0ZUhpdCgpKSB7Ci0gICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwotICAgICAgICAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNp
dGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZS51aWQoKSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJl
KQotICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgICAgICBp
ZiAoIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG5ld1N0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0gICAgICAgICAgICBBU1NFUlQobmV3T2Zmc2V0ID09IHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9s
ZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9u
S2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsKLSAgICAgICAgICAg
IEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQobmV3T2Zmc2V0KSk7Ci0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlRGVsZXRlKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgbmV3T2Zmc2V0LCBv
bGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc05v
bmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoZWNtYU1vZGUuaXNTdHJpY3QoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxl
dGVOb25Db25maWd1cmFibGUsIHByb3BlcnR5TmFtZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0
dXJlLCB7IH0sIG51bGxwdHIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5ld0Nhc2Ug
PSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTWlz
cywgcHJvcGVydHlOYW1lLCBpbnZhbGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0
cik7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBlY21hTW9kZSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5l
d0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwotICAg
ICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
ZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxv
Y2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2
ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoRGVsZXRlQnko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0
ZVByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBEZWxCeUtpbmQga2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCi17Ci0gICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZURlbGV0ZUJ5KGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBzbG90LCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlO
YW1lLCBzdHViSW5mbywga2luZCwgZWNtYU1vZGUpID09IEdpdmVVcE9uQ2FjaGUpIHsKLSAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZVZhbHVlLmNs
YXNzSW5mb09yTnVsbChnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAgICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6
QnlJZCkKLSAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uRGVsZXRlQnlJZEdlbmVyaWMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsR2VuZXJpYyk7Ci0gICAgfQotfQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkK
LXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgotICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlW
YWw6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgY2FzZSBJ
bkJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRl
TmFtZU9wdGltaXplOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi1pbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVy
aWNJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAg
ICBjYXNlIEluQnlLaW5kOjpCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkR2Vu
ZXJpYzsKLSAgICBjYXNlIEluQnlLaW5kOjpCeVZhbDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkluQnlWYWxHZW5lcmljOwotICAgIGNhc2UgSW5CeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVHZW5lcmljOwotICAgIH0KLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVJbkJ5KAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUsCi0gICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0Owot
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5h
bWUudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShn
bG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0
eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5jZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKHdhc0ZvdW5kKSB7Ci0gICAgICAg
ICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPFBv
bHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICBpZiAod2FzRm91bmQp
IHsKLSAgICAgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwo
dm0sIGJhc2UpOwotICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgICAgICAvLyBPcHRpbWl6ZSBz
ZWxmIGFjY2Vzcy4KLSAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNo
ZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkK
LSAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQotICAgICAgICAgICAg
ICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQotICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1
cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAgIGJv
b2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mbywgb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwotICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby5pbml0SW5CeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBi
YXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVTdGF0dXMtPmZsYXR0ZW5lZERpY3Rpb25hcnkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVz
ZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4g
PSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xv
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlw
ZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0g
bnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBp
ZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgp
IHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JD
YWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoIWNh
Y2hlU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAg
ICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAg
ICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUo
Z2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlw
ZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hh
aW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKLQotICAgICAgICBSZWY8QWNjZXNzQ2Fz
ZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHBy
b3BlcnR5TmFtZSwgd2FzRm91bmQgPyBzbG90LmNhY2hlZE9mZnNldCgpIDogaW52YWxpZE9mZnNl
dCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4p
KTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBX
VEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2Rl
KCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwot
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAg
IGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQotICAgICAgICAgICAgICAgIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0K
LXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLQotICAgIGlmICh0cnlDYWNoZUluQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvLCBr
aW5kKSA9PSBHaXZlVXBPbkNhY2hlKSB7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBs
YWNlV2l0aEdlbmVyaWMsIGJhc2VPYmplY3QtPmNsYXNzSW5mbyhnbG9iYWxPYmplY3QtPnZtKCkp
LCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7Ci0gICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5l
cmljSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZp
ZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgYnJhbmRJRC51aWQoKSk7Ci0KLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgaWYgKGZvcmNl
SUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLQotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7
Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwg
YmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAg
ICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOwot
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nh
c2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgd2FzRm91bmQg
PyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgYnJhbmRJRCwgaW52YWxp
ZE9mZnNldCwgc3RydWN0dXJlLCB7IH0sIHsgfSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1Yklu
Zm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9k
ZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2FzZSkpOwotCi0gICAgICAgIGlmIChy
ZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpJblJlcGxhY2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFz
ZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkp
OwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RV
c2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBj
b2RlQmxvY2ssIHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygp
ID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoSGFz
UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElE
LCBib29sIHdhc0ZvdW5kLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotCi0gICAgaWYgKHRyeUNh
Y2hlSGFzUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBi
cmFuZElELCB3YXNGb3VuZCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kR2VuZXJpYyk7Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUNo
ZWNrUHJpdmF0ZUJyYW5kKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFu
ZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0g
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlk
KCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxP
YmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAgIElubGlu
ZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICBp
ZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsK
LQotICAgICAgICBib29sIGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAgTE9HX0lDKChJ
Q0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZEFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNl
PiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlQ2hlY2tQcml2YXRlQnJhbmQodm0sIGNvZGVC
bG9jaywgYnJhbmRJRCwgc3RydWN0dXJlKTsKLQotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5h
ZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpz
dHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNo
ZWNrUHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJ
bkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwg
c3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHQuc2hvdWxk
R2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lk
IHJlcGF0Y2hDaGVja1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50
aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVy
U2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNo
ZUNoZWNrUHJpdmF0ZUJyYW5kKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBi
cmFuZElELCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdl
bmVyaWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVTZXRQcml2YXRl
QnJhbmQoCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpTT2JqZWN0KiBiYXNlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxl
SWRlbnRpZmllciBicmFuZElELAotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsK
LSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewotICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlD
RmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlKTsKLQotICAgICAgICBpZiAo
b2xkU3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7Ci0KLSAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9y
Q2VsbCh2bSwgYmFzZSk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0g
ICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OnNldEJyYW5kVHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0
cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGJyYW5kSUQudWlkKCkpOwotICAgICAg
ICBpZiAoIW5ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
Ci0gICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZp
b3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50
cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpTZXRCcmFuZCk7Ci0gICAgICAgIEFT
U0VSVChuZXdTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBp
c0Jhc2VQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0
ZUJyYW5kQWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlz
QmFzZVByb3BlcnR5KSk7Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjpjcmVhdGVTZXRQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgb2xk
U3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFk
ZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0
cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0
UHJpdmF0ZUJyYW5kUmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgaXNCYXNlUHJvcGVydHkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJ
Zk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKLSAgICAKLSAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKLX0KLQotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNoZVNldFByaXZhdGVCcmFuZChn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCAgYnJhbmRJ
RCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kR2VuZXJpYyk7
Ci19Ci0KLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluc3RhbmNlT2YoCi0gICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLAotICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUKHZhbHVlVmFsdWUuaXNDZWxsKCkpOyAvLyBzaG91bGRDb25zaWRlckNh
Y2hpbmcgcmVqZWN0cyBub24tY2VsbHMuCi0gICAgCi0gICAgaWYgKGZvcmNlSUNGYWlsdXJlKGds
b2JhbE9iamVjdCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIAotICAgIHsK
LSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
aywgdm0pOwotICAgICAgICAKLSAgICAgICAgSlNDZWxsKiB2YWx1ZSA9IHZhbHVlVmFsdWUuYXND
ZWxsKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUtPnN0cnVjdHVyZSh2
bSk7Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwotICAgICAgICBKU09iamVj
dCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBwcm90b3R5cGVWYWx1
ZSk7Ci0gICAgICAgIGlmIChwcm90b3R5cGUpIHsKLSAgICAgICAgICAgIGlmICghanNEeW5hbWlj
Q2FzdDxKU09iamVjdCo+KHZtLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0g
SW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsIHN0cnVjdHVyZSwgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5wcm90b3R5cGVRdWVyaWVzQXJlQ2FjaGVh
YmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGVhY2ggdGhpcyB0byBkbyBwb2x5
IHByb3RvLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODU2NjMKLSAgICAgICAgICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5n
KGdsb2JhbE9iamVjdCwgdmFsdWUsIHdhc0ZvdW5kID8gcHJvdG90eXBlIDogbnVsbHB0cik7Ci0g
ICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0g
Z2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKLSAgICAgICAgICAgICAgICAgICAgdm0s
IGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZSwgd2FzRm91bmQp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbnN0YW5jZU9mSGl0IDogQWNjZXNzQ2FzZTo6
SW5zdGFuY2VPZk1pc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgcHJvdG90eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbmV3Q2FzZSkKLSAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5z
dGFuY2VPZkdlbmVyaWMsIENhY2hlYWJsZUlkZW50aWZpZXIoKSk7Ci0gICAgICAgIAotICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6Okluc3RhbmNlT2ZBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHN0
dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNN
QU1vZGU6OnN0cmljdCgpLCBudWxscHRyLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBJZGVudGlmaWVyKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgp
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJT
dHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNh
Y2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCi0gICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1
ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAot
ICAgIGJvb2wgd2FzRm91bmQpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwotICAgIGlmICh0cnlDYWNoZUluc3RhbmNlT2YoZ2xvYmFsT2JqZWN0LCBj
b2RlQmxvY2ssIHZhbHVlVmFsdWUsIHByb3RvdHlwZVZhbHVlLCBzdHViSW5mbywgd2FzRm91bmQp
ID09IEdpdmVVcE9uQ2FjaGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMpOwotfQotCi1zdGF0aWMgdm9p
ZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCi17Ci0gICAgY2Fs
bExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29kZSgpLnRlbXBs
YXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rU2xv
d1BhdGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IpCi17Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdm0u
Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsK
LX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAg
ICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNh
bGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwg
dmlydHVhbFRodW5rKSk7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlND
ZWxsKiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIC8vIEVhY2ggV2Vi
QXNzZW1ibHkuSW5zdGFuY2Ugc2hhcmVzIHRoZSBzdHVicyBmcm9tIHRoZWlyIFdlYkFzc2VtYmx5
Lk1vZHVsZSwgd2hpY2ggYXJlIHRoZXJlZm9yZSB0aGUgYXBwcm9wcmlhdGUgb3duZXIuCi0gICAg
cmV0dXJuIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2FsbGVlKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGNhbGxlZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi19Ci0K
LXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbCgKLSAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxv
Y2ssCi0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKLQot
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0g
ICAgLy8gT3VyIGNhbGxlciBtdXN0IGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxs
aW5nCi0gICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2Vs
bC4KLSAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQotICAgIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotCi0g
ICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9j
ay4KLSAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseU1vZHVsZShjYWxsZXJGcmFtZS0+
Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVl
KCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFTU0VSVChvd25lcik7Ci0KLSAg
ICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0
TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUsIGNvZGVQdHIpOwotICAgIGNhbGxM
aW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7Ci0KLSAgICBpZiAo
c2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCi0gICAgICAgIGRhdGFM
b2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNh
bGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVC
bG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7Ci0KLSAgICBpZiAoY2Fs
bGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwo
Y2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8pOwotCi0gICAgaWYgKGNhbGxMaW5rSW5mby5zcGVj
aWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVi
cygpKSB7Ci0gICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5
bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci19Ci0KLXZvaWQgbGlua0RpcmVj
dENhbGwoCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKLXsKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5z
dHViKCkpOwotICAgIAotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKLQotICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKLSAg
ICAKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0lu
Zm8uc2V0Q29kZUJsb2NrKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGpzQ2FzdDxGdW5jdGlvbkNvZGVC
bG9jayo+KGNhbGxlZUNvZGVCbG9jaykpOwotICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlG
b3IoY2FsbGVyQ29kZUJsb2NrKSkKLSAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIs
IEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9jaywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBh
dCAiLCBjb2RlUHRyLCAiXG4iKTsKLQotICAgIGNhbGxMaW5rSW5mby5zZXREaXJlY3RDYWxsVGFy
Z2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKLQotICAgIGlm
IChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5n
Q2FsbChjYWxsRnJhbWUsICZjYWxsTGlua0luZm8pOwotfQotCi12b2lkIGxpbmtTbG93Rm9yKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29k
ZUJsb2NrKCk7Ci0gICAgVk0mIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAg
IGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCi1zdGF0aWMgdm9pZCByZXZlcnRD
YWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKLXsKLSAgICBpZiAoY2FsbExpbmtJ
bmZvLmlzRGlyZWN0KCkpIHsKLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29kZUJsb2NrKCk7
Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkpCi0gICAgICAg
ICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7Ci0gICAgICAg
ICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKLQotICAgICAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLnJldmVydENhbGxUb1N0dWIoKTsKLSAgICAgICAgfQotICAgICAgICBjYWxsTGlua0luZm8u
Y2xlYXJDYWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJvdGgg
Zm9yIGRhdGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgotICAgIH0KLSAgICBjYWxsTGlua0luZm8u
Y2xlYXJTZWVuKCk7Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOwotICAgIGNhbGxMaW5r
SW5mby5jbGVhclNsb3dTdHViKCk7Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQot
ICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgdW5saW5rQ2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9p
bnRlcigmY2FsbExpbmtJbmZvKSk7Ci0gICAgCi0gICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJ
bmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsK
LSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2so
KTsKLQotICAgIGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2Rl
QmxvY2spLAotICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmln
aW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7Ci0KLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9
IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKLSAgICByZXZlcnRDYWxsKHZtLCBj
YWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExpbmtJbmZvLnNldFNsb3dTdHVi
KEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1bmspKTsKLSAgICBj
YWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwotfQotCi1uYW1lc3BhY2Ugewotc3Ry
dWN0IENhbGxUb0NvZGVQdHIgewotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotfTsKLX0gLy8gYW5u
b255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VChjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKTsKLQotICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotCi0gICAgLy8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBsaW5rUG9seW1vcnBoaWNDYWxs
LCB3ZSBzdHJvbmdseSBhc3N1bWUgdGhhdCB3ZSBuZXZlciBkbyBHQy4KLSAgICAvLyBHQyBqZXR0
aXNvbnMgQ29kZUJsb2NrcywgY2hhbmdlcyBDYWxsTGlua0luZm8gZXRjLiBhbmQgYnJlYWtzIGFz
c3VtcHRpb24gZG9uZSBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgY2FsbC4KLSAgICBEZWZlckdDRm9y
QVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUodm0pOwotICAgIAotICAgIGlmICghbmV3VmFyaWFudCkg
ewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gT3VyIGNhbGxlciBtdXN0IGJlIGhhdmUg
YSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9tIFdhc20s
IHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVyRnJhbWUt
PmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0g
Y2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGJvb2wgaXNXZWJBc3NlbWJseSA9IGlzV2Vi
QXNzZW1ibHlNb2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKTsKLQotICAgIC8v
IFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBDb2RlQmxvY2suCi0g
ICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxl
ckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7Ci0gICAgQVNTRVJU
KG93bmVyKTsKLQotICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OwotICAgIGlmIChQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkpCi0gICAgICAgIGxp
c3QgPSBzdHViLT52YXJpYW50cygpOwotICAgIGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUg
PSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCi0gICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3Qg
eyBDYWxsVmFyaWFudChvbGRDYWxsZWUpIH07Ci0gICAgCi0gICAgbGlzdCA9IHZhcmlhbnRMaXN0
V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgYW55
IGNsb3N1cmUgY2FsbHMgdGhlbiBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCBhbGwgb2YgdGhlbSBh
cyBjbG9zdXJlIGNhbGxzLgotICAgIC8vIFRoaXMgbWFrZXMgc3dpdGNoaW5nIG9uIGNhbGxlZSBj
aGVhcGVyLiBJdCBhbHNvIHByb2R1Y2VzIHByb2ZpbGluZyB0aGF0J3MgZWFzaWVyIG9uIHRoZSBE
Rkc7Ci0gICAgLy8gdGhlIERGRyBkb2Vzbid0IHJlYWxseSB3YW50IHRvIGRlYWwgd2l0aCBhIGNv
bWJpbmF0aW9uIG9mIGNsb3N1cmUgYW5kIG5vbi1jbG9zdXJlIGNhbGxlZXMuCi0gICAgYm9vbCBp
c0Nsb3N1cmVDYWxsID0gZmFsc2U7Ci0gICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlz
dCkgIHsKLSAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7Ci0gICAgICAgICAg
ICBsaXN0ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChsaXN0KTsKLSAgICAgICAgICAgIGlzQ2xv
c3VyZUNhbGwgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpCi0gICAgICAgIGNhbGxMaW5rSW5mby5zZXRIYXNT
ZWVuQ2xvc3VyZSgpOwotICAgIAotICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxs
Q2FzZXM7Ci0gICAgVmVjdG9yPGludDY0X3Q+IGNhc2VWYWx1ZXM7Ci0gICAgCi0gICAgLy8gRmln
dXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCi0gICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50
IDogbGlzdCkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7Ci0gICAg
ICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSAmJiAhdmFyaWFudC5leGVjdXRhYmxlKCktPmlz
SG9zdEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
ID0gdmFyaWFudC5leGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKLSAg
ICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGVpdGhlciBiZWNhdXNl
IHdlIGRvbid0IGhhdmUgYSBDb2RlQmxvY2sgb3IgYmVjYXVzZSBhcml0eSBtaXNtYXRjaCwKLSAg
ICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlzIHdob2xlIHRoaW5n
IHRvIGJlIGEgdmlydHVhbCBjYWxsLgotICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2sgfHwgY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90
Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmlzVmFyYXJncygp
KSB7Ci0gICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExp
bmtJbmZvKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpbnQ2NF90IG5ld0Nhc2VWYWx1ZSA9IDA7Ci0gICAgICAgIGlmIChpc0Ns
b3N1cmVDYWxsKSB7Ci0gICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJlIGNh
bGwuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc5MzExCi0gICAgICAgICAgICBpZiAoIW5ld0Nhc2VWYWx1ZSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBmdW5j
dGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUg
PSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBuZXdDYXNlVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhcmlh
bnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChBU1NFUlRf
RU5BQkxFRCkgewotICAgICAgICAgICAgaWYgKGNhc2VWYWx1ZXMuY29udGFpbnMobmV3Q2FzZVZh
bHVlKSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkVSUk9SOiBBdHRlbXB0IHRvIGFkZCBk
dXBsaWNhdGUgY2FzZSB2YWx1ZS5cbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIkV4aXN0
aW5nIGNhc2UgdmFsdWVzOiAiKTsKLSAgICAgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7
Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGNhc2VWYWx1ZXMpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8gYWRkOiAi
LCBuZXdDYXNlVmFsdWUsICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhbnQg
bGlzdDogIiwgbGlzdER1bXAoY2FsbENhc2VzKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGNhbGxDYXNlcy5hcHBlbmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50LCBjb2Rl
QmxvY2spKTsKLSAgICAgICAgY2FzZVZhbHVlcy5hcHBlbmQobmV3Q2FzZVZhbHVlKTsKLSAgICB9
Ci0gICAgQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FzZVZhbHVlcy5zaXplKCkpOwotCi0g
ICAgLy8gSWYgd2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBqdXN0IHVzZSBhIG5vcm1hbCB2aXJ0dWFs
IGNhbGwuCi0gICAgdW5zaWduZWQgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplOwot
ICAgIGlmIChpc1dlYkFzc2VtYmx5KQotICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50
TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JX
ZWJBc3NlbWJseVRvSlMoKTsKLSAgICBlbHNlIGlmIChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUo
KSA9PSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCi0gICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZh
cmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6
ZUZvclRvcFRpZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlh
bnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSgp
OwotCi0gICAgLy8gV2UgdXNlIGxpc3Quc2l6ZSgpIGluc3RlYWQgb2YgY2FsbENhc2VzLnNpemUo
KSBiZWNhdXNlIHdlIHJlc3BlY3QgQ2FsbFZhcmlhbnQgc2l6ZSBmb3Igbm93LgotICAgIGlmIChs
aXN0LnNpemUoKSA+IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSkgewotICAgICAg
ICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+IGNhbGxzKGNhbGxDYXNl
cy5zaXplKCkpOwotICAgIFVuaXF1ZUFycmF5PHVpbnQzMl90PiBmYXN0Q291bnRzOwotCi0gICAg
aWYgKCFpc1dlYkFzc2VtYmx5ICYmIGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENv
ZGU6OnRvcFRpZXJKSVQoKSkgewotICAgICAgICBmYXN0Q291bnRzID0gbWFrZVVuaXF1ZUFycmF5
PHVpbnQzMl90PihjYWxsQ2FzZXMuc2l6ZSgpKTsKLSAgICAgICAgbWVtc2V0KGZhc3RDb3VudHMu
Z2V0KCksIDAsIGNhbGxDYXNlcy5zaXplKCkgKiBzaXplb2YodWludDMyX3QpKTsKLSAgICB9Ci0g
ICAgCi0gICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxMaW5rSW5mby5jYWxsZWVHUFIoKTsKLQot
ICAgIGJvb2wgaXNEYXRhSUMgPSBjYWxsTGlua0luZm8uaXNEYXRhSUMoKTsKLSAgICBDQ2FsbEhl
bHBlcnMgc3R1YkppdChjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxGcmFtZVNodWZmbGVyPiBmcmFtZVNodWZmbGVyOwotICAgIGlmIChjYWxsTGlua0luZm8uZnJh
bWVTaHVmZmxlRGF0YSgpKSB7Ci0gICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8uaXNUYWlsQ2Fs
bCgpKTsKLSAgICAgICAgZnJhbWVTaHVmZmxlciA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZXI+KHN0dWJKaXQsICpjYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSgpKTsKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0
aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLCBhbmQgd2UgY2FuCi0gICAgICAgIC8vIHVzZSB0aGUg
YWRkaXRpb25hbCByZWdpc3RlciB0aGlzIGJ1eXMgdXMuCi0gICAgICAgIGZyYW1lU2h1ZmZsZXIt
PmFzc3VtZUNhbGxlZUlzQ2VsbCgpOwotI2VuZGlmCi0gICAgICAgIGZyYW1lU2h1ZmZsZXItPmxv
Y2tHUFIoY2FsbGVlR1BSKTsKLSAgICB9Ci0KLSAgICBHUFJSZWcgY29tcGFyaXNvblZhbHVlR1BS
OwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgIGlmIChmcmFtZVNodWZmbGVyKQot
ICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQ
UigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBBc3Nl
bWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwotCi0gICAgR1BSUmVnIGZhc3RD
b3VudHNCYXNlR1BSOwotICAgIGlmIChmcmFtZVNodWZmbGVyKQotICAgICAgICBmYXN0Q291bnRz
QmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgZmFzdENvdW50c0Jhc2VHUFIgPQotICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxl
Y3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdU
Myk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
ZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKLQotICAgIGlmICghZnJhbWVT
aHVmZmxlciAmJiBjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgIC8vIFdlIHN0
cm9uZ2x5IGFzc3VtZSB0aGF0IGNhbGxlZUdQUiBpcyBub3QgYSBjYWxsZWUgc2F2ZSByZWdpc3Rl
ciBpbiB0aGUgc2xvdyBwYXRoLgotICAgICAgICBBU1NFUlQoIWNhbGxlckNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpLT5maW5kKGNhbGxlZUdQUikpOwotICAgICAgICBzdHViSml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICB9Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dQYXRoOwotICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgIC8vIFZlcmlm
eSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUgaW4gc2Ny
YXRjaEdQUi4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlz
VGFpbENhbGwoKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElm
Tm90Q2VsbChjYWxsZWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2Fs
bGVlR1BSKSk7Ci0jZWxzZQotICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tl
ZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgotI2VuZGlmCi0gICAgICAgIC8vIEZJWE1FOiBX
ZSBjb3VsZCBhZGQgYSBmYXN0IHBhdGggZm9yIEludGVybmFsRnVuY3Rpb24gd2l0aCBjbG9zdXJl
IGNhbGwuCi0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaElmTm90RnVuY3Rp
b24oY2FsbGVlR1BSKSk7Ci0KLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURh
dGEoKSksIGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9
IHN0dWJKaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGNvbXBhcmlzb25WYWx1
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
KTsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjb21wYXJp
c29uVmFsdWVHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBjb21wYXJpc29uVmFsdWVHUFIpOwotICAgICAgICBoYXNF
eGVjdXRhYmxlLmxpbmsoJnN0dWJKaXQpOwotICAgIH0KLQotICAgIEJpbmFyeVN3aXRjaCBiaW5h
cnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6Oklu
dFB0cik7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwotICAgIHdoaWxlIChiaW5h
cnlTd2l0Y2guYWR2YW5jZShzdHViSml0KSkgewotICAgICAgICBzaXplX3QgY2FzZUluZGV4ID0g
YmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOwotICAgICAgICAKLSAgICAgICAgQ2FsbFZhcmlhbnQg
dmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKLSAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgICAg
ICBpZiAodmFyaWFudC5leGVjdXRhYmxlKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
LmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwgY2FsbExpbmtJbmZvLnNwZWNp
YWxpemF0aW9uS2luZCgpLCB2YXJpYW50LmZ1bmN0aW9uKCkpOwotICAgICAgICAgICAgaWYgKCFj
b2RlUHRyKQotICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+
Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJl
cXVpcmVkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lmlu
dGVybmFsRnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJu
YWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBpZiAoZmFzdENvdW50cykgewotICAgICAgICAgICAgc3R1YkppdC5hZGQzMigK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKLSAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNhc2VJbmRl
eCAqIHNpemVvZih1aW50MzJfdCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbmVlZHNE
b25lSnVtcCA9IGZhbHNlOwotICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikgewotICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+c25hcHNob3QoKSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwg
PSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2UgaWYgKGNhbGxMaW5rSW5m
by5pc1RhaWxDYWxsKCkpIHsKLSAgICAgICAgICAgIHN0dWJKaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwotICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFy
VGFpbENhbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc0RhdGFJQykK
LSAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWls
Q2FsbCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2FsbHNbY2FzZUlu
ZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIG5lZWRzRG9u
ZUp1bXAgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhbGxzW2Nh
c2VJbmRleF0uY29kZVB0ciA9IGNvZGVQdHI7Ci0gICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKQot
ICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgIH0KLSAgICAKLSAg
ICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKLSAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2go
KS5saW5rKCZzdHViSml0KTsKLQotICAgIGlmIChmcmFtZVNodWZmbGVyKSB7Ci0gICAgICAgIGZy
YW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY2FsbGVlR1BSKTsKLSAgICAgICAgZnJhbWVTaHVmZmxl
ci0+cmVsZWFzZUdQUihjb21wYXJpc29uVmFsdWVHUFIpOwotICAgICAgICBmcmFtZVNodWZmbGVy
LT5yZWxlYXNlR1BSKGZhc3RDb3VudHNCYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKLSNlbHNlCi0gICAgICAgIGZyYW1lU2h1
ZmZsZXItPnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7
Ci0jZW5kaWYKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cHJlcGFyZUZvclNsb3dQYXRoKCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVn
VDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwot
I2VuZGlmCi0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwotICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
LSAgICBpZiAoaXNEYXRhSUMgJiYgIWNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKLSAgICAg
ICAgLy8gV2Ugd2VyZSBjYWxsZWQgZnJvbSB0aGUgZmFzdCBwYXRoLCBnZXQgcmlkIG9mIGFueSBy
ZW1uYW50cyBvZiB0aGF0Ci0gICAgICAgIC8vIHdoaWNoIG1heSBleGlzdC4gVGhpcyByZWFsbHkg
b25seSBtYXR0ZXJzIGZvciB4ODYsIHdoaWNoIGFkanVzdHMKLSAgICAgICAgLy8gU1AgZm9yIGNh
bGxzLgotICAgICAgICBzdHViSml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJ
bmZvOjpyZWdUNCk7Ci0gICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKLSAgICAKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1
cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKLSAgICBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwotICAgICAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVD
YWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBj
YWxsTGlua0luZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKLSAgICBmb3IgKENhbGxU
b0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7Ci0jaWYgQ1BVKEFSTV9USFVNQjIpCi0g
ICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBsaW5raW5n
IG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJlc3MKLSAg
ICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3JtYWwgY2Fs
bCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KLSAgICAgICAg
Ym9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2FsbEhlbHBl
cnM6OkNhbGw6OlRhaWwpOwotICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxsID8gY2Fs
bFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5jb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFRvQ29k
ZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQpKSk7
Ci0jZWxzZQotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVu
Y3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7Ci0jZW5kaWYK
LSAgICB9Ci0KLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIo
bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAKLSAgICBh
dXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZSgKLSAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICBjYWxsZXJDb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJQb2x5
bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAot
ICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1ibHkiIDogdG9DU3RyaW5n
KCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNh
bGxDYXNlcykpLmRhdGEoKSksCi0gICAgICAgIHZtLCBvd25lciwgY2FsbEZyYW1lLT5jYWxsZXJG
cmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKLSAgICAgICAgV1RGTW92ZShmYXN0Q291
bnRzKSkpOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHNsb3cgcGF0aCBpcyB1bnJlYWNoYWJsZSBv
biA2NC1iaXRzLCBidXQgc3RpbGwKLSAgICAvLyByZWFjaGFibGUgb24gMzItYml0cyBzaW5jZSBh
IG5vbi1jZWxsIGNhbGxlZSB3aWxsIGFsd2F5cwotICAgIC8vIHRyaWdnZXIgdGhlIHNsb3cgcGF0
aAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotCi0gICAgLy8gSWYgdGhlcmUg
aGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQgb25lIHdpbGwgZGllIGFzIHNv
b24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKLSAgICAvLyB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG9u
IHN0YWNrLgotICAgIGNhbGxMaW5rSW5mby5zZXRTdHViKFdURk1vdmUoc3R1YlJvdXRpbmUpKTsK
LSAgICAKLSAgICAvLyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhhcyBhIGNhbGwgY2Fj
aGUgYXBhcnQgZnJvbSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbAotICAgIC8vIHN0
dWIuCi0gICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQotICAgICAgICBjYWxsTGlua0lu
Zm8ucmVtb3ZlKCk7Ci19Ci0KLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKLXsKLSAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemlu
Z0dldEJ5RnVuY3Rpb24oa2luZCkpOwotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgR2V0
QnlLaW5kOjpCeUlkOgotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6Ci0gICAgY2Fz
ZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Q6Ci0g
ICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lQnlJZDoKLSAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgotICAgIGNhc2UgR2V0QnlLaW5kOjpQ
cml2YXRlTmFtZToKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXZvaWQgcmVzZXRQdXRCeShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRCeUtpbmQga2luZCkKLXsKLSAgICBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG9wdGltaXplZEZ1bmN0aW9uOwotICAgIHN3aXRjaCAoa2lu
ZCkgewotICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOiB7Ci0gICAgICAgIHVzaW5nIEZ1bmN0aW9u
VHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpOwot
ICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8p
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24g
PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAg
ICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
OwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRp
b25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQ
cml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpOwotICAgICAgICAgICAgb3B0
aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHV0QnlLaW5kOjpC
eVZhbDogewotICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlwZSgmb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9wdGltaXpl
ZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJQ0NhbGxU
YXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAg
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0R2VuZXJp
YyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAg
ZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkR2Vu
ZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJp
dmF0ZUZpZWxkT3B0aW1pemUpCi0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYg
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRH
ZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2
YXRlRmllbGRPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZ1
bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgc3dpdGNo
IChraW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgICAgIElubGluZUFjY2Vz
czo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgcmVzZXREZWxCeShD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtp
bmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9PSBEZWxCeUtpbmQ6OkJ5SWQpCi0gICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7Ci0gICAgSW5saW5l
QWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0SW5CeShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2luZCBraW5kKQotewotICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6
aW5nSW5CeUZ1bmN0aW9uKGtpbmQpKTsKLSAgICBpZiAoa2luZCA9PSBJbkJ5S2luZDo6QnlJZCkK
LSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvKTsKLSAgICBlbHNlCi0gICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0K
LQotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotdm9pZCByZXNldEluc3RhbmNlT2YoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5n
SW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0Q2hlY2tQ
cml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKLXsKLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwotICAgIElubGluZUFjY2Vzczo6cmVz
ZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJ
bmZvKTsKLX0KLQotdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUp
OwotICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQotewotI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKLSAgICBpZiAoIWNhbGxlZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGtp
bmQgIT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChhdXRv
KiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwg
Y2FsbGVlKSkKLSAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlwb2ludCgp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVOVVNFRF9QQVJBTShraW5kKTsK
LSAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKLSNlbmRpZgotICAgIHJldHVybiBudWxscHRyOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2UzNzdlZTEwYTJlZjg0YTIz
ZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisrKyAvZGV2
L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgot
I2luY2x1ZGUgIlB1dEtpbmQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWVudW0gY2xhc3MgR2V0
QnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotICAgIFRyeUJ5SWQsCi0gICAgQnlJZFdp
dGhUaGlzLAotICAgIEJ5SWREaXJlY3QsCi0gICAgUHJpdmF0ZU5hbWUsCi0gICAgUHJpdmF0ZU5h
bWVCeUlkLAotfTsKLQotZW51bSBjbGFzcyBQdXRCeUtpbmQgewotICAgIEJ5SWQsCi0gICAgQnlW
YWwsCi19OwotCi1lbnVtIGNsYXNzIERlbEJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBCeVZhbAot
fTsKLQotZW51bSBjbGFzcyBJbkJ5S2luZCB7Ci0gICAgQnlJZCwKLSAgICBCeVZhbCwKLSAgICBQ
cml2YXRlTmFtZQotfTsKLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVj
dCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1
YkluZm8mKTsKLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0
dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0ds
b2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Ci12b2lkIHJlcGF0Y2hQdXRCeShK
U0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJs
ZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHV0QnlLaW5kLCBQdXRLaW5kKTsKLXZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mLCBEZWxCeUtpbmQsIEVDTUFN
b2RlKTsKLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09i
amVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXBhdGNoSGFzUHJp
dmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFi
bGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQg
cmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNP
YmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBy
ZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owotdm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
VmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGJvb2wg
d2FzRm91bmQpOwotdm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKFZNJiwgQ2FsbEZyYW1lKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua0RpcmVjdENhbGwoQ2FsbEZyYW1lKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+KTsKLXZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7Ci12
b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKLXZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJp
YW50KTsKLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdl
dEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBQdXRCeUtpbmQpOwotdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgRGVsQnlLaW5kKTsKLXZvaWQgcmVzZXRJbkJ5KENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXNldEhhc1ByaXZhdGVCcmFuZChDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldEluc3RhbmNlT2YoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFNldFByaXZhdGVCcmFuZChDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENh
bGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFsUHRyVGFnPiwgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7Ci1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoVk0mLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLCBKU09iamVjdCogY2FsbGVlKTsKLQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1ZjdiNzg2NDExZDg1NWIy
YTFkZTQ3Yy4uZGJkNWFiZDM3ODhkNzFiODAzMDViYjg1MWZiY2MyNzEzZTg3YjAwZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtMzQ0LDQ4
ICszNDQsMjUgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
dmlydHVhbFRodW5rRm9yUmVndWxhckNhbGwoVk0mIHZtKQogICAgIHJldHVybiB2aXJ0dWFsVGh1
bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclJlZ3Vs
YXJDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENh
bGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yVGFpbENhbGwoVk0m
IHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBD
b2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVy
biB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBDb2RlRm9yQ29uc3RydWN0KTsK
LX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVh
bFRodW5rRm9yQ29uc3RydWN0Q2FsbChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxUaHVu
a0Zvcih2bSwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNhbGwpOwotfQotCiBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JDb25z
dHJ1Y3RDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0s
IENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0s
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTW9kZSBjYWxsTW9k
ZSkKIHsKLSAgICBhdXRvIG1vZGUgPSBjYWxsTGlua0luZm8uY2FsbE1vZGUoKTsKLSAgICBhdXRv
IGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgYXV0byBnZW5l
cmF0b3IgPSBbJl0gKCkgLT4gVGh1bmtHZW5lcmF0b3IgewotICAgICAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICAgICAgc3dpdGNoIChjYWxsTW9kZSkgewogICAgICAgICBjYXNlIENhbGxNb2RlOjpS
ZWd1bGFyOgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsOwotICAgICAgICAgICAgcmV0
dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3Q7CisgICAgICAgICAgICByZXR1cm4g
dmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OlRhaWw6
Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENhbGw7Ci0gICAgICAgICAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yVGFpbENvbnN0cnVjdDsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtG
b3JUYWlsQ2FsbDsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgotICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1
YWxUaHVua0ZvckNvbnN0cnVjdENhbGw7CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5r
Rm9yQ29uc3RydWN0Q29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuaAppbmRleCAwZjlmNmUyZDM2ZjZkZDIzZTE4NzI2YWNlNjMxNGEzMGEyMDFkYmNlLi5hYjdj
ZjY2YzQyMTUxZWUwMTk1OGMxYWIyMmYyOWZjZDhkZDcwMTRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IoVk0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlu
a0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0m
LCBDYWxsTGlua0luZm8mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbE1vZGUpOwogCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZN
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IGU4ZGFm
ZjdkODhiMzBjNmJmODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQwYjM3Mzg5MjFhNGYwMDE1MTJl
N2RlZTNhODQ0M2M1MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuY3BwCkBAIC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIgdm9pZCB3YXNtX2VudHJ5KHZv
aWQqLCB2b2lkKiwgdm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb0phdmFTY3JpcHRU
cmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVRyYW1wb2xp
bmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9s
aW5lKHZvaWQpOworZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRy
YW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0aW9uSGFuZGxlclRyYW1wb2xp
bmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxMSW50VHJhbXBvbGluZSh2b2lk
KTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgewog
ICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUo
SlNFbnRyeVB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFp
bENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFn
Q29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0
YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcubGxpbnQu
Z2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5UHRyVGFn
KV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC0xNjEsMTEg
KzE2MiwxOSBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlO
ZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
Pj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAgICAgICAgICAg
Y29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlTbG93UGF0aFB0clRh
ZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpT
RW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVJlZi5j
b25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lk
KiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50
cnlTbG93UGF0aFRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRl
TWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFB0
clRhZyldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9
CisgICAgeworICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOworICAgICAgICBpZiAoT3B0
aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWls
Q2FsbEdhdGUoSlNFbnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFn
Q29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0
YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2ND
b25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxX
aXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJl
ZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMWE5NWQxZGQwZWE1ZWYzNDMxMDYx
NWI2OTFlYmM5YTFlYWI4MmE2YS4uZjlkMWRiNWE0NjkzNGM2NjcxNmVmNjc1ODBhNWM1YTIyOGMx
ZDRiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJSZWdF
eHBPYmplY3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5oIgogI2luY2x1ZGUgIlNoYWRv
d0NoaWNrZW4uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJWTUlubGlu
ZXMuaCIKQEAgLTU4Miw2ICs1ODMsMTcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3RhY2tfY2hl
Y2spCiAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbEZyYW1lKTsKIH0KIAorZXh0ZXJuICJD
IiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlND
ZWxsKikKK3sKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwganNDYXN0PEpTR2xvYmFs
T2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgY2FsbExpbmtJbmZvKTsKK30KKworZXh0ZXJuICJDIiBT
bG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlND
ZWxsKikKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKKyAgICBy
ZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpLCBjYWxsZWVGcmFtZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bElnbm9yZWQpOworfQorCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X29iamVj
dCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTgxOSw3ICsxODMxLDggQEAgc3RhdGljIFNs
b3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBK
U1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmpl
Y3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9
IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qo
dm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0g
ICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBM
TEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9
IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgICAg
ICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6Omdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzbG93UGF0
aExvZygiQ2FsbCBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwgIlxuIik7CkBA
IC0xODM4LDcgKzE4NTEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgICAgICBjYWxs
ZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS5lbmNvZGVk
SG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2Jq
ZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKICAgICAgICAgRGlz
YWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmpl
Y3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQo
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgIGF1
dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdp
c3RlcnM7CisgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1As
IExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc2xvd1BhdGhM
b2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVlLCAiXG4i
KTsKQEAgLTE4NDcsNyArMTg2MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxl
SG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsCiAgICAgTExJ
TlRfQ0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGds
b2JhbE9iamVjdCwgY2FsbGVlKSk7CiB9CiAKLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0
VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlLCBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0gbnVsbHB0cikKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNWYWx1ZSBjYWxs
ZWVBc1ZhbHVlKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNh
bGxlckZyYW1lKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwpAQCAtMTg1OSwxNyArMTg3MywxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRp
b25LaQogICAgIAogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0
aW9uKGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFs
RnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKKyAgICAgICAgaWYgKGNhbGxlZUFzVmFs
dWUuaW5oZXJpdHM8SW50ZXJuYWxGdW5jdGlvbj4odm0pKSB7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFs
RnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0
cik7Ci0KLSAgICAgICAgICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxM
aW5rSW5mbykgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2Fs
bGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGlu
ayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKLSAgICAg
ICAgICAgIH0KLQogICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+
KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JF
VFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVG
cmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgICAgIExM
SU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGNhbGxlZUZyYW1lLCBjYWxsZWVB
c1ZhbHVlLCBraW5kKSk7CiAgICAgfQpAQCAtMTkwNCw3NCArMTkxMyw5IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVj
aWFsaXphdGlvbktpCiAgICAgfQogCiAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgCi0gICAg
aWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlLCBjb2Rl
UHRyKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAgICAgIGNvZGVCbG9jay0+bGlu
a0luY29taW5nQ2FsbChjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgfQotCiAgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWNDYWxsKENvZGVC
bG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgT3AmJiBieXRlY29kZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXggPSAwKQot
ewotICAgIC8vIFRoaXMgbmVlZHMgdG86Ci0gICAgLy8gLSBTZXQgdXAgYSBjYWxsIGZyYW1lLgot
ICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBpbGUgaXQgaWYgbmVjZXNz
YXJ5LgotICAgIC8vIC0gSWYgcG9zc2libGUsIGxpbmsgdGhlIGNhbGwncyBpbmxpbmUgY2FjaGUu
Ci0gICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxs
IGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVl
ID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGNhbGxlZUZvcihieXRlY29kZSwgY2hlY2twb2ludElu
ZGV4KSk7Ci0gICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIHN0
YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpOwot
ICAgIAotICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludEluZGV4KSk7Ci0g
ICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJh
bWUoY2FsbEZyYW1lKTsKLSAgICAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwg
Y2FsbGVlQXNWYWx1ZSwgJmNhbGxMaW5rSW5mb0ZvcihtZXRhZGF0YSwgY2hlY2twb2ludEluZGV4
KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsKQotewotICAgIExM
SU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ss
IGNhbGxGcmFtZSwgcGMtPmFzPE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKLX0KLQotTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTl9O
T19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUs
IHBjLT5hczxPcFRhaWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0KQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9Q
QygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFz
PE9wQ29uc3RydWN0PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU4o
KTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFz
PE9wSXRlcmF0b3JPcGVuPigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRvck9wZW46OnN5bWJvbENh
bGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRf
Y2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmpl
Y3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNv
ZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck5leHQ+KCksIENvZGVGb3JDYWxs
LCBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQpKTsKKyAgICBhdXRvKiBjYWxsZXJTUCA9IGNh
bGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgIExMSU5U
X0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKQpAQCAtMjA0Myw4ICsxOTg3LDggQEAgZW51bSBj
bGFzcyBTZXRBcmd1bWVudHNXaXRoIHsKICAgICBDdXJyZW50QXJndW1lbnRzCiB9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVw
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgU2V0QXJndW1lbnRzV2l0aCBzZXQpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcCwgU2V0QXJndW1lbnRzV2l0aCBzZXQ+CitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZh
cmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kKQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwog
CkBAIC0yMDUzLDExICsxOTk3LDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJn
c1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAvLyAt
IFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBu
ZXcgY2FsbCBmcmFtZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3A+KCk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIEpTVmFs
dWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxl
ZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gdm0ubmV3Q2FsbEZyYW1lUmV0dXJu
VmFsdWU7Ci0KLSAgICBpZiAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCkgeworICAg
IHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdm0udmFyYXJnc0xlbmd0aCAr
IDE7CisgICAgaWYgY29uc3RleHByIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KSB7
CiAgICAgICAgIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNW
YWx1ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2FyZ3VtZW50cyksIGJ5dGVj
b2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwogICAgICAgICBMTElOVF9DQUxM
X0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogICAgIH0gZWxzZQpAQCAtMjA2NywyNyAr
MjAxMiwzMCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2FsbGVlRnJhbWUtPnVuY2hl
Y2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNW
YWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwogCi0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVl
QXNWYWx1ZSkpOworICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLnVwZGF0ZU1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKworICAgIGF1
dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdp
c3RlcnM7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbGVyU1ApOwogfQogCiBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJh
cmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwsIFNldEFy
Z3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcENhbGxWYXJh
cmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxs
KTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdz
KQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3M+KGNhbGxGcmFt
ZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOworICAgIHJldHVy
biB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVj
dD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogewotICAgIHJldHVybiB2
YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGNhbGxGcmFtZSwgcGMsIENv
ZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzKTsKKyAgICByZXR1
cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBTZXRBcmd1bWVudHNX
aXRoOjpDdXJyZW50QXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncykKIHsKLSAg
ICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncz4oY2FsbEZyYW1lLCBwYywg
Q29kZUZvckNvbnN0cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICByZXR1cm4g
dmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncywgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0
PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogaW5saW5lIFNsb3dQYXRo
UmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5z
dHJ1Y3Rpb24qIHBjLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmV0dXJu
UG9pbnQpCkBAIC0yMTEwLDcgKzIwNTgsOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNv
bW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAg
IAogICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGV2
YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNvZGUubV9lY21hTW9kZSkpOwogICAg
IERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmpl
Y3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQo
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgYXV0byog
Y2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
czsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY2FsbF9ldmFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuaAppbmRleCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4OGFhNmFhOTY0ZmI2ZTA5YjY2Li5k
NDM4ZmNiMzM5ZGFmZTM3YTNjMTQxZGJlMjRhNmFkMjExMjliYjhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMzgsNiArMzgsOCBAQCBuYW1l
c3BhY2UgTExJbnQgewogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFj
ZV9vcGVyYW5kKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IGZyb21XaGVyZSwg
aW50IG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0
dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbios
IGludCBmcm9tV2hlcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBSRUZFUkVOQ0VEX0ZST01f
QVNNOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxG
cmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOworZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSosIEpTQ2VsbCosIENh
bGxMaW5rSW5mbyosIEpTQ2VsbCopOwogZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dyaXRlX2JhcnJp
ZXJfc2xvdyhDYWxsRnJhbWUqLCBKU0NlbGwqKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRF
Uk5BTDsKIAogI2RlZmluZSBMTElOVF9TTE9XX1BBVEhfREVDTChuYW1lKSBcCkBAIC0xMTksOSAr
MTIxLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfbmV3X2FzeW5jX2Z1bmMpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9uZXdfYXN5bmNfZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9zZXRfZnVuY3Rpb25fbmFtZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90YWls
X2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3Qp
OwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92
YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2l6ZV9mcmFt
ZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMTMxLDggKzEzMCw2IEBAIExMSU5UX1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MpOwogTExJTlRfU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTE2KTsKIExMSU5UX1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUzMik7Ci1MTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCk7Ci1MTElOVF9TTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCk7CiBMTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX2FyZ3VtZW50cyk7CiBMTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBMTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCA0NjJjYmZiZTRlMzQ1Njg0NWUwNWFhOGJj
MGM0ODExNTNjYmI4ZDBhLi4xNjAzYzJjNzg1NGM5OTliZTllNmM1NzA1MzM2Y2ZmNzQyNzI5MGIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTM0
Niw5ICszNDYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFn
PiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiBwb2ludGVyLCBQdAogewogICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMywgdGFnKTsKLSAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJlZ1QzKTsK
LSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBq
aXQuY2FsbChHUFJJbmZvOjpyZWdUNSwgdGFnKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJlZ1Q1KTsKKyAgICBqaXQuZmFySnVt
cChHUFJJbmZvOjpyZWdUNSwgT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkxMSW50
VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKQEAgLTM2Niwx
MyArMzY2LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCogcG9pbnRlciwKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAiTExJbnQgJXMgd2FzbSBj
YWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2
ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyB0YWcpCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUo
UHRyVGFnIHRhZywgYm9vbCB1bnRhZykKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAg
aml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQVJNNjRSZWdpc3RlcnM6OmxyKTsK
LSAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJlZ2lzdGVyczo6bHIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDAsIHRhZyk7Cisg
ICAgaWYgKHVudGFnKSB7CisgICAgICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjphcmd1bWVudEdQ
UjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAgIGppdC52YWxpZGF0ZVVudGFnZ2VkUHRy
KEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICB9CisgICAg
aml0LmZhckp1bXAoR1BSSW5mbzo6YXJndW1lbnRHUFI3LCB0YWcpOwogCiAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50IHRhaWwgY2FsbCBnYXRlIHRodW5rIik7CkBAIC01NzMs
OCArNTc1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJldHVybkxv
Y2F0aW9uVGh1bmsoT3Bjb2RlSUQgb3Bjb2RlSUQsIE9wY28KICAgICBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfaXRlcmF0b3Jfb3BlbikKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRl
cmF0b3JfbmV4dCkKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0KQotICAg
IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdykKLSAgICBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdykKKyAgICBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKQorICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihv
cF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5
X2lkKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlfdmFsKQogICAgIExMSU5U
X1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFRodW5rcy5oCmluZGV4IGI4N2M0MjBjYmU0MDJhMWYwY2YwODY4MTA3YjVhZmQ2ZGJj
ZjU0YWMuLjA1ZWM2MDFjMDE2NGNiOTU0YjczYTIxYzczNTFmZjAxMGZlYTcxMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCkBAIC04OCw3ICs4OCw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGppdENhZ2VQdHJUaHVu
aygpOwogI2lmIENQVShBUk02NEUpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiwgUHRyVGFnLCBjb25zdCBjaGFyKik7
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVXYXNt
R2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcpOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENh
bGxHYXRlKFB0clRhZywgYm9vbCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPiBsb29wT1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IHdhc21PU1JFbnRyeUdhdGVU
aHVuaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCmluZGV4IGJiODhiNmZkYjA5OWI0OTlhZTZmZjRlODEwMTAxNTA0ZGFhNmQ0
ZTMuLjMwN2I0MWYxN2FmMzg4NmY2M2JkOGE4NjRiNTNiYWM1ZDU0ODRhN2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAg
LTU1MSw2ICs1NTEsNyBAQCBjb25zdCBTeW1ib2xUeXBlID0gY29uc3RleHByIFN5bWJvbFR5cGUK
IGNvbnN0IE9iamVjdFR5cGUgPSBjb25zdGV4cHIgT2JqZWN0VHlwZQogY29uc3QgRmluYWxPYmpl
Y3RUeXBlID0gY29uc3RleHByIEZpbmFsT2JqZWN0VHlwZQogY29uc3QgSlNGdW5jdGlvblR5cGUg
PSBjb25zdGV4cHIgSlNGdW5jdGlvblR5cGUKK2NvbnN0IEludGVybmFsRnVuY3Rpb25UeXBlID0g
Y29uc3RleHByIEludGVybmFsRnVuY3Rpb25UeXBlCiBjb25zdCBBcnJheVR5cGUgPSBjb25zdGV4
cHIgQXJyYXlUeXBlCiBjb25zdCBEZXJpdmVkQXJyYXlUeXBlID0gY29uc3RleHByIERlcml2ZWRB
cnJheVR5cGUKIGNvbnN0IFByb3h5T2JqZWN0VHlwZSA9IGNvbnN0ZXhwciBQcm94eU9iamVjdFR5
cGUKQEAgLTExNTEsMjcgKzExNTIsMjcgQEAgbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmkKICAgICAg
ICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxsZWUKICAgICBlbHNpZiBBUk02NEUKICAgICAgICAg
bWFjcm8gY2FsbE5hcnJvdygpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhw
ciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29k
ZU5hbWUlKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25z
dGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVv
cGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9saW5lXyVv
cGNvZGVOYW1lJToKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAg
IGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdp
ZGUxNigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNl
dE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUx
NikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0
clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHBy
IEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2Rl
TmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZl
VG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVf
JW9wY29kZU5hbWUlX3dpZGUxNjoKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAg
ICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFj
cm8gY2FsbFdpZGUzMigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBK
U0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5h
bWUlX3dpZGUzMikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsg
Y29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRl
Ojolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3
XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3Ry
YW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUzMjoKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQ
dHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKLSAg
ICAgICAgbW92ZSBjYWxsZWUsIHQzCisgICAgICAgIG1vdmUgY2FsbGVlLCB0NQogICAgICAgICBz
aXplKGNhbGxOYXJyb3csIGNhbGxXaWRlMTYsIGNhbGxXaWRlMzIsIG1hY3JvIChnZW4pIGdlbigp
IGVuZCkKICAgICBlbHNlCiAgICAgICAgIGNhbGwgY2FsbGVlLCBjYWxsUHRyVGFnCkBAIC0xMjA5
LDEyICsxMjEwLDIzIEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAgICAgZW5kCiBlbmQKIAot
bWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywg
dGVtcDQsIGNhbGxQdHJUYWcpCi0gICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKK21h
Y3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKIGVu
ZAogCi0jIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lCi1tYWNybyBwcmVwYXJlRm9yVGFpbENh
bGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKK21hY3Jv
IGludm9rZUZvclJlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFs
dWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVlLCBtYXli
ZU9sZENGUiwgY2FsbFB0clRhZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCBjYWxsZWUsIGNhbGxQdHJUYWcpCitlbmQKKworIyB0NSBpcyBtZXRhZGF0YQor
bWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3Bh
dGNoLCBjYWxsUHRyVGFnKQorZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwo
KQorZW5kCisKKyMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBD
U2l6ZQorIyBXZSBsZWF2ZSBjZnIgdGVtcDQgdG8gdXNlIGl0IGZvciB1bnRhZ2dpbmcuCittYWNy
byBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCiAgICAgcmVz
dG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldCAr
IEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzW2Nmcl0sIHRlbXAyCkBAIC0xMjMyLDE4ICsxMjQ0
LDE3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVt
cDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIG1vdmUgY2ZyLCB0ZW1wMQogICAgIGFkZHAgdGVt
cDIsIHRlbXAxCiAKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXNbc3BdLCB0ZW1wMgorICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIENhbGxlckZyYW1lQW5kUENTaXplW3NwXSwgdGVtcDIKICAgICAj
IFdlIGFzc3VtZSA8IDJeMjggYXJndW1lbnRzCiAgICAgbXVsaSBTbG90U2l6ZSwgdGVtcDIKICAg
ICBhZGRpIFN0YWNrQWxpZ25tZW50IC0gMSArIENhbGxGcmFtZUhlYWRlclNpemUsIHRlbXAyCiAg
ICAgYW5kaSB+U3RhY2tBbGlnbm1lbnRNYXNrLCB0ZW1wMgogCiAgICAgaWYgQVJNdjcgb3IgQVJN
NjQgb3IgQVJNNjRFIG9yIENfTE9PUCBvciBDX0xPT1BfV0lOIG9yIE1JUFMgb3IgUklTQ1Y2NAot
ICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAogICAgICAgICBzdWJpIENhbGxl
ckZyYW1lQW5kUENTaXplLCB0ZW1wMgogICAgICAgICBsb2FkcCBDYWxsZXJGcmFtZUFuZFBDOjpy
ZXR1cm5QQ1tjZnJdLCBscgogICAgIGVsc2UKLSAgICAgICAgYWRkcCBQdHJTaXplLCBzcAorICAg
ICAgICBzdWJwIFB0clNpemUsIHNwCiAgICAgICAgIHN1YmkgUHRyU2l6ZSwgdGVtcDIKICAgICAg
ICAgbG9hZHAgUHRyU2l6ZVtjZnJdLCB0ZW1wMwogICAgICAgICBzdG9yZXAgdGVtcDMsIFtzcF0K
QEAgLTEyNzAsOSArMTI4MSwxMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0
ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBlbmQKIAogICAgIG1v
dmUgdGVtcDEsIHNwCitlbmQKKworbWFjcm8gaW52b2tlRm9yVGFpbENhbGwob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFnKQogICAgIGlmIEFSTTY0
RQotICAgICAgICBtb3ZlIHRlbXA0LCBhMgotICAgICAgICBtb3ZlIGNhbGxlZSwgYTAKKyAgICAg
ICAgbW92ZSBtYXliZU9sZENGUiwgYTIKKyAgICAgICAgbW92ZSBjYWxsZWUsIGE3CiAgICAgICAg
IGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFw
ICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbCVjYWxsUHRyVGFnJSkgKiBQdHJTaXplLCBhMQog
ICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJUYWclCiAg
ICAgZWxzZQpAQCAtMTI4MCw2ICsxMjk0LDIyIEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChj
YWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIGVuZAog
ZW5kCiAKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxD
YWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbFB0clRhZykKKyAgICBpZiBBUk02NEUKKyAg
ICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRh
dGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTcKKyAgICAgICAgbGVhcCBK
U0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29u
c3RleHByIEdhdGU6OnRhaWxDYWxsV2l0aG91dFVudGFnJWNhbGxQdHJUYWclKSAqIFB0clNpemUs
IGExCisgICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyAlY2FsbFB0clRh
ZyUKKyAgICBlbHNlCisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIGEx
CisgICAgICAgIGptcCBhMSwgY2FsbFB0clRhZworICAgIGVuZAorZW5kCisKK21hY3JvIHByZXBh
cmVGb3JTbG93VGFpbENhbGwoKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50KCkK
K2VuZAorCiBtYWNybyBzbG93UGF0aEZvckNvbW1vbkNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bj
b2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIHNsb3dQYXRo
Rm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3Qs
IGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiBlbmQKQEAgLTEyOTEsNyArMTMyMSw3
IEBAIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1CiAgICAgICAgIG1hY3JvIChjYWxsZWUsIGNhbGxl
ZUZyYW1lUHRyKQogICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVT
UAogICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKLSAgICAgICAgICAgIHByZXBh
cmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlTbG93UGF0aFB0clRhZykKKyAg
ICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQogICAgICAgICAuZG9udFVwZGF0
ZVNQOgogICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rlciwg
ZGlzcGF0Y2gsIGNhbGxlZSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQogICAgICAgICBlbmQpCkBA
IC0xODIwLDEyICsxODUwLDE2IEBAIGlmIEFSTTY0RQogICAgIGdsb2JhbCBfdGFpbENhbGxKU0Vu
dHJ5VHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lOgogICAgICAgICB1
bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5UHRyVGFnCisgICAg
ICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpTRW50cnlT
bG93UGF0aFRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5l
OgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5
U2xvd1BhdGhQdHJUYWcKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCisKKyAgICBnbG9i
YWwgX3RhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUKKyAgICBfdGFpbENhbGxX
aXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZToKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRy
VGFnCiAKICAgICBnbG9iYWwgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lCiAgICAgX2V4Y2Vw
dGlvbkhhbmRsZXJUcmFtcG9saW5lOgpAQCAtMjMyNSwxNyArMjM1OSwxNyBAQCBlbmQpCiAKIAog
IyB3ZSBjYW4ndCB1c2UgY2FsbE9wIGJlY2F1c2Ugd2UgY2FuJ3QgcGFzcyBgY2FsbGAgYXMgdGhl
IG9wY29kZSBuYW1lLCBzaW5jZSBpdCdzIGFuIGluc3RydWN0aW9uIG5hbWUKLWNvbW1vbkNhbGxP
cChvcF9jYWxsLCBfbGxpbnRfc2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZvclJlZ3Vs
YXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCitjb21tb25DYWxsT3Aob3BfY2FsbCwgX2xs
aW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tl
Rm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJl
Rm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJyYXlQcm9m
aWxlRm9yQ2FsbChPcENhbGwsIGdldHUpCiBlbmQpCiAKIAotbWFjcm8gY2FsbE9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGZuKQotICAgIGNvbW1vbkNhbGxPcChvcF8l
b3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3Qs
IHByZXBhcmVDYWxsLCBmbikKK21hY3JvIGNhbGxPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93
Q2FsbCwgZm4pCisgICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1lJSwgX2xsaW50X3Nsb3df
cGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGws
IHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBmbikKIGVuZAogCiAKLWNhbGxP
cCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUs
IG1ldGFkYXRhKQorY2FsbE9wKHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxD
YWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHBy
ZXBhcmVGb3JTbG93VGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBhcnJheVBy
b2ZpbGVGb3JDYWxsKE9wVGFpbENhbGwsIGdldHUpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVw
aWxvZ3VlKCkKICAgICAjIHJlbG9hZCBtZXRhZGF0YSBzaW5jZSBjaGVja1N3aXRjaFRvSklURm9y
RXBpbG9ndWUoKSBtaWdodCBoYXZlIHRyYXNoZWQgdDUKQEAgLTIzNDMsNyArMjM3Nyw3IEBAIGNh
bGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdl
dHUsIG1ldGFkYXRhKQogZW5kKQogCiAKLWNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBw
cmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQorY2FsbE9w
KGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9y
UmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9y
U2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCiBtYWNybyBi
cmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCkBAIC0yMzU0LDQ3ICsyMzg4LDI5IEBA
IG1hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKIC5ub0V4Y2VwdGlvbjog
ICAgCiBlbmQKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi0g
ICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCi0gICAgYnJhbmNoSWZFeGNlcHRpb24oX2xs
aW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCi0gICAgIyBjYWxsZWVGcmFtZSBp
biByMQotICAgIGlmIEpTVkFMVUU2NAotICAgICAgICBtb3ZlIHIxLCBzcAotICAgIGVsc2UKLSAg
ICAgICAgIyBUaGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUgZG93biBi
eSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGlnbgotICAgICAgICBpZiBBUk12NwotICAgICAg
ICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCi0gICAgICAgICAgICBtb3Zl
IHQyLCBzcAotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSwgc3AKLSAgICAgICAgZW5kCi0gICAgZW5kCi0gICAgc2xvd1BhdGhGb3JDb21tb25D
YWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBw
cmVwYXJlQ2FsbCkKLWVuZAotCiAKLWxsaW50T3Aob3BfY2FsbF92YXJhcmdzLCBPcENhbGxWYXJh
cmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJhcmdzKG9wX2Nh
bGxfdmFyYXJncywgc2l6ZSwgT3BDYWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3Bh
dGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3Ms
IHByZXBhcmVGb3JSZWd1bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfY2FsbF92YXJh
cmdzLCBPcENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKKyAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBP
cENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGlu
dF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxs
X3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHBy
ZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxs
KQogZW5kKQogCi1sbGludE9wKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJn
cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3Rh
aWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3Vl
KCkKICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJl
cGFyaW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBj
YWxsIG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIHNpemUs
IE9wVGFpbENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1l
X2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzLCBwcmVwYXJl
Rm9yVGFpbENhbGwpCisgICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJncywgc2l6
ZSwgZ2V0LCBPcFRhaWxDYWxsVmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9z
bG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9y
VGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9yU2xvd1Rh
aWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
LCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gp
CitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgT3BU
YWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgcmV0dXJuKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgIyBX
ZSBsaWUgYW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmluZyBpdCBz
aW5jZSB3ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBvcGNvZGUK
LSAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgc2l6ZSwg
T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3Np
emVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsKQorICAgIGRvQ2FsbFZhcmFy
Z3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9s
bGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9z
bG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGws
IGludm9rZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFy
ZUZvclNsb3dUYWlsQ2FsbCkKIGVuZCkKIAogCi1sbGludE9wKG9wX2NvbnN0cnVjdF92YXJhcmdz
LCBPcENvbnN0cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRv
Q2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIE9wQ29uc3RydWN0VmFyYXJn
cywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xs
aW50X3Nsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQor
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25zdHJ1Y3RWYXJh
cmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICBk
b0NhbGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ29uc3RydWN0
VmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xv
d19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29uc3RydWN0
X3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHBy
ZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxs
KQogZW5kKQogCiAKQEAgLTI1MTAsNiArMjUyNiw5MSBAQCBvcChsbGludF9pbnRlcm5hbF9mdW5j
dGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBpbnRlcm5hbEZ1bmN0aW9u
Q2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5jdGlvbkZvckNvbnN0cnVjdCkK
IGVuZCkKIAorIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxM
aW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3JvIGxpbmtTbG93
UGF0aEZvcihmdW5jdGlvbikKKyAgICBmdW5jdGlvblByb2xvZ3VlKCkKKyAgICBsb2FkcCBKU0ds
b2JhbE9iamVjdDo6bV92bVt0M10sIHQxCisgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFt
ZVt0MV0KKyAgICBtb3ZlIHQyLCBhMgorICAgIG1vdmUgdDMsIGExCisgICAgbW92ZSBjZnIsIGEw
CisgICAgY0NhbGw0KGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uRXBpbG9ndWUoKQorICAgIHVudGFn
UmV0dXJuQWRkcmVzcyBzcAorICAgIGJ0cHogcjEsIC5kb05vdFRyYXNoCisgICAgcHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKQorICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0MSwgdDIs
IHQzLCB0NCkKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MgdDQKKy5kb05vdFRyYXNoOgorICAgIGpt
cCB0MCwgSlNFbnRyeVB0clRhZworZW5kCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNh
bGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2Jq
ZWN0CittYWNybyB2aXJ0dWFsVGh1bmtGb3Iob2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2ss
IGludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lLCBwcmVwYXJlQ2FsbCwgc2xvd0Nhc2UpCisgICAg
YWRkaSAxLCBDYWxsTGlua0luZm86Om1fc2xvd1BhdGhDb3VudFt0Ml0KKyAgICBpZiBKU1ZBTFVF
NjQKKyAgICAgICAgbW92ZSBOb3RDZWxsTWFzaywgdDEKKyAgICAgICAgYnRxbnogdDAsIHQxLCBz
bG93Q2FzZQorICAgIGVsc2UKKyAgICAgICAgYmluZXEgdDEsIENlbGxUYWcsIHNsb3dDYXNlCisg
ICAgZW5kCisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBKU0Z1bmN0aW9uVHlwZSwgLm5v
dEpTRnVuY3Rpb24KKyAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVPclJhcmVEYXRh
W3QwXSwgdDEKKyAgICBidHB6IHQxLCAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSwgLmlzRXhlY3V0YWJsZQorICAgIGxvYWRwIChGdW5jdGlvblJhcmVEYXRhOjptX2V4ZWN1dGFi
bGUgLSAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSlbdDFdLCB0MQorLmlzRXhl
Y3V0YWJsZToKKyAgICBsb2FkcCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja1t0MV0sIHQx
CisgICAgYnRweiB0MSwgc2xvd0Nhc2UKKy5jYWxsQ29kZToKKyAgICBwcmVwYXJlQ2FsbCh0NSwg
dDIsIHQzLCB0NCkKKyAgICBqbXAgdDEsIEpTRW50cnlQdHJUYWcKKy5ub3RKU0Z1bmN0aW9uOgor
ICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgSW50ZXJuYWxGdW5jdGlvblR5cGUsIHNsb3dD
YXNlCisgICAgcHJlcGFyZUNhbGwodDUsIHQyLCB0MywgdDQpCisgICAgam1wIGludGVybmFsRnVu
Y3Rpb25UcmFtcG9saW5lCitlbmQKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVl
CisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QK
K29wKGxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGxpbmtTbG93UGF0
aEZvcihfbGxpbnRfbGlua19jYWxsKQorZW5kKQorCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBp
cyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2Jh
bE9iamVjdAorb3AobGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAg
dmlydHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5
Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0
ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6Cisg
ICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgNjRiaXQ6
dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlz
IGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFt
cG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0
KSBlbmQsIC5zbG93Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50
X3ZpcnR1YWxfY2FsbCkKK2VuZCkKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVl
CisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QK
K29wKGxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmly
dHVhbFRodW5rRm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1w
MSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKKyAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0
ZXJDYWxsKHRlbXAxKQorICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0
ZW1wMywgdGVtcDQpCisgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0ZW1wNAorICAgIGVuZCwg
LnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVh
bF9jYWxsKQorZW5kKQogCiBpZiBKSVQKICAgICBtYWNybyBsb2FkQmFzZWxpbmVKSVRDb25zdGFu
dFBvb2woKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuY3BwCmluZGV4IGMwNGZmZDZiMGJjM2YyNmUxOTJmMDZmMmJiZjc0YjA2NGRjYjI3
OWEuLjk4NzZlZjZlZjc0MmFjZWVkYWUyNjlhMmFiNDU0YzViNjJjZDUxNmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKQEAg
LTEyOSw2ICsxMjksOCBAQCB1c2luZyBXZWJDb25maWc6OmdfY29uZmlnOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQ2FsbExpbmtJbmZvOworCiAvLz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8v
IENMb29wUmVnaXN0ZXIgaXMgdGhlIHN0b3JhZ2UgZm9yIGFuIGVtdWxhdGVkIENQVSByZWdpc3Rl
ci4KIC8vIEl0IGRlZmluZXMgdGhlIHBvbGljeSBvZiBob3cgaW50cyBzbWFsbGVyIHRoYW4gaW50
cHRyX3QgYXJlIHBhY2tlZCBpbnRvIHRoZQpAQCAtMTY2LDYgKzE2OCw3IEBAIGNsYXNzIENMb29w
UmVnaXN0ZXIgewogICAgIG9wZXJhdG9yIFByb3RvQ2FsbEZyYW1lKigpIHsgcmV0dXJuIGJpdHdp
c2VfY2FzdDxQcm90b0NhbGxGcmFtZSo+KG1fdmFsdWUpOyB9CiAgICAgb3BlcmF0b3IgUmVnaXN0
ZXIqKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lzdGVyKj4obV92YWx1ZSk7IH0KICAgICBv
cGVyYXRvciBWTSooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Vk0qPihtX3ZhbHVlKTsgfQorICAg
IG9wZXJhdG9yIENhbGxMaW5rSW5mbyooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2FsbExpbmtJ
bmZvKj4obV92YWx1ZSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0g
c3RkOjplbmFibGVfaWZfdDxzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnRwdHJfdCk+PgogICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcj0oVCB2YWx1ZSkgeyBtX3ZhbHVlID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4odmFsdWUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDkwM2U1YTQ1YjFi
NjY4MmZkMjg3OGI5Nzk0ODUyYWVmZDY3NTFkNWUuLmQ4YjYzMDhhM2U2ZmQ0NWYyYzM1ZDBiMjdh
NDQ5NGI5OGRhNjAzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMTgsNyArMTE4LDkgQEAgbWFj
cm8gY0NhbGwyVm9pZChmdW5jdGlvbikKIGVuZAogCiBtYWNybyBjQ2FsbDQoZnVuY3Rpb24pCi0g
ICAgaWYgQVJNdjcgb3IgTUlQUworICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCisgICAgICAg
IGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMKKyAgICBlbHNpZiBB
Uk12NyBvciBNSVBTCiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYgb3IgWDg2
X1dJTgogICAgICAgICBwdXNoIGEzCkBAIC0yMTUxLDM1ICsyMTUzLDYwIEBAIG1hY3JvIGFycmF5
UHJvZmlsZUZvckNhbGwob3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGJpbmVxIFRoaXNBcmd1bWVu
dE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICBsb2Fk
aSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAg
IGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVpIHQwLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLm1fbGFz
dFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBl
bmQKIAotbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0
LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBzaXpl
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGdldENh
bGxlZSh0MCkKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCittYWNybyBjYWxsSGVscGVyKG9wY29kZU5h
bWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxS
ZWdpc3RlciwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJl
cGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJn
dW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgZ2V0Q2FsbGVl
KHQzKQogCi0gICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5m
by5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0sIHQyCi0gICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQzLCAub3BDYWxsU2xv
dykKLSAgICBiaW5lcSB0MywgdDIsIC5vcENhbGxTbG93CisgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MywgdDEsIHQwKQorCisgICAgIyBBbGlnbmVkIHRvIEpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUKICAgICBnZXRBcmd1bWVudFN0YXJ0KHQzKQogICAgIGxzaGlmdGkgMywgdDMKICAg
ICBuZWdpIHQzCiAgICAgYWRkcCBjZnIsIHQzICAjIHQzIGNvbnRhaW5zIHRoZSBuZXcgdmFsdWUg
b2YgY2ZyCi0gICAgc3RvcmVpIHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgIGdl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKSAgICAKLSAgICBzdG9yZWkgUEMsIEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBnZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyh0MikKICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KLSAgICBzdG9yZWkgQ2VsbFRhZywgQ2FsbGVlICsg
VGFnT2Zmc2V0W3QzXQorCisgICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwg
YW5kIGNvbmZpZ3VyZSBzcC4KKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBzdG9yZWkgdDAsIENhbGxlZSArIFBheWxvYWRPZmZz
ZXRbdDNdCisgICAgc3RvcmVpIHQxLCBDYWxsZWUgKyBUYWdPZmZzZXRbdDNdCiAgICAgbW92ZSB0
Mywgc3AKLSAgICBwcmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExp
bmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0
clRhZykKLSAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRb
dDVdLCBKU0VudHJ5UHRyVGFnKQorICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCisK
KyAgICBiaW5lcSB0MSwgQ2VsbFRhZywgLm9wQ2FsbFNsb3cKKyAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0
MworICAgIGJ0cHogdDMsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxl
ZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAgICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMg
bm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhl
IHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRo
YXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0
aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAgIGptcCAuZ29Qb2x5bW9ycGhpYwor
Cisubm90UG9seW1vcnBoaWM6CisgICAgYnBuZXEgdDAsIHQzLCAub3BDYWxsU2xvdworICAgIHBy
ZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisuZ29Qb2x5bW9ycGhpYzoKKyAgICBsb2FkcCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21v
cnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCiAKIC5vcENhbGxTbG93OgotICAgIHNs
b3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2Fs
bCkKKyAgICAjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAjIHQyIGlzIENh
bGxMaW5rSW5mbyoKKyAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgYWRk
cCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxs
TGlua0luZm8qIGluIHQyCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgdDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3Qz
XSwgdDMKKyAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bj
b2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKIGVuZAogICAgICAg
ICAKLW1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0
LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCittYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwg
c2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQ
b2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBsbGludE9wV2l0aE1l
dGFkYXRhKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIApAQCAtMjE4
OCw3ICsyMjE1LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBv
cGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5kLCBtZXRhZGF0
YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICBnZXQobV9jYWxs
ZWUsIHQwKQorICAgICAgICAgICBnZXQobV9jYWxsZWUsIGRzdCkKICAgICAgICAgZW5kCiAKICAg
ICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3QpCkBAIC0yMTk5LDEwICsyMjI2LDY4IEBA
IG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBw
cmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVj
dCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogICAgICAgICAKLSAgICAgICAgY2FsbEhlbHBl
cihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBw
cmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3Vt
ZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCisgICAgICAgICMgdDUgaG9sZHMgbWV0YWRhdGEK
KyAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBt
X3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3Jw
aGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVl
LCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVuZCkKIGVuZAogCitt
YWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
ZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJl
UG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93
UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhf
dHJhbXBvbGluZSkKKyAgICAjIGNhbGxlZUZyYW1lIGluIHIxCisgICAgaWYgSlNWQUxVRTY0Cisg
ICAgICAgIG1vdmUgcjEsIHNwCisgICAgZWxzZQorICAgICAgICAjIFRoZSBjYWxsZWVGcmFtZSBp
cyBub3Qgc3RhY2sgYWxpZ25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZyYW1lQW5kUENTaXplIHRv
IGFsaWduCisgICAgICAgIGlmIEFSTXY3CisgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFt
ZUFuZFBDU2l6ZSwgdDIKKyAgICAgICAgICAgIG1vdmUgdDIsIHNwCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorICAgICAgICBlbmQK
KyAgICBlbmQKKyAgICBjYWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBzbG93UGF0aCwKKyAgICAg
ICAgIyBUaG9zZSBhcmUgcjAgYW5kIHIxCisgICAgICAgIG1hY3JvIChyZXN0b3JlZFBDT3JUaHJv
dywgY2FsbGVlRnJhbWVQdHIpCisgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9u
dFVwZGF0ZVNQCisgICAgICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAgICAgICAg
ICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCisgICAgICAgICAgICBnZXQobV9jYWxsZWUsIHQy
KQorICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDEsIHQwKQor
ICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisgICAgICAgICAgICBiaW5lcSB0MSwgQ2Vs
bFRhZywgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQzCisgICAgICAg
ICAgICBidHB6IHQzLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVN
YXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAgICAgICAgICAjIHByZXBhcmVDYWxsIGluIExMSW50
IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQg
aW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAgICAgICAgICMgQnV0IHdlIHNob3Vs
ZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3Vs
ZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgorICAgICAgICAgICAgcHJl
cGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgSlNFbnRyeVB0clRhZykKKyAg
ICAgICAgICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisgICAgICAgIC5ub3RQb2x5bW9ycGhpYzoK
KyAgICAgICAgICAgIGJwbmVxIHQwLCB0MywgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAgIHByZXBh
cmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisgICAgICAgIC5nb1BvbHltb3JwaGljOgorICAgICAg
ICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRh
dGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGlu
dm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCisK
KyAgICAgICAgLm9wQ2FsbFNsb3c6CisgICAgICAgICAgICAjIDY0Yml0OnQwIDMyYml0KHQwLHQx
KSBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgorICAgICAgICAg
ICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgICAgICAgICAgYWRkcCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0lu
Zm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
Y2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAg
ICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAgICAgIHByZXBhcmVTbG93Q2FsbCgpCisg
ICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5kb250VXBkYXRlU1A6CisgICAgICAgICAg
ICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKKyAgICAgICAgZW5k
KQorZW5kCisKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICBnZXQobV92YWx1ZSwg
dDIpCkBAIC0yODY2LDcgKzI5NTEsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9y
X29wZW4sIE9wSXRlcmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAg
ICBtb3ZlIDEsIGRzdAogICAgIGVuZAogCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVu
LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1f
aXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUs
IGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJ
bmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1l
dGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9z
bG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclBy
b2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxh
ckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1Jl
Z3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9yZU5leHRBbmREaXNwYXRj
aCh2YWx1ZVRhZywgdmFsdWVQYXlsb2FkKQpAQCAtMjkyNyw3ICszMDEzLDggQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBhcyBhIHRt
cCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCi0gICAgY2FsbEhlbHBl
cihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwg
T3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2Fs
bGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdU
aGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0
b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JO
ZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwg
cHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBt
ZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CiAgICAgbWFjcm8gc3Rv
cmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWVUYWcsIGRvbmVWYWx1ZVBheWxvYWQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCmluZGV4IGE5MTMxNGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJlMmY1OWMwYTgzNzAuLjM5
MjVjN2MzNmM0ZTM4MDAyODM3MmZiZjZiZGY1ZTcxNGM5NjViNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0x
NDMsNyArMTQzLDkgQEAgZW5kCiAjIFRoaXMgYmFyZWx5IHdvcmtzLiBhcmczIGFuZCBhcmc0IHNo
b3VsZCBwcm9iYWJseSBiZSBpbW1lZGlhdGVzLgogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHQ0LCAweGJhZDBjMDA0KQotICAgIGlmIFg4Nl82
NCBvciBBUk02NCBvciBBUk02NEUgb3IgUklTQ1Y2NAorICAgIGlmIENfTE9PUCBvciBDX0xPT1Bf
V0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMK
KyAgICBlbHNpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKICAgICAgICAg
Y2FsbCBmdW5jdGlvbgogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBPbiBXaW42NCwg
cmN4LCByZHgsIHI4LCBhbmQgcjkgYXJlIHVzZWQgZm9yIHBhc3NpbmcgdGhlIGZpcnN0IGZvdXIg
cGFyYW1ldGVycy4KQEAgLTMwOSwxMiArMzExLDEyIEBAIG1hY3JvIG1ha2VKYXZhU2NyaXB0Q2Fs
bChlbnRyeSwgcHJvdG9DYWxsRnJhbWUsIHRlbXAxLCB0ZW1wMikKICAgICBpZiBDX0xPT1Agb3Ig
Q19MT09QX1dJTgogICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAgZWxzaWYg
QVJNNjRFCi0gICAgICAgIG1vdmUgZW50cnksIHQzCi0gICAgICAgIGxlYXAgSlNDQ29uZmlnICsg
Y29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRl
Ojp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGEyCi0gICAgICAgIGptcCBbYTJdLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisgICAgICAgIG1vdmUgZW50cnks
IHQ1CisgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0ND
b25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0
clNpemUsIGE3CisgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0Vu
dHJ5UHRyVGFnCiAgICAgICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUK
ICAgICAgICAgX3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lOgotICAgICAgICBjYWxsIHQz
LCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGNhbGwgdDUsIEpTRW50cnlQdHJUYWcKICAgICBlbHNl
CiAgICAgICAgIGNhbGwgZW50cnksIEpTRW50cnlQdHJUYWcKICAgICBlbmQKQEAgLTIzNjAsNDEg
KzIzNjIsNTggQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUp
CiAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGJ0cW56
IHQwLCBub3RDZWxsTWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURb
dDBdLCB0MwotICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3Rv
cmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNl
ZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3JvIGNhbGxIZWxwZXIob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotICAg
IG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisjIHQ1IGhvbGRzIG1ldGFkYXRh
LgorbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBpbnZva2VD
YWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKQorICAgIGdldENhbGxlZSh0MSkKIAotICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0
aExpbmtCaXRbdDVdLCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQz
KQotICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQxLCB0MCkKIAorICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lCiAgICAgZ2V0QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAgICAgbmVn
cCB0MwogICAgIGFkZHAgY2ZyLCB0MwotICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgIGdl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKQotICAgIHN0b3JlUEMoKQogICAgIHN0b3Jl
aSB0MiwgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3QzXQorCisg
ICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3VyZSBzcC4K
KyAgICBzdG9yZVBDKCkKKyAgICBzdG9yZXEgdDAsIENhbGxlZVt0M10KICAgICBtb3ZlIHQzLCBz
cAotICAgIGlmIEFSTTY0RQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAgICBwcmVw
YXJlQ2FsbCh0MCwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGxvYWRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRh
cmdldFt0NV0sIHQwCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlz
cGF0Y2gsIHQwLCBKU0VudHJ5UHRyVGFnKQotICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwo
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFy
Z2V0W3Q1XSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJn
ZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5h
bWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQdHJUYWcp
Ci0gICAgZW5kCi0ub3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAgICBhZGRwIENhbGxlckZy
YW1lQW5kUENTaXplLCBzcAorCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDEKKyAgICBidHB6IHQxLCAo
Y29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHlt
b3JwaGljCisgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1cm4g
YWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNlcGFy
YXRlbHkuCisgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhp
YyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRo
dW5rIHNpZGUuCisgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwg
SlNFbnRyeVB0clRhZykKKyAgICBqbXAgLmdvUG9seW1vcnBoaWMKIAotbWFjcm8gY29tbW9uQ2Fs
bE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9s
b2d1ZSkKKy5ub3RQb2x5bW9ycGhpYzoKKyAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93Cisg
ICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgorICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworLm9wQ2FsbFNsb3c6Cisg
ICAgIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgIyB0MiBpcyBDYWxsTGlu
a0luZm8qCisgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgIGFkZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJ
bmZvKiBpbiB0MgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgbG9hZHAgQ29kZUJs
b2NrW2Nmcl0sIHQzCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQz
CisgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5h
bWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCitlbmQKKworbWFjcm8gY29t
bW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxs
LCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgcHJvbG9n
dWUpCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRh
ZGF0YSh0NSwgdDApCiAKQEAgLTI0MDMsNyArMjQyMiw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChv
cGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUp
CiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkK
LSAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAgICBnZXQobV9jYWxsZWUs
IGRzdCkKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3Qp
CkBAIC0yNDE0LDEwICsyNDMzLDY3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBz
bG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAg
ICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogCi0g
ICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9w
cm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0
Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQorICAgICAgICAjIHQ1
IGhvbGRzIG1ldGFkYXRhCisgICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgs
IG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGws
IHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0
YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAg
ICBlbmQpCiBlbmQKIAorbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBnZXQs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCwgaW52
b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwpCisgICAgY2FsbFNs
b3dQYXRoKGZyYW1lU2xvd1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93
X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgIyBjYWxsZWVGcmFtZSBpbiByMQorICAg
IGlmIEpTVkFMVUU2NAorICAgICAgICBtb3ZlIHIxLCBzcAorICAgIGVsc2UKKyAgICAgICAgIyBU
aGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUgZG93biBieSBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSB0byBhbGlnbgorICAgICAgICBpZiBBUk12NworICAgICAgICAgICAgc3Vi
cCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCisgICAgICAgICAgICBtb3ZlIHQyLCBzcAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwg
c3AKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgY2FsbENhbGxTbG93UGF0aCgKKyAgICAgICAg
c2xvd1BhdGgsCisgICAgICAgICMgVGhvc2UgYXJlIHIwIGFuZCByMQorICAgICAgICBtYWNybyAo
cmVzdG9yZWRQQ09yVGhyb3csIGNhbGxlZUZyYW1lUHRyKQorICAgICAgICAgICAgYnRweiBjYWxs
ZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAorICAgICAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJD
Q2FsbCgpCisgICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAorICAgICAgICAgICAg
Z2V0KG1fY2FsbGVlLCB0MSkKKyAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDEsIHQwKQorICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisgICAgICAgICAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JD
b2RlQmxvY2tbdDVdLCB0MQorICAgICAgICAgICAgYnRweiB0MSwgKGNvbnN0ZXhwciBDYWxsTGlu
a0luZm86OnBvbHltb3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9ycGhpYworICAgICAgICAg
ICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1cm4gYWRkcmVzcy4g
U28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNlcGFyYXRlbHkuCisg
ICAgICAgICAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGlj
IGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1
bmsgc2lkZS4KKyAgICAgICAgICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlz
cGF0Y2gsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAgICBqbXAgLmdvUG9seW1vcnBoaWMKKwor
ICAgICAgICAubm90UG9seW1vcnBoaWM6CisgICAgICAgICAgICBicW5lcSB0MCwgdDEsIC5vcENh
bGxTbG93CisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKKworICAgICAg
ICAuZ29Qb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlv
blt0NV0sIHQ1CisgICAgICAgICAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwg
dDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisgICAgICAgIC5vcENhbGxTbG93OgorICAgICAgICAg
ICAgIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgICAgICAgICAjIHQyIGlz
IENhbGxMaW5rSW5mbyoKKyAgICAgICAgICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmpl
Y3QKKyAgICAgICAgICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5r
SW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBpbiB0MgorICAgICAgICAgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3Rp
bmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MworICAg
ICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisgICAgICAg
ICAgICBwcmVwYXJlU2xvd0NhbGwoKQorICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVv
cGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRz
dFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRyVGFnKQorICAgICAgICAu
ZG9udFVwZGF0ZVNQOgorICAgICAgICAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lCisgICAgICAgIGVuZCkKK2VuZAorCiBsbGludE9wKG9wX3JldCwgT3BSZXQs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGls
b2d1ZSgpCiAgICAgZ2V0KG1fdmFsdWUsIHQyKQpAQCAtMzA0Niw4ICszMTIyLDggQEAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJhdG9yT3BlbiwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QKICAgICBlbmQKIAotCi0gICAg
Y2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29w
ZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBw
cmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRh
dGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50
SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVy
KG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBP
cEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1Jl
Z3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENo
ZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0
YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKICAg
ICBtYWNybyBzdG9yZU5leHRBbmREaXNwYXRjaCh2YWx1ZSkKQEAgLTMxMDQsNyArMzE4MCw4IEBA
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3BJdGVyYXRvck5leHQsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgZW5kCiAKICAgICAjIFVzZSBtX3ZhbHVlIHNs
b3QgYXMgYSB0bXAgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHRvIGl0IGxhdGVyLgotICAg
IGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9u
ZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBw
cmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRh
dGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50
SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVy
KG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBP
cEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJl
Z3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVn
dWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hl
Y2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3Rh
cnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0OgogICAg
IG1hY3JvIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUoZG9uZVZhbHVlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgppbmRleCBjYWQyMTVhZTM0M2NjODZiM2ExMGE1
ZmFmNjYyODQyNGE5YzAyZjI4Li5jNzAxNjY0YWIyYmZmZjIwN2QxMmU1ZTIyMmY5NjRjZmE5MTJh
MmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5y
YgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgpAQCAtNTcy
LDYgKzU3MiwxNCBAQCBkZWYgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9pZChvcGVyYW5kcykKICAg
ICAkYXNtLnB1dGMgIiN7b3BlcmFuZHNbMF0uY0xhYmVsfSgje29wZXJhbmRzWzFdLmNsRHVtcH0s
ICN7b3BlcmFuZHNbMl0uY2xEdW1wfSk7IgogZW5kCiAKK2RlZiBjbG9vcEVtaXRDYWxsU2xvd1Bh
dGg0KG9wZXJhbmRzKQorICAgICRhc20ucHV0YyAieyIKKyAgICAkYXNtLnB1dGMgIiAgICBjbG9v
cFN0YWNrLnNldEN1cnJlbnRTdGFja1BvaW50ZXIoc3AudnAoKSk7IgorICAgICRhc20ucHV0YyAi
ICAgIFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSAje29wZXJhbmRzWzBdLmNMYWJlbH0oI3tv
cGVyYW5kc1sxXS5jbER1bXB9LCAje29wZXJhbmRzWzJdLmNsRHVtcH0sICN7b3BlcmFuZHNbM10u
Y2xEdW1wfSwgI3tvcGVyYW5kc1s0XS5jbER1bXB9KTsiCisgICAgJGFzbS5wdXRjICIgICAgZGVj
b2RlUmVzdWx0KHJlc3VsdCwgdDAsIHQxKTsiCisgICAgJGFzbS5wdXRjICJ9IgorZW5kCisKIGNs
YXNzIEluc3RydWN0aW9uCiAgICAgZGVmIGxvd2VyQ19MT09QCiAgICAgICAgIGNhc2Ugb3Bjb2Rl
CkBAIC0xMTc1LDYgKzExODMsOSBAQCBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgd2hlbiAiY2xv
b3BDYWxsU2xvd1BhdGhWb2lkIgogICAgICAgICAgICAgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9p
ZChvcGVyYW5kcykKIAorICAgICAgICB3aGVuICJjbG9vcENhbGxTbG93UGF0aDQiCisgICAgICAg
ICAgICBjbG9vcEVtaXRDYWxsU2xvd1BhdGg0KG9wZXJhbmRzKQorCiAgICAgICAgICMgRm9yIGRl
YnVnZ2luZyBvbmx5LiBUaGlzIGlzIHVzZWQgdG8gaW5zZXJ0IGluc3RydW1lbnRhdGlvbiBpbnRv
IHRoZQogICAgICAgICAjIGdlbmVyYXRlZCBMTEludEFzc2VtYmx5LmggZHVyaW5nIGxsaW50IGRl
dmVsb3BtZW50IG9ubHkuIERvIG5vdCB1c2UKICAgICAgICAgIyBmb3IgcHJvZHVjdGlvbiBjb2Rl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rp
b25zLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJi
CmluZGV4IDljYmE1ZDY4ZjNjYWQzMWNmYTJkOTZlYTRjOWJiYThkZmU5ZGE5YjIuLmMwMGI1MTZi
MzNlYzVhZDEyOWQ1NmMzZmZkMjNlOWY1ZWMyMDVmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKQEAgLTQ1OSw2ICs0NTksNyBAQAog
ICAgICAiY2xvb3BDYWxsTmF0aXZlIiwgICAgICAgICAjIG9wZXJhbmRzOiBjYWxsZWUKICAgICAg
ImNsb29wQ2FsbFNsb3dQYXRoIiwgICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgY3VycmVu
dEZyYW1lLCBjdXJyZW50UEMKICAgICAgImNsb29wQ2FsbFNsb3dQYXRoVm9pZCIsICAgIyBvcGVy
YW5kczogY2FsbFRhcmdldCwgY3VycmVudEZyYW1lLCBjdXJyZW50UEMKKyAgICAgImNsb29wQ2Fs
bFNsb3dQYXRoNCIsICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgYTAsIGExLCBhMiwgYTMK
IAogICAgICAjIEZvciBkZWJ1Z2dpbmcgb25seToKICAgICAgIyBUYWtlcyBubyBvcGVyYW5kcyBi
dXQgc2ltcGx5IGVtaXRzIHdoYXRldmVyIGZvbGxvd3MgaW4gLy8gY29tbWVudHMgYXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCmluZGV4IDk1ODEw
NWQzMjY2ZGRmZjg1YmU1ZDc2ZDg3Y2RlNWNiMzMxMzE0YzMuLjQ4ZmQ5MmY4YjZhOGVkMjk0NGE3
MjQ4YjE1N2QyYWY3Mjc3M2M1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZUJhc2UuaApAQCAtNTcsNiArNTcsNyBAQCBpbmxpbmUgYm9vbCBpc0NhbGwo
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogCiBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1
YmxpYyBKU0NlbGwgewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBwcm90ZWN0
ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5oCmluZGV4IDVhYTU0MmExMmYyNzFkYmRmZjAyMGI5MTBlZGJjYzlhMTFjODM2NTYuLjJl
OWI1MDY2MDVjZmM2ZjFjNWVkZDIyZGFkOTczZTczZWFhOGY2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlIDx3dGYvQm94Lmg+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKaW5kZXggZjZhMDViMDY1ZTMyZDhhZWNkNTY3YmY2
YWI3NGFhZTYzODk5Nzc3OC4uZTQ3NzkyYjg3NjRlOTFkNTA2MTBlNGNkZGFlMzIzMWMxNDU5ZTIw
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaApAQCAtMzMsNiArMzMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB2KGppdENhZ2VQdHIsIE5vUHRyVGFnKSBcCiAgICAgdih0YWls
Q2FsbEpTRW50cnlQdHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50cnlTbG93
UGF0aFB0clRhZywgTm9QdHJUYWcpIFwKKyAgICB2KHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRy
eVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KGxvb3BPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAg
ICB2KGVudHJ5T1NSRW50cnksIE5vUHRyVGFnKSBcCiAgICAgdih3YXNtT1NSRW50cnksIE5vUHRy
VGFnKSBcCkBAIC00NiwyMCArNDcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgSlND
X0pTX0dBVEVfT1BDT0RFUyh2KSBcCiAgICAgdihvcF9jYWxsLCBKU0VudHJ5UHRyVGFnKSBcCi0g
ICAgdihvcF90YWlsX2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NvbnN0cnVjdCwg
SlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfaXRlcmF0b3JfbmV4dCwgSlNFbnRyeVB0clRhZykg
XAogICAgIHYob3BfaXRlcmF0b3Jfb3BlbiwgSlNFbnRyeVB0clRhZykgXAotICAgIHYob3BfY2Fs
bF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF9zbG93
LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NvbnN0cnVjdF9zbG93LCBKU0Vu
dHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5
U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50
cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
X3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3ZhcmFy
Z3Nfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3ZhcmFyZ3Ms
IEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzLCBKU0VudHJ5UHRy
VGFnKSBcCisgICAgdihvcF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3Rh
aWxfY2FsbF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3Rfc2xvdywg
SlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5UHRy
VGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAg
ICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWls
X2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHNfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3Ry
dWN0X3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY2FsbF9ldmFsX3Ns
b3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93
LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywg
SlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5Y2Y1ZmVhMDE5ODQ5ZGI2ZTY2MDkx
MGJiOTQ1MWNkMjdjMjVmYmM1Li5lYzQ4MjJmNWE5MDNkNGZiODVjYjQ4NDFhNGNkNjhmMGMxMGJm
YmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xMzgsNiArMTM4LDcg
QEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUu
aCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludEV4Y2VwdGlvbnMuaCIK
ICNpbmNsdWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgogI2luY2x1ZGUgIk1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpA
QCAtOTEwLDYgKzkxMSw0MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
Vk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZAogICAgIHJldHVybiBM
TEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9j
b25zdHJ1Y3RfdHJhbXBvbGluZSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiBWTTo6Z2V0Q1RJTGlua0NhbGwoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYg
KE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlm
CisgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X2xpbmtf
Y2FsbF90cmFtcG9saW5lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IFZNOjpnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKQoreworI2lmIEVO
QUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0
Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnRlbXBsYXRl
IHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6OmNh
bGxUb1Rocm93KCp0aGlzKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworfQor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IFZNOjpnZXRDVElW
aXJ0dWFsQ2FsbChDYWxsTW9kZSBjYWxsTW9kZSkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvcigqdGhp
cywgY2FsbE1vZGUpOworI2VuZGlmCisgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAgIGNhc2Ug
Q2FsbE1vZGU6OlJlZ3VsYXI6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworICAgIGNh
c2UgQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZSk7Cisg
ICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1w
b2xpbmUpOworICAgIH0KKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsKK30KKwogVk06OkNsaWVu
dERhdGE6On5DbGllbnREYXRhKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmlu
ZGV4IDllZjM4MmM2MGVlODM0ZmNiYjFkOTA4MWM3ODE4ZmQ3ODY3ZmE0MDguLjNhYmY3MTFhNjU1
MmJlNGIzMWFmZTQ3ZTA1OWYzMzFlMDg5OTE5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaApAQCAtMTA2LDYgKzEwNiw4IEBAIGNsYXNzIEJhc2ljQmxvY2tMb2NhdGlvbjsKIGNsYXNz
IEJ1aWx0aW5FeGVjdXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBj
bGFzcyBDYWxsRnJhbWU7CitjbGFzcyBDYWxsTGlua0luZm87CitlbnVtIGNsYXNzIENhbGxNb2Rl
Owogc3RydWN0IENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgQ29kZUNhY2hlOwpAQCAtOTAyLDYgKzkwNCw5IEBAIGNsYXNzIFZNIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7
CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlv
biwgYm9vbCBjYW5Db25zdHJ1Y3QpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBn
ZXRDVElMaW5rQ2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFn
PiBnZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1YWxDYWxsKENhbGxN
b2RlKTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI0
M2ZkNzU5ZWIzNzU5MDU0N2EzOGRlOGVjMjIxNmM4MDJiMDJhYjYuLjFhOTQ0ODJmZjJjNjk1Zjg1
NzA5NzYxZjNiNjMyYzdiMjBmMDNhOWIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMTEtMTIgIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExp
bmtJbmZvIGluIExMSW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzI3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHN0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2Yt
cHJveHkuanM6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1z
ZWN0aW9uLmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudm0u
aXNXYXNtU3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2Fz
bS5qczoKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnZtLmlzV2Fz
bVN1cHBvcnRlZCk6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5n
UHJvZmlsZXIuanM6CisgICAgICAgIChkb2VzVHJlZUhhdmVTdGFja1RyYWNlKToKKyAgICAgICAg
KHJ1blRlc3QpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanM6
CisKIDIwMjEtMTEtMTEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW5saW5lIFJlZ0V4cC50ZXN0IEpJVCBjb2RlIGluIERGRyBhbmQgRlRMCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUt
b2YtcHJveHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8t
YmUtYXdhcmUtb2YtcHJveHkuanMKaW5kZXggNTBjYWVlZDExNDg0MjlmZDFiNWNlMGIwZmVhZTZi
ZGRkZTY3MTBiOC4uOTRkYWI0NmQyZDcxODRmMzVkNDNlMmRiNGEyZGQ1NjQxOThiZWZmNSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3
YXJlLW9mLXByb3h5LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1u
ZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcwpAQCAtMSw0ICsxLDQgQEAKLS8vQCBydW5EZWZh
dWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIC0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICIt
LXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAiLCAiLS10
aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA9MTAw
IiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZvckZUTE9w
dGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbj0x
MDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKKy8vQCBydW5E
ZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIiwgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxz
ZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAi
LCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJt
VXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZv
ckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXpl
U29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKIAog
ZnVuY3Rpb24gbWFpbigpIHsKICAgICBsZXQgdjE2MjsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3Ry
ZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzIGIvSlNUZXN0cy9zdHJl
c3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKaW5kZXggNjg5YTAwNWFi
NTU1YTFmYzYwMWE1NGU0ZWJmOTRlOTlhNjY4Zjc3ZS4uNWMyMjBmZDc2Y2RjNWM0MGU1OWNjNjZl
NTczNDJjNzJkOGM3ZjNhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJv
ZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmct
cHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKQEAgLTY5LDUgKzY5LDUgQEAKICAgICB2YXIg
d2FzbUVudHJ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRz
Ll9wYXJyb3QoMSk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRyeSwgWyJfc2lsbHkiLCAi
KHVua25vd24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8Pz4ud2FzbS1mdW5jdGlv
bltfYmFjb25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8Pz4ud2FzbS1mdW5jdGlv
bltfcGFycm90XSIsICJ3YXNtLXN0dWIiLCAiMjQiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRl
c3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25b
X2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25b
X3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwgIih1bmtub3duKSIsICJ3YXNt
RW50cnkiXSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxl
ci13YXNtLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qcwppbmRl
eCBjZDIxZjI4OGMxNDhhNGI3NDA1YmY4NjhkZWY5YjU0NTczNDA1MDQ1Li4wNmRmMDEyNDk1OTY5
ZTI4NDIxODc3ODY5MDEzNWJmMDkwMTBlYzZkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9z
YW1wbGluZy1wcm9maWxlci13YXNtLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXBy
b2ZpbGVyLXdhc20uanMKQEAgLTgsNSArOCw1IEBACiAgICAgdmFyIHdhc21FbnRyeSA9IGZ1bmN0
aW9uKCkgewogICAgICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5sb29wKDEwMDAwMDAwKTsK
ICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwg
Indhc20tc3R1YiIsICIwIiwgIndhc21FbnRyeSJdKTsKKyAgICBydW5UZXN0KHdhc21FbnRyeSwg
WyI8Pz4ud2FzbS1mdW5jdGlvblswXSIsICIodW5rbm93bikiLCAid2FzbUVudHJ5Il0pOwogfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9m
aWxlci5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmls
ZXIuanMKaW5kZXggOTY0MmRkYzdjMWU2ZjA2ZTNiMTMyNzljMGU0YTAyNWI1NGRjYWJmMS4uMWI5
MmU5NDg1NGFmNjNmNjdkMDhmNTQ4ODdjNTIxNzkxNGVlMmJmNSAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcworKysgYi9KU1Rl
c3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCkBAIC03MCwx
MSArNzAsMTMgQEAgZnVuY3Rpb24gY2hlY2sobm9kZSkgewogICAgIAogICAgIGxldCBub2RlID0g
dHJlZTsKICAgICBmb3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5ndGg7IGktLTsgKSB7CisgICAg
ICAgIGxldCBwcmV2ID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRyZW5bc3RhY2tU
cmFjZVtpXV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgaWYgKFZFUkJPU0Up
IHsKICAgICAgICAgICAgICAgICBwcmludCgiZmFpbGluZyBvbiAiICsgaSArICIgOiAiICsgc3Rh
Y2tUcmFjZVtpXSk7CiAgICAgICAgICAgICAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkodHJlZSkp
OworICAgICAgICAgICAgICAgIHByaW50KE9iamVjdC5rZXlzKHByZXYuY2hpbGRyZW4pKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4
LDcgKzExMCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3RhY2tUcmFjZU9yU3RyaW5nKSB7
CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgdGltZVRv
RmFpbCk7CiAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkocm9vdCwgdW5kZWZpbmVkLCAyKSk7Ci0g
ICAgZG9lc1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNlLCB0cnVlLCB0cnVlKTsK
KyAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2VPclN0cmluZywgdHJ1
ZSwgdHJ1ZSk7CiAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhY2sgdHJhY2UiKTsKIH0KIApk
aWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzIGIv
SlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCmluZGV4IDY4MDVlNjg5
ZjVjODc5ZTJjYTUwOWM4OGQzZTdiMzc2ZGUwOWZhYWEuLjMzYzg2YmYxY2RlOWE4ZGFiMTE4ZTBl
NGNiMGJhY2Q1OWI3NDkxZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0
cy9uYW1lU2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNl
Y3Rpb24uanMKQEAgLTY5LDQgKzY5LDQgQEAKIGFzc2VydC5lcShzdGFja3RyYWNlWzNdLCAiPD8+
Lndhc20tZnVuY3Rpb25bX2JhY29uXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVxKHN0YWNrdHJh
Y2VbNF0sICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV1AW3dhc20gY29kZV0iKTsKIGFzc2VydC5l
cShzdGFja3RyYWNlWzVdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF1AW3dhc20gY29kZV0i
KTsKLWFzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8v
IHdhc20gZW50cnkKK2Fzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFtuYXRpdmUg
Y29kZV0iKTsgLy8gd2FzbSBlbnRyeQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444130</attachid>
            <date>2021-11-12 18:19:43 -0800</date>
            <delta_ts>2021-11-12 18:52:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211112181943.patch</filename>
            <type>text/plain</type>
            <size>229949</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDVkZDgyYWRiMWUzNWI4NmIyZTdmMzk1ZTI4ZTMzNmE5YTk0MWE5Li5jMzVjMTg5NmYyMGI4NDk5
MTMwYTBkODA5MGUzZjE5NTJjMzUzNjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODAgQEAKKzIwMjEtMTEtMTIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludGVncmF0
ZXMgbm9ybWFsIENhbGxMaW5rSW5mbyBpbnRvIExMSW50IGFuZCByZW1vdmUgYWRob2MgTExJbnRD
YWxsTGlua0luZm8uCisgICAgICAgIFNvIHRoYXQgd2UgY2FuIHNpbXBsaWZ5IG91ciBJQyBzb2Z0
d2FyZSBzdGFjaywgYW5kIHVuaWZ5aW5nIGNhbGwgSUMgbWVjaGFuaXNtIGludG8gb25lIENhbGxM
aW5rSW5mby4KKworICAgICAgICAxLiBMTEludCBjYW4gZnVsbHkgdXNlIG91ciBwb2x5bW9ycGhp
YyBjYWxsIElDLCBhbmQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gcmVzZXQgY2FsbCBJQyB3aGVuCisg
ICAgICAgICAgIHRpZXJpbmcgdXAgZnJvbSBMTEludCB0byBCYXNlbGluZSBKSVQgc2luY2UgYm90
aCBub3cgdXNlcyB0aGUgc2FtZSBDYWxsTGlua0luZm8gZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAg
ICAgIERGRyBhbmQgRlRMIGNhbiBhbHNvIHJldHJpZXZlIGNhbGwgaW5mb3JtYXRpb24gZnJvbSB0
aGlzIENhbGxMaW5rSW5mby4KKyAgICAgICAgMi4gTExJbnQgdmFyYXJncyBjYWxscyBnZXQgdGhl
IHNhbWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIEJhc2VsaW5lLiBQcmV2aW91c2x5IGl0IGRv
ZXMgbm90IGhhdmUKKyAgICAgICAgICAgY2FsbCBJQy4KKyAgICAgICAgMy4gV2hlbiBKSVQgaXMg
ZGlzYWJsZWQsIHdlIGRpc2FibGUgcG9seW1vcnBoaWMgY2FsbCBJQyBzaW5jZSBpdCByZXF1aXJl
cyBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSBv
bmx5IHVzZSBtb25vbW9ycGhpYyBvbmUsIHdoaWNoIGlzIHRoZSBzYW1lIHRvIHRoZSBvbGQgTExJ
bnRDYWxsTGlua0luZm8uCisgICAgICAgIDQuIENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uIGlz
IHNldCB1cCBvbmx5IGFmdGVyIEJhc2VsaW5lIEpJVC4gV2UgYWRqdXN0IGNhbGwgSUMgY29kZSBz
byB0aGF0CisgICAgICAgICAgIHdlIG5vIGxvbmdlciByZWx5IG9uIGRvbmVMb2NhdGlvbiB3aGVu
IHVzaW5nIERhdGFJQy4gVGhpcyBhbGxvd3MgdXMgdG8gc21vb3RobHkgdGllcmluZyB1cAorICAg
ICAgICAgICBmcm9tIExMSW50IHRvIEJhc2VsaW5lIEpJVCB3aGlsZSB1c2luZyB0aGUgc2FtZSBD
YWxsTGlua0luZm8uCisgICAgICAgICAgIFdlIHNldCB1cCBkb25lTG9jYXRpb24gaW4gQmFzZWxp
bmUgSklUIGp1c3QgYmVjYXVzZSBERkcgT1NSIGV4aXQgcmVxdWlyZXMgd2hlbiBleGl0aW5nIHRv
CisgICAgICAgICAgIEJhc2VsaW5lIEpJVCBjb2RlLgorICAgICAgICA1LiBXZSByZW1vdmUgQ2Fs
bExpbmtJbmZvIGZyb20gSklUIGNvbnN0YW50IHBvb2wsIGFuZCB3ZSBzdG9yZSBDYWxsTGlua0lu
Zm8gaW4gbWV0YWRhdGEgc28gdGhhdAorICAgICAgICAgICBMTEludCBhbmQgQmFzZWxpbmUgSklU
IHF1aWNrbHkgYWNjZXNzIHRvIHRoYXQgYW5kIGtlZXBpbmcgdW5saW5rZWQgQmFzZWxpbmUgSklU
IHdvcmtpbmcuCisgICAgICAgIDYuIFdlIGltcGxlbWVudCBMTEludCB2ZXJzaW9uIG9mIGNhbGwg
SUMgdGh1bmtzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiBKSVQgaXMgZGlzYWJs
ZWQuCisKKyAgICAgICAgU3BlZWRvbWV0ZXIyIGlzIG5ldXRyYWwuIEpldFN0cmVhbTIgaXMgMC43
JSBwcm9ncmVzc2VkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJs
ZXIvQ29kZUxvY2F0aW9uLmg6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgor
ICAgICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IpOiBEZWxldGVkLgorICAgICAg
ICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5jcHA6CisgICAgICAgIChKU0M6OnNob3VsZER1bXBEaXNhc3NlbWJseUZv
cik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBjb25zdCk6CisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OmNhbGxMaW5rSW5mb0Zv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpjbGVhclN0dWIpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNl
dE1vbm9tb3JwaGljQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhckNh
bGxlZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5r
SW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OmVtaXRTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlh
bGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxD
YWxsRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0
dWIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmlzTGlua2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjpzdHViIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1cGRhdGVNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Zm9y
RWFjaERlcGVuZGVudENlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNl
dFNsb3dTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhclNs
b3dTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZN
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2Vk
QmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNh
Y2hlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0
aXNvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFz
ZWxpbmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTElu
dENhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxsTGlu
a0luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAg
KiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJu
UEMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6Cisg
ICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKToKKyAg
ICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaDoKKyAgICAgICAgKiBqaXQvSklULmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbyk6CisgICAgICAg
IChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9K
SVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChK
U0M6OkpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKToKKyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENhbGwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVw
YXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAgICAgICAgKEpTQzo6
bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU93bmVyKToKKyAgICAgICAg
KEpTQzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgor
ICAgICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6anNUb1dhc21JQ0NvZGVQ
dHIpOgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQ
b2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogaml0
L1JlcGF0Y2hJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpoYW5kbGVIb3N0Q2FsbCk6
CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1
bmN0aW9uKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpT
Qzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yUmVndWxh
ckNvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0ZvclRhaWxD
b25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1
Y3RDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAg
ICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmluaXRpYWxp
emUpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmxsaW50X2xpbmtfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF92aXJ0
dWFsX2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlSG9zdENhbGwpOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NT
ZXR1cCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAg
ICAgIChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpn
ZW5lcmljQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoK
KyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpj
cmVhdGVKU0dhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVhdGVUYWlsQ2FsbEdh
dGUpOgorICAgICAgICAoSlNDOjpMTEludDo6cmV0dXJuTG9jYXRpb25UaHVuayk6CisgICAgICAg
ICogbGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3BlcmF0b3IgQ2FsbExpbmtJbmZvKik6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIG9mZmxpbmVhc20vY2xvb3AucmI6
CisgICAgICAgICogb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmI6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlQmFzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
Lmg6CisgICAgICAgICogcnVudGltZS9HYXRlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElMaW5rQ2FsbCk6CisgICAgICAgIChKU0M6OlZNOjpn
ZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgpOgorICAgICAgICAoSlNDOjpWTTo6
Z2V0Q1RJVmlydHVhbENhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMS0xMS0x
MSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFZNOjp3cml0
ZUJhcnJpZXIoKSBhbmQgVk06Om11dGF0b3JGZW5jZSgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDEyYzRhNWM4Mjc3Y2E3NzAxZDg0OWVmZjY0NjdiZDg4Nzk1OTAwMDgu
LmNjNDFmYzAzZDBhMDg2Y2M3N2NlNGU3ZDAwMmRlMTdjODY0MzIwMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY1OSw3ICs2NTksNiBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGJ5dGVjb2RlL0ludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRh
LmgKICAgICBieXRlY29kZS9KdW1wVGFibGUuaAotICAgIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJ
bmZvLmgKICAgICBieXRlY29kZS9MTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuaAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKICAgICBi
eXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggODljOWMxNzRiYjIyM2IzNmMzOTZiYWZjNDZmZTExNjZhNjgyMGY0My4uOWJhY2FiZTU4OGJk
MGZkNzA3ODJiOGZhZjc4ZjkyNTRiMzFmOTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCQkwRjBDQUVGQzFFQzREQTZCMDA5NzBEMTIgLyogSlNI
ZWFwRmluYWxpemVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwQ0FFRkExRUM0REE2MjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXplclBy
aXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBDQUVGRjFFQzREQTg4MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDQUVGRTFFQzRE
QTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMw
IC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAw
QjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1
c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
MEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovOyB9OwogCQkwRjEyREUxMDE5
NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2Vw
dGlvbkZ1enouaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0
IC8qIERlZmVyR0MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTg2LDcgKzE4NSw2IEBACiAJCTBGMjRFNTQ0MTdFQTlGNTkwMEFCQjIxNyAvKiBH
UFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAv
KiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTRGMTdF
RTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1w
UmVnaXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NEExN0VFMjc0OTAwQUJC
MjE3IC8qIFJlcGF0Y2guaCAqLzsgfTsKIAkJMEYyNEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0MTdG
MEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMg
LyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4
MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovOyB9OwpAQCAt
MTE2MSw2ICsxMTU5LDcgQEAKIAkJNjUxMTIzMDcxNDA0NkIwQTAwMkIxMDFEIC8qIHRlc3RSZWdF
eHAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUx
MTIyRTUxNDA0NjlCQTAwMkIxMDFEIC8qIHRlc3RSZWdFeHAuY3BwICovOyB9OwogCQk2NTE0RjIx
OTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTE0RjIxNzE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNv
ZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzMDNENjMxNDQ3QjlFMTAwRDNGOTA0
IC8qIFBhcnNlclRva2Vucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0ZXJz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTNCQzQz
RTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NTcwRjVBMUFBNEMzRUEwMDlCM0My
MyAvKiBSZWdyZXNzMTQxMjc1Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU1NzBGNTkxQUE0QzAwQTAwOUIzQzIzIC8qIFJlZ3Jlc3MxNDEyNzUubW0g
Ki87IH07CiAJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3Q0Y0NTcxOUJGNjY2MjAw
NEFDQkYyIC8qIEpTQ2FsbGVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNjU4ODI0QUYxRTVDRkRCMDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1ODgyNEFFMUU1
Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyODUsNyArMTI4NCw2IEBACiAJCTg2NzA0QjQzMTJE
QjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCNDExMkRCOEE4MTAwQTlGRTdCIC8qIFlh
cnJTeW50YXhDaGVja2VyLmggKi87IH07CiAJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZ
YXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2NzA0QjdFMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjcwNEI4NzEy
REJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODAxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2NTNCQzQz
RjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIwIC8q
IFlhcnJKSVRSZWdpc3RlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODExMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBh
dHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
NzA0QjgzMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5
QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODY4OTE2QTkxNTVGMjg1NDAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MjAsNiArMTkx
OCw4IEBACiAJCUUzNzUwQ0M4MjUwMkU4N0UwMDZBMEFBQiAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
Mzc1MENDNzI1MDJFODdFMDA2QTBBQUIgLyogSW50bERhdGVUaW1lRm9ybWF0SW5saW5lcy5oICov
OyB9OwogCQlFMzc4REM4RDI3Mjc2Mjk0MDA0MjdCMEIgLyogSW50bE51bWJlckZvcm1hdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUQ3OTJGNjFC
NDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1hdC5jcHAgKi87IH07CiAJCUUzNzk0RTc2
MUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3OTRFNzQxQjc3RUI5NzAwNTU0M0FFIC8qIE1v
ZHVsZUFuYWx5emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJRTM3RTIwRTMyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzN0UyMEUwMjczRjU3NTMwMEY3
MDc1NyAvKiBSZXBhdGNoLmggKi87IH07CisJCUUzN0UyMEU1MjczRjU3NTMwMEY3MDc1NyAvKiBS
ZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTM3RTIwRTIyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2hJbmxpbmVzLmggKi87IH07
CiAJCUUzODM1MDBBMjM5MEQ5M0IwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzgzNTAwOTIzOTBEOTM3MDAzNjMx
NkQgLyogV2FzbUdsb2JhbC5oICovOyB9OwogCQlFMzg1MEIxNTIyNkVENjQxMDA5QUJGOUMgLyog
REZHTWluaWZpZWRJRElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzODUwQjE0MjI2RUQ2M0UwMDlBQkY5QyAvKiBERkdNaW5pZmllZElESW5s
aW5lcy5oICovOyB9OwogCQlFMzg2NTJFMzIzN0NBMEM5MDBFMUQ1RUUgLyogQmxvY2tEaXJlY3Rv
cnlCaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
Mzg2NTJFMjIzN0NBMEM4MDBFMUQ1RUUgLyogQmxvY2tEaXJlY3RvcnlCaXRzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzOTEsNyArMjM5MSw2
IEBACiAJCTBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZpbmFsaXplckNhbGxiYWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFD
MCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyog
TExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJ
bnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMEYxQTIx
QzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJDdXN0b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlv
bkZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9u
RnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBFMTk3OUQ1RkQw
MDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2VwdGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NTQs
OCArMjQ1Myw2IEBACiAJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25z
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE9wZXJhdGlvbnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0NjE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
SVRPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ4MTdF
RTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGVtcFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTUzMTdGMEI3
MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lQ2FsbEZyYW1lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFt
ZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQwMzUsNiArNDAzMiw3IEBACiAJ
CTY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEE2NERPcGNvZGUuY3BwOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NTJBM0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBNjRET3Bjb2RlLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvQVJNNjQv
QTY0RE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTMwM0Q2MzE0NDdC
OUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhcnNlclRva2Vucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2NTNC
QzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySklUUmVnaXN0ZXJzLmg7IHBhdGggPSB5YXJyL1lhcnJK
SVRSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0MDBDMTAwQTY5
QkFGMjAwNTA5ODg3IC8qIFByb3BlcnR5TmFtZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU5hbWVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2NTQwQzc5QzFCODJEOTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJBdE9mZnNl
dExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQwQzc5RDFCODJEOTlE
MDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVnaXN0ZXJBdE9mZnNldExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQyOTUsNyArNDI5Myw2IEBACiAJCTg2NzA0QjdFMTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJySW50ZXJwcmV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFy
ckludGVycHJldGVyLmg7IHBhdGggPSB5YXJyL1lhcnJJbnRlcnByZXRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI3RjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBZYXJySklULmNwcDsgcGF0
aCA9IHlhcnIvWWFyckpJVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0
QjgwMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFlhcnJKSVQuaDsgcGF0aCA9IHlhcnIvWWFyckpJVC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk2NTNCQzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lz
dGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySklUUmVnaXN0ZXJz
Lmg7IHBhdGggPSB5YXJyL1lhcnJKSVRSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODY3MDRCODExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyclBhcnNlci5oOyBwYXRoID0geWFyci9ZYXJy
UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjgyMTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJyUGF0dGVybi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBZYXJyUGF0dGVybi5jcHA7IHBhdGggPSB5YXJyL1lhcnJQYXR0ZXJuLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCODMxMkRCQTMzNzAwQTlGRTdCIC8qIFlh
cnJQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJQYXR0ZXJu
Lmg7IHBhdGggPSB5YXJyL1lhcnJQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01MjQ2LDYgKzUyNDMsOSBAQAogCQlFMzc5NEU3MzFCNzdFQjk3MDA1NTQzQUUgLyogTW9k
dWxlQW5hbHl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9k
dWxlQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc5NEU3NDFC
NzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTW9kdWxlQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTM3Q0ZCMkQyMkYyN0M1NzAwOUE3QjM4IC8qIFdhc21Db21waWxhdGlvbk1vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvbXBpbGF0aW9uTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUzN0UyMEUwMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTM3RTIwRTEyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzN0UyMEUyMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNo
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzgwQTc2QjFEQ0Q3MTk1MDAwRjg5
RTYgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1hY3JvQXNzZW1ibGVySGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzgwRDY2QjFGMTkyNDlEMDBBNTkwOTUgLyogQnVpbHRpbk5hbWVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0aW5OYW1lcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xv
YmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21HbG9iYWwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjQ1OCw4ICs2NDU4LDkgQEAKIAkJCQk2MjNBMzdFQjFCODdBN0JE
MDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAwMzMy
MzIgLyogUmVnaXN0ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIzMiAv
KiBSZWdpc3RlclNldC5oICovLAotCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBh
dGNoLmNwcCAqLywKLQkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICov
LAorCQkJCUUzN0UyMEUxMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoLmNwcCAqLywKKwkJCQlF
MzdFMjBFMDI3M0Y1NzUzMDBGNzA3NTcgLyogUmVwYXRjaC5oICovLAorCQkJCUUzN0UyMEUyMjcz
RjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoSW5saW5lcy5oICovLAogCQkJCTBGQTdBOEVEMThDRTRG
RDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGMjRF
NTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywKIAkJ
CQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwICovLApA
QCAtODgxNSw3ICs4ODE2LDYgQEAKIAkJCQkwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQlFMzYzN0VFODIzNkU1NkIwMDA5NkJEMEEg
LyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8sCiAJCQkJRTM2MzdFRTcyMzZFNTZCMDAwOTZCRDBB
IC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLywKLQkJCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQg
LyogTExJbnRDYWxsTGlua0luZm8uaCAqLywKIAkJCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQg
LyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLywK
IAkJCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMTRGNzlGNkUyMTZFQUQ1MDAwMDQ2RDM5
IC8qIE1ldGFkYXRhVGFibGUuY3BwICovLApAQCAtOTc0Nyw2ICs5NzQ3LDcgQEAKIAkJCQlGRUEw
ODYyMTE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQcmltaXRpdmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJENERERTE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZFOUZBN0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZlckdDSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyREYxN0NEODc3QzAwOENDOTNDIC8qIERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MDY4NjUxQUUy
NDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTM0NjM4NzUxRTcwRERFQzAwRjEyQUMxIC8qIERlZmVycmVkV29ya1RpbWVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEwMzIzLDggKzEwMzI0LDYgQEAKIAkJCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJG
REQgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8q
IFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAotCQkJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAv
KiBZYXJySklUUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlGQjhCQTFDOTlEQTdD
MDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUREN0Y1
MjNDMUJCQjUwMDkwNUYxMyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtMTA1MjYsNyArMTA1MjUsNiBAQAogCQkJCUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQw
QSAvKiBMaW5rVGltZUNvbnN0YW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2
MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBERTlB
MDkxQkU3RDY5RTAwNUQ4OUQ5IC8qIExMSW50QXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0
YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDcyNiw3ICsxMDcyNCw4IEBACiAJCQkJQTVCQTE1RTgx
ODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTkyRjU2QjcxRTRFODRCMjAwMzU5NTNCIC8qIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMjRFNTUxMTdFRTI3NDkw
MEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzdFMjBFMzI3M0Y1NzUz
MDBGNzA3NTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTM3RTIwRTUyNzNGNTc1
MzAwRjcwNzU3IC8qIFJlcGF0Y2hJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTlGM0ZC
OTI2MTNDNzg5MDA2OUU4OUYgLyogUmVzb3VyY2VFeGhhdXN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkUzQjY0MkYyNUQ2RkI0RDAwMUFEREI0IC8qIFJvb3RNYXJrUmVhc29uLmggaW4g
SGVhZGVycyAqLywKQEAgLTEwNzg0LDcgKzEwNzgzLDYgQEAKIAkJCQlCQzE4QzQ2MzBFMTZGNUNE
MDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZD
MTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0u
aCBpbiBIZWFkZXJzICovLAotCQkJCUZFOUZBN0M1MjczQzhCMjYwMDVEOUU3MCAvKiBEZWZlckdD
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8q
IFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlF
MTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMTA1Miw2ICsxMTA1MCw4IEBACiAJCQkJRTMyODJCQkIxRkU5MzBB
RjAwRURBRjcxIC8qIFlhcnJFcnJvckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzRkY5QkM3
MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0
Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywK
KwkJCQk2NTNCQzQzRjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTNGMEZDOTUyNkExMUI0QTAwOTlGRkEwIC8qIFlhcnJNYXRjaGluZ0Nv
bnRleHRIb2xkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBB
OUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRpb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgKaW5kZXggYTZjYTVjODFjNTEwOTVmODE5
OGQ5YjgyZGIxNGE1ODFhMjVjZTYwOS4uMDc1MDRiYTA0ZTU5YjZkMWRjYTIzNTg4YmVmYjU0ZGYx
OTE4NWEyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2Rl
TG9jYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0NvZGVMb2Nh
dGlvbi5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCIKIAotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0KIG5hbWVzcGFjZSBKU0MgewogCiBlbnVt
IGNsYXNzIE5lYXJDYWxsTW9kZSA6IHVpbnQ4X3QgeyBSZWd1bGFyLCBUYWlsIH07CkBAIC0yNjks
NSArMjY3LDMgQEAgaW5saW5lIENvZGVMb2NhdGlvbkNvbnZlcnRpYmxlTG9hZDxyZXN1bHRUYWc+
IENvZGVMb2NhdGlvbkNvbW1vbjx0YWc+Ojpjb252ZXJ0aWIKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKaW5kZXggMDYyNDBlODc0MzYzODczYjlkZjJj
YzlmMzdmMzgyOTE4ZmU3ZTI5ZS4uZmY5MzA1ODlkYjI3MTE4MGQwOTllMjM1NmM5OTdkYzU5YjM1
NmU3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVk
ZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJXYXNtQ29tcGls
YXRpb25Nb2RlLmgiCiAKICNpZiBPUyhMSU5VWCkKICNpbmNsdWRlICJQZXJmTG9nLmgiCkBAIC00
MywyOSArNDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIHNpemVfdCBMaW5rQnVmZmVyOjpzX3Byb2Zp
bGVDdW1tdWxhdGl2ZUxpbmtlZFNpemVzW0xpbmtCdWZmZXI6Om51bWJlck9mUHJvZmlsZXNdOwog
c2l6ZV90IExpbmtCdWZmZXI6OnNfcHJvZmlsZUN1bW11bGF0aXZlTGlua2VkQ291bnRzW0xpbmtC
dWZmZXI6Om51bWJlck9mUHJvZmlsZXNdOwogCi1ib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBpZiAoY29kZUJsb2NrICYmIEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkgJiYgT3B0aW9uczo6ZHVtcERG
R0Rpc2Fzc2VtYmx5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKTsKLX0KLQotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
V2FzbTo6Q29tcGlsYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgaWYgKE9wdGlvbnM6OmFzeW5jRGlz
YXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1w
V2FzbURpc2Fzc2VtYmx5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlOgotICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6ZHVtcEJCUURpc2Fzc2VtYmx5KCk7Ci0gICAgY2FzZSBXYXNtOjpDb21w
aWxhdGlvbk1vZGU6Ok9NR01vZGU6Ci0gICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9N
R0Zvck9TUkVudHJ5TW9kZToKLSAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBPTUdEaXNhc3Nl
bWJseSgpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIExpbmtCdWZmZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGlua0J1
ZmZlcjo6ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5SW1wbCgpCiB7CiAgICAgcGVyZm9y
bUZpbmFsaXphdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuaAppbmRleCA1YTNmMDBmMDVjNjg1ODI5NTc3MjY2N2ZjMjIzNTY3ZjY4ZTkyYjg3Li4y
ODVkZjBkMWExODA5ZGIyMGI0Nzk0Y2QzMTIwNTllZmM2ZWUwMGUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApAQCAtNDMsMTIgKzQzLDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSBXYXNtIHsKLWVudW0gY2xhc3MgQ29tcGlsYXRp
b25Nb2RlIDogdWludDhfdDsKLX0KLQotY2xhc3MgQ29kZUJsb2NrOwotCiAvLyBMaW5rQnVmZmVy
OgogLy8KIC8vIFRoaXMgY2xhc3MgYXNzaXN0cyBpbiBsaW5raW5nIGNvZGUgZ2VuZXJhdGVkIGJ5
IHRoZSBtYWNybyBhc3NlbWJsZXIsIG9uY2UgY29kZSBnZW5lcmF0aW9uCkBAIC00NDYsOCArNDQw
LDYgQEAgY2xhc3MgTGlua0J1ZmZlciB7CiAgICAgICAgIDogKGxpbmtCdWZmZXJSZWZlcmVuY2Up
LmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseTxyZXN1bHRQdHJUYWc+KCkpCiAjZW5kaWYK
IAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7Ci0KICNkZWZpbmUg
RklOQUxJWkVfQ09ERV9GT1IoY29kZUJsb2NrLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQ
dHJUYWcsIC4uLikgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKChzaG91bGREdW1wRGlzYXNzZW1i
bHlGb3IoY29kZUJsb2NrKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkpLCBsaW5rQnVm
ZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIF9fVkFfQVJHU19fKQogCkBAIC00NzYsOCArNDY4
LDYgQEAgYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7CiAjZGVmaW5l
IEZJTkFMSVpFX1JFR0VYUF9DT0RFKGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywg
ZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKSAgXAogICAgIEZJTkFMSVpFX0NPREVfSUYoSlND
OjpPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkgfHwgSlNDOjpPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSB8fCBPcHRpb25zOjpkdW1wUmVnRXhwRGlzYXNzZW1ibHkoKSwgbGlua0J1ZmZlclJl
ZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBkYXRhTG9nRkFyZ3VtZW50c0ZvckhlYWRpbmcpCiAKLWJv
b2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9kZSk7Ci0KICNk
ZWZpbmUgRklOQUxJWkVfV0FTTV9DT0RFKGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRh
ZywgLi4uKSAgXAogICAgIEZJTkFMSVpFX0NPREVfSUYoKEpTQzo6T3B0aW9uczo6YXN5bmNEaXNh
c3NlbWJseSgpIHx8IEpTQzo6T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6
ZHVtcFdhc21EaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRyVGFn
LCBfX1ZBX0FSR1NfXykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCmluZGV4IDVkNTY3NDFlZmU2NjQyNmVm
Y2EyMDUyYWMyNTA5ODMyMjAyMzc3ZDAuLjcwZGIwZDAzOWVhN2VkNjExYzhhNmU1ZDgwODkxM2Yw
YWQ1YmQ1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5jcHAKQEAgLTI2LDggKzI2LDExIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAKKyNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNDUHRyVGFnLmgiCisjaW5jbHVkZSAiV2FzbUNvbXBpbGF0
aW9uTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKQEAgLTYzLDUgKzY2LDI4IEBAIENTdHJpbmcgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
QmFzZTo6ZGlzYXNzZW1ibHkoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5CiAgICAg
cmV0dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAorYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBE
RkdEaXNhc3NlbWJseSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9y
KFdhc206OkNvbXBpbGF0aW9uTW9kZSBtb2RlKQoreworICAgIGlmIChPcHRpb25zOjphc3luY0Rp
c2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVt
cFdhc21EaXNhc3NlbWJseSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKKyAgICAgICAg
cmV0dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOworICAgIGNhc2UgV2FzbTo6Q29t
cGlsYXRpb25Nb2RlOjpPTUdNb2RlOgorICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpP
TUdGb3JPU1JFbnRyeU1vZGU6CisgICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wT01HRGlzYXNz
ZW1ibHkoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKaW5kZXggOTI1
NTkxOGIxYmExNzVhMWY0OWRjMzAyNWVjNmZjYTg4OTM5ZDM2NC4uMWVhMzI0NTQxNWFiMDhhNDVj
N2QzZTU5NTk2MGM0NDViMTlmZjc1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCkBAIC01NCw2ICs1NCwxMSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20geworZW51bSBjbGFzcyBDb21w
aWxhdGlvbk1vZGUgOiB1aW50OF90OworfSAvLyBuYW1lc3BhY2UgV2FzbQorCitjbGFzcyBDb2Rl
QmxvY2s7CiB0ZW1wbGF0ZTxQdHJUYWc+IGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIAog
ZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwpAQCAtMzc3LDcgKzM4MiwxMCBAQCBjbGFzcyBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2Ugewog
CiAgICAgdm9pZCBkdW1wV2l0aE5hbWUoY29uc3QgY2hhciogbmFtZSwgUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ckJhc2U6OmR1bXBX
aXRoTmFtZShleGVjdXRhYmxlQWRkcmVzcygpLCBkYXRhTG9jYXRpb24oKSwgbmFtZSwgb3V0KTsK
KyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJC
YXNlOjpkdW1wV2l0aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5h
bWUsIG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ckJhc2U6OmR1bXBXaXRoTmFtZShudWxscHRyLCBudWxscHRyLCBuYW1lLCBvdXQpOwogICAgIH0K
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCB7IGR1bXBXaXRoTmFtZSgi
Q29kZVB0ciIsIG91dCk7IH0KQEAgLTUzNyw2ICs1NDUsOSBAQCBpbmxpbmUgRnVuY3Rpb25QdHI8
dGFnPjo6RnVuY3Rpb25QdHIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gcHRyKQogewogfQog
Citib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb2RlQmxvY2sqKTsKK2Jvb2wgc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKFdhc206OkNvbXBpbGF0aW9uTW9kZSk7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IGJlMmU4YzgxMWQ2ZGRkMGMxODRiYTVlZDRkOTU3
OTM2ZmQyMjU4YTIuLjAxMzg2MGI2NmMyYjE5YThjYmI1OTUzYTVkMGU0NGRkMjc3ZmJkOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAt
MjYsNiArMjYsNyBAQAogCiAgICAgOkJhc2ljQmxvY2tMb2NhdGlvbiwKICAgICA6Qm91bmRMYWJl
bCwKKyAgICA6Q2FsbExpbmtJbmZvLAogICAgIDpEZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9k
ZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lvbiwKQEAgLTQ0LDcgKzQ1LDYgQEAKICAgICA6
SlNTY29wZSwKICAgICA6SlNUeXBlLAogICAgIDpKU1ZhbHVlLAotICAgIDpMTEludENhbGxMaW5r
SW5mbywKICAgICA6UmVzdWx0VHlwZSwKICAgICA6T3BlcmFuZFR5cGVzLAogICAgIDpQcml2YXRl
RmllbGRQdXRLaW5kLApAQCAtODQwLDcgKzg0MCw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVk
LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENh
bGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCiAgICAgfQogCkBAIC04NTIsNyArODUzLDggQEAKICAgICAgICAgYXJndjogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2Fs
bExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKICAgICB9CiAKQEAgLTg2NSw3ICs4NjcsOCBAQAogICAgICAgICBlY21hTW9kZTogRUNNQU1v
ZGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBjYWxsTGlua0luZm86IExMSW50
Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKICAgICB9CiAKQEAgLTg3OSw2ICs4ODIsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzog
aW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxs
TGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBw
cm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTkwMCw2ICs5MDQsNyBAQAogICAgICAg
ICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgY2Fs
bExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9m
aWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfSwKQEAgLTkyMSw2ICs5
MjYsNyBAQAogICAgICAgICBmaXJzdFZhckFyZzogaW50LAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCiAgICAgICAgIGFycmF5UHJv
ZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAg
fQpAQCAtOTMzLDcgKzkzOSw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywK
KyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmls
ZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgfQog
CkBAIC05NDcsNiArOTU0LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAg
ICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQ
cm9maWxlLAogICAgIH0sCkBAIC0xMjQ5LDcgKzEyNTcsOCBAQAogICAgIG1ldGFkYXRhOiB7CiAg
ICAgICAgIGl0ZXJhdGlvbk1ldGFkYXRhOiBJdGVyYXRpb25Nb2RlTWV0YWRhdGEsCiAgICAgICAg
IGl0ZXJhYmxlUHJvZmlsZTogVmFsdWVQcm9maWxlLAotICAgICAgICBjYWxsTGlua0luZm86IExM
SW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKKyAg
ICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIGl0ZXJhdG9yUHJvZmls
ZTogVmFsdWVQcm9maWxlLAogICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRh
dGEsCiAgICAgICAgIG5leHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCkBAIC0xMjcyLDcgKzEyODEs
OCBAQAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGl0ZXJhdGlvbk1ldGFkYXRhOiBJdGVyYXRp
b25Nb2RlTWV0YWRhdGEsCiAgICAgICAgIGl0ZXJhYmxlUHJvZmlsZTogQXJyYXlQcm9maWxlLAot
ICAgICAgICBjYWxsTGlua0luZm86IExMSW50Q2FsbExpbmtJbmZvLAorICAgICAgICBjYWxsTGlu
a0luZm86IENhbGxMaW5rSW5mbywKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUs
CiAgICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCiAgICAgICAgIGRvbmVN
b2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIGRvbmVQcm9maWxlOiBW
YWx1ZVByb2ZpbGUsCkBAIC0xMzkzLDYgKzE0MDMsOSBAQAogb3AgOmxsaW50X2Nsb29wX2RpZF9y
ZXR1cm5fZnJvbV9qc180NAogb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180NQog
b3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180Ngorb3AgOmxsaW50X2Nsb29wX2Rp
ZF9yZXR1cm5fZnJvbV9qc180Nworb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180
OAorb3AgOmxsaW50X2Nsb29wX2RpZF9yZXR1cm5fZnJvbV9qc180OQogCiBlbmRfc2VjdGlvbiA6
Q0xvb3BIZWxwZXJzCiAKQEAgLTE0MTUsNiArMTQyOCwxMCBAQAogb3AgOmxsaW50X25hdGl2ZV9j
b25zdHJ1Y3RfdHJhbXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJh
bXBvbGluZQogb3AgOmxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5l
CitvcCA6bGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NhbGxf
dHJhbXBvbGluZQorb3AgOmxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUKK29wIDps
bGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lCiBvcCA6Y2hlY2twb2ludF9vc3JfZXhpdF90
cmFtcG9saW5lCiBvcCA6bm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUKQEAgLTE0MjMsNiArMTQ0
MCw4IEBACiBvcCA6bGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbgogb3AgOm9wX2NhbGxf
cmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfY29uc3RydWN0X3JldHVybl9sb2NhdGlvbgorb3AgOm9w
X2NhbGxfdmFyYXJnc19yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19y
ZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24K
IG9wIDpvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbgogb3AgOm9wX2dl
dF9ieV9pZF9yZXR1cm5fbG9jYXRpb24KQEAgLTE0MzgsMTUgKzE0NTcsMTUgQEAKIG9wIDpvcF9j
b25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9pdGVyYXRvcl9vcGVuX3Nsb3df
cmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0b3JfbmV4dF9zbG93X3JldHVybl9sb2NhdGlv
bgotb3AgOm9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxfc2xv
d19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xv
d19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9s
b2NhdGlvbgogb3AgOm9wX2NhbGxfZXZhbF9zbG93X3JldHVybl9sb2NhdGlvbgogCiBvcCA6anNf
dHJhbXBvbGluZV9vcF9jYWxsCi1vcCA6anNfdHJhbXBvbGluZV9vcF90YWlsX2NhbGwKIG9wIDpq
c190cmFtcG9saW5lX29wX2NvbnN0cnVjdAorb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJh
cmdzCitvcCA6anNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3RfdmFyYXJncwogb3AgOmpzX3RyYW1w
b2xpbmVfb3BfaXRlcmF0b3JfbmV4dAogb3AgOmpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3Bl
bgogb3AgOmpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2lu
dC5oCmluZGV4IDRmNDdjOGJjY2Y4ZTU3NDhhYTliMGYzNmU2ZjM2MzA1YWRjMzAwMTEuLjI3MGNk
NmYxZDAyZjQ0ZDUzZGIzZTZhYTYzYWZmYTE1ZTBjMDkyNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hl
Y2twb2ludC5oCkBAIC0xODAsNyArMTgwLDcgQEAgcHRyZGlmZl90IHN0YWNrT2Zmc2V0SW5SZWdp
c3RlcnNGb3JDYWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgdW5zaWduZWQgY2hlY2sKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KLUxMSW50Q2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm9Gb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNo
ZWNrcG9pbnRJbmRleCkKK0NhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0
YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CiAgICAgcmV0dXJuIG1ldGFkYXRhLm1fY2FsbExpbmtJ
bmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNw
cAppbmRleCAzYjgwM2IzOGE3ODY5YjQ5Mzg5YzA3OTBhYmM4YmViOGQ0MGE1NThhLi5hMWFmY2Y5
MzhhNTFmMmJjMTcyZjBmZDIwMjcxMzJlNjcyZWVkOTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2lu
Y2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCi0j
aWYgRU5BQkxFKEpJVCkKIG5hbWVzcGFjZSBKU0MgewogCiBDYWxsTGlua0luZm86OkNhbGxUeXBl
IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3IoT3Bjb2RlSUQgb3Bjb2RlSUQpCkBAIC04MiwxMSAr
ODEsMTMgQEAgQ2FsbExpbmtJbmZvOjp+Q2FsbExpbmtJbmZvKCkKIAogdm9pZCBDYWxsTGlua0lu
Zm86OmNsZWFyU3R1YigpCiB7CisjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoIXN0dWIoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9zdHViLT5jbGVhckNhbGxOb2Rlc0Zvcih0aGlzKTsKICAg
ICBtX3N0dWIgPSBudWxscHRyOworI2VuZGlmCiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxp
bmsoVk0mIHZtKQpAQCAtMTEzLDE5ICsxMTQsMTkgQEAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpkb25lTG9jYXRpb24oKQogICAgIHJldHVybiBtX2Rv
bmVMb2NhdGlvbjsKIH0KIAotc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgcG9seW1vcnBoaWND
YWxsZWVNYXNrID0gMTsKLQogdm9pZCBDYWxsTGlua0luZm86OnNldE1vbm9tb3JwaGljQ2FsbGVl
KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
RGlyZWN0KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
Y2FsbGVlKSAmIHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgIG1fY2FsbGVlT3JDb2RlQmxv
Y2suc2V0KHZtLCBvd25lciwgY2FsbGVlKTsKIAotICAgIGlmIChpc0RhdGFJQygpKSAKKyAgICBp
ZiAoaXNEYXRhSUMoKSkKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5h
dGlvbiA9IGNvZGVQdHI7CiAgICAgZWxzZSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oY29kZVB0cikpOwogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiwgY2FsbGVl
KTsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtMTM1LDggKzEzNiwxMSBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6Y2xlYXJDYWxsZWUoKQogICAgIG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKICAg
ICBpZiAoaXNEYXRhSUMoKSkKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0
aW5hdGlvbiA9IG51bGxwdHI7Ci0gICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkpCisg
ICAgZWxzZSBpZiAoIWNsZWFyZWRCeUpldHRpc29uKCkpIHsKKyNpZiBFTkFCTEUoSklUKQogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIodS5jb2RlSUMubV9jYWxsZWVMb2Nh
dGlvbiwgbnVsbHB0cik7CisjZW5kaWYKKyAgICB9CiB9CiAKIEpTT2JqZWN0KiBDYWxsTGlua0lu
Zm86OmNhbGxlZSgpCkBAIC0yMjQsNiArMjI4LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0
V2VhayhWTSYgdm0pCiAgICAgCiAgICAgaWYgKGlzTGlua2VkKCkpIHsKICAgICAgICAgaWYgKHN0
dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICBpZiAoIXN0dWIoKS0+dmlzaXRX
ZWFrKHZtKSkgewogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCkBAIC0yMzQsNiArMjM5LDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgICAgICAgICAgICAg
dW5saW5rKHZtKTsKICAgICAgICAgICAgICAgICBtX2NsZWFyZWRCeUdDID0gdHJ1ZTsKICAgICAg
ICAgICAgIH0KKyNlbmRpZgogICAgICAgICB9IGVsc2UgaWYgKCF2bS5oZWFwLmlzTWFya2VkKG1f
Y2FsbGVlT3JDb2RlQmxvY2suZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoaXNEaXJlY3QoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKSB7
CkBAIC0yODAsMTMgKzI4NiwxNCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2
bSkKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogdm9pZCBDYWxsTGlua0luZm86OnNldEZy
YW1lU2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEmIHNodWZmbGVEYXRhKQog
ewogICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURh
dGE+KHNodWZmbGVEYXRhKTsKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0
aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlD
LCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJ
bXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
Ym9vbCBpc1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2Fs
bCkKIHsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCkBAIC0zNDUsNyAr
MzUyLDcgQEAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGwKICAgICByZXR1cm4gZW1pdEZhc3RQYXRo
SW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIGlz
VGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+
JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwo
KSk7CiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CkBAIC0zNTgsNyArMzY1LDcg
QEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYgaml0LCBHUFIKICAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChu
dWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6Olllcywg
ZmFsc2UsIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0lu
Zm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYm
IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9H
UFIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0
ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUs
IFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CkBAIC0zNjYsNyArMzczLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJgogCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2
bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCiB7Ci0gICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24o
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKSk7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0u
Z2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5jYWxsKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5h
dGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CkBAIC0zNzYsMjEgKzM4MywzMSBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsTGlua0luZgogICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6
cmVnVDIpOwogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
Miwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9
CisjZW5kaWYKIAotdm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBV
bmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6
ZURhdGFJQyhWTSYgdm0sIENhbGxUeXBlIGNhbGxUeXBlLCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXgsIENhbGxGcmFtZVNodWZmbGVEYXRhKiBmcmFtZVNodWZmbGVEYXRhKQogewotICAgIG1f
Y29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgc2V0VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVH
UFIpOwotICAgIG1fZG9uZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0
aW9uOwotICAgIGlmICh1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKSB7Cisg
ICAgVU5VU0VEX1BBUkFNKGZyYW1lU2h1ZmZsZURhdGEpOworICAgIG1fY29kZU9yaWdpbiA9IENv
ZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOworI2lm
IEVOQUJMRShKSVQpCisgICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworICAg
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBtX2NhbGxlZUdQ
UiA9IGNhbGxlZUdQUjsKKyAgICBpZiAoZnJhbWVTaHVmZmxlRGF0YSkgewogICAgICAgICAvLyBG
SVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1
cmUuCi0gICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1
ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICAg
ICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4o
KmZyYW1lU2h1ZmZsZURhdGEpOwogICAgIH0KLSAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6
Olllcyk7CiAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7
Ci0gICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cisj
ZW5kaWYKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgc2V0U2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJTGlua0NhbGwoKS5jb2RlKCkpOworICAgIC8vIElm
IEpJVCBpcyBkaXNhYmxlZCwgd2Ugc2hvdWxkIG5vdCBzdXBwb3J0IGR5bmFtaWNhbGx5IGdlbmVy
YXRlZCBjYWxsIElDLgorICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIGRpc2Fs
bG93U3R1YnMoKTsKIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFpc1RhaWxDYWxsKCkpOwpAQCAtNDA2LDcgKzQyMyw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiAgICAgfSk7CiB9CiAKLXZvaWQg
Q2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3ZvaWQgQ2FsbExp
bmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgU2Nv
cGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoaXNUYWlsQ2FsbCgpKTsKIApAQCAtNDYyLDYgKzQ3OSw3IEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjpzZXREaXJlY3RDYWxsVGFyZ2V0KENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+
IHRhcmdldCkKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24sIHRhcmdldCk7CiB9CisjZW5kaWYKIAogdm9pZCBDYWxsTGlua0luZm86
OnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyKQogewpAQCAtNDgzLDExICs1MDEsMTQgQEAgdm9pZCBDYWxsTGlua0lu
Zm86OnJldmVydENhbGxUb1N0dWIoKQogICAgICAgICBtX2NhbGxlZU9yQ29kZUJsb2NrLmNsZWFy
KCk7CiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24gPSBudWxs
cHRyOwogICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaCgKICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIodS5jb2Rl
SUMubV9jYWxsZWVMb2NhdGlvbiksIGNhbGxlZUdQUigpLCBudWxscHRyKTsKKyNlbmRpZgogICAg
IH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKIHsKICAgICBjbGVhclN0dWIo
KTsKQEAgLTUwNCw3ICs1MjUsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U3R1YihSZWY8UG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNvZGUoKS5jb2RlKCkpKTsK
ICAgICB9CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CmluZGV4IGU1Zjc3Y2YzN2JmMjY2ZjRiOWM5M2M1MGNmOTk2ZDIxYzY2OGNlNDUuLmIyZDNhZmE2
Y2Y2MGQxNWJlN2E1ZDQ5ZDg2MmNjNDVjZjhiNThhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTI4LDI1ICsyOCwyOSBAQAogI2luY2x1
ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCiAjaW5jbHVkZSAiQ2FsbE1vZGUuaCIKICNpbmNs
dWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TZW50
aW5lbExpbmtlZExpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUKQot
CiBjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIEZ1bmN0
aW9uQ29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKK2NsYXNzIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCitzdHJ1Y3QgQ2FsbEZyYW1l
U2h1ZmZsZURhdGE7CiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CiAKIGNsYXNzIENhbGxM
aW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBw
dWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKwogICAgIGVu
dW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKQEAg
LTU5LDYgKzYzLDggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRp
bmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgRGlyZWN0Q29uc3RydWN0LAogICAgICAg
ICBEaXJlY3RUYWlsQ2FsbAogICAgIH07CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJf
dCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwogICAgIAogICAgIHN0YXRpYyBDYWxsVHlwZSBj
YWxsVHlwZUZvcihPcGNvZGVJRCBvcGNvZGVJRCk7CiAKQEAgLTE3NCwzNSArMTgwLDQzIEBAIGNs
YXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJ
bmZvPiB7CiAgICAgICAgIHJldHVybiBpc1ZhcmFyZ3NDYWxsVHlwZShzdGF0aWNfY2FzdDxDYWxs
VHlwZT4obV9jYWxsVHlwZSkpOwogICAgIH0KIAotICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7
IHJldHVybiBtX3N0dWIgfHwgbV9jYWxsZWVPckNvZGVCbG9jazsgfQorICAgIGJvb2wgaXNMaW5r
ZWQoKSBjb25zdCB7IHJldHVybiBzdHViKCkgfHwgbV9jYWxsZWVPckNvZGVCbG9jazsgfQogICAg
IHZvaWQgdW5saW5rKFZNJik7CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0VXBDYWxs
KENhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlR1BSKQogICAgIHsKICAgICAgICAgbV9j
YWxsVHlwZSA9IGNhbGxUeXBlOwogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAg
ICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5m
byYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwotCiAgICAgR1BS
UmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CisjZW5kaWYKKwor
ICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIENhbGxUeXBlLCBCeXRlY29kZUluZGV4LCBD
YWxsRnJhbWVTaHVmZmxlRGF0YSopOwogICAgIAogICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDog
dWludDhfdCB7CiAgICAgICAgIFllcywKICAgICAgICAgTm8KICAgICB9OwogCisjaWYgRU5BQkxF
KEpJVCkKIHByaXZhdGU6Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBs
KENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBTY29wZWRMYW1iZGE8
dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGlj
OgogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFNjb3BlZExhbWJkYTx2b2lk
KCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9V
TlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYp
OwotICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CisgICAgdm9pZCBlbWl0RGly
ZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYm
IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhl
bHBlcnMmKTsKICAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhl
bHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZURp
cmVjdENhbGwoKTsKKyAgICB2b2lkIHNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4pOworI2VuZGlmCisKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIo
KTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VE
YXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjE3LDcgKzIzMSw2
IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiB7CiAgICAgICAgIG1fZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAg
IH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKIAogICAgIGJvb2wgYWxsb3dT
dHVicygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsgfQogCkBAIC0yMzcsNyArMjUwLDYg
QEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxs
TGlua0luZm8+IHsKICAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIEpTQ2VsbCosIEZ1bmN0aW9u
Q29kZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVCbG9jaygpOwogICAgIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKTsKLSAgICB2b2lkIHNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAgICAgdm9pZCBzZXRMYXN0U2VlbkNhbGxl
ZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUpOwogICAgIHZvaWQg
Y2xlYXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjQ3LDIyICsyNTksMTggQEAgY2xhc3MgQ2FsbExp
bmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAg
ICB2b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihFeGVjdXRhYmxlQmFzZSopOwog
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAgICAgCisjaWYgRU5BQkxFKEpJVCkK
ICAgICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiYmKTsKKyNl
bmRpZgogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZSogc3R1YigpIGNvbnN0CiAgICAgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHJldHVy
biBtX3N0dWIuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTbG93U3R1YihSZWY8SklUU3R1
YlJvdXRpbmU+JiYgbmV3U2xvd1N0dWIpCi0gICAgewotICAgICAgICBtX3Nsb3dTdHViID0gV1RG
TW92ZShuZXdTbG93U3R1Yik7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhclNsb3dTdHViKCkKLSAg
ICB7Ci0gICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisjZW5kaWYKICAgICB9CiAKICAgICBib29sIHNlZW5PbmNlKCkKQEAgLTMzMCwx
OSArMzM4LDE3IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5l
bE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2Fs
bExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpCi0gICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7Ci0gICAgfQotI2VuZGlmCi0KICAgICB1aW50MzJfdCBtYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCk7CisgICAgdm9pZCB1cGRhdGVNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykKKyAgICB7CisgICAgICAgIGlmIChtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgICAgICAgICBtX21heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgfQogCiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoQ291bnQoKQogICAgIHsKQEAgLTM2
NCwxMCArMzcwLDEyIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q2FsbExpbmtJbmZvLCBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKTsKICAgICB9CiAKKyNpZiBF
TkFCTEUoSklUKQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fY2FsbGVlR1BSOwogICAgIH0KKyNlbmRpZgogCiAgICAgdWludDMyX3Qgc2xvd1BhdGhDb3Vu
dCgpCiAgICAgewpAQCAtMzgzLDkgKzM5MSwxMSBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJs
aWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogICAgIHZvaWQgZm9yRWFj
aERlcGVuZGVudENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmIChpc0xpbmtlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoc3R1YigpKQorICAgICAgICAg
ICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgICAgICAgICAgc3R1Yigp
LT5mb3JFYWNoRGVwZW5kZW50Q2VsbChmdW5jdG9yKTsKLSAgICAgICAgICAgIGVsc2UgeworI2Vu
ZGlmCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9jYWxs
ZWVPckNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzRGlyZWN0KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9sYXN0U2VlbkNhbGxlZU9yRXhlY3V0YWJsZS5n
ZXQoKSk7CkBAIC0zOTcsMjYgKzQwNywzNSBAQCBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMg
UGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogCiAgICAgdm9pZCB2aXNpdFdl
YWsoVk0mKTsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXRGcmFtZVNodWZmbGVEYXRh
KGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CiAKICAgICBjb25zdCBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0YSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9mcmFt
ZVNodWZmbGVEYXRhLmdldCgpOwogICAgIH0KKyNlbmRpZgogCiBwcml2YXRlOgogCiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogCisgICAg
dWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAgfTsgLy8gRm9yIHZh
cmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBkaXJl
Y3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBhcmd1bWVudHMuCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVz
dGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKICAgICAgICAgVW5pb25UeXBlKCkgCisj
aWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0ciwgSW52YWxpZEdQ
UlJlZyB9CisjZWxzZQorICAgICAgICAgICAgOiBkYXRhSUMgeyBudWxscHRyIH0KKyNlbmRpZgog
ICAgICAgICB7IH0KICAgICAgICAgc3RydWN0IERhdGFJQyB7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlv
bjsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgR1BSUmVnIG1fY2FsbExpbmtJbmZvR1BS
OworI2VuZGlmCiAgICAgICAgIH0gZGF0YUlDOwogCiAgICAgICAgIHN0cnVjdCB7CkBAIC00Mjks
OSArNDQ4LDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5l
bE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2NhbGxl
ZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fbGFzdFNlZW5DYWxsZWVP
ckV4ZWN1dGFibGU7CisjaWYgRU5BQkxFKEpJVCkKICAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU+IG1fc3R1YjsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc2xvd1N0
dWI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBtX2ZyYW1lU2h1
ZmZsZURhdGE7CisjZW5kaWYKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29s
IG1faGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgIGJvb2wgbV9oYXNTZWVuQ2xvc3VyZSA6
IDE7CkBAIC00NDEsOSArNDYxLDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgYm9vbCBtX2NsZWFyZWRCeUpl
dHRpc29uIDogMTsKICAgICB1bnNpZ25lZCBtX2NhbGxUeXBlIDogNDsgLy8gQ2FsbFR5cGUKICAg
ICB1bnNpZ25lZCBtX3VzZURhdGFJQyA6IDE7IC8vIFVzZURhdGFJQworI2lmIEVOQUJMRShKSVQp
CiAgICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9OworI2VuZGlmCiAgICAg
dWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9OwotICAgIHVpbnQzMl90IG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0aGUgcHJvZmlsZWQg
bWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUgbnVtYmVyIG9mIHN0
YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogfTsKIAogaW5saW5lIENvZGVPcmln
aW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
QEAgLTQ1MywxMSArNDc0LDcgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIAogc3RydWN0IFVubGlua2VkQ2Fs
bExpbmtJbmZvIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRs
eSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBh
IENvZGVPcmlnaW4uCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOwogfTsK
IAotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKaW5kZXggZjdh
ZmIyYjBmMjhmZDllNWZmYzVjMzRiNmEzYTg1NmFlMzczMDJmNS4uZDU5MDRhOGU5MGEyY2RhNDY5
MzcxZjg3ZTk3N2JkMmM4ZDM5MzE3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBAIC01Miw0NyArNTEs
NiBAQCBDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0dXMoSlNWYWx1ZSB2YWx1ZSkKICAgICBt
X3ZhcmlhbnRzLmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkpOwogfQogCi1DYWxs
TGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7Ci0gICAgVU5V
U0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChw
cm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5oYXNFeGl0U2l0ZShERkc6OkZyZXF1
ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpKSB7Ci0gICAgICAg
IC8vIFdlIGNvdWxkIGZvcmNlIHRoaXMgdG8gYmUgYSBjbG9zdXJlIGNhbGwsIGJ1dCBpbnN0ZWFk
IHdlJ2xsIGp1c3QgYXNzdW1lIHRoYXQgaXQKLSAgICAgICAgLy8gdGFrZXMgc2xvdyBwYXRoLgot
ICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXV0
byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwotICAgIE9wY29kZUlEIG9wID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCk7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwotICAgIHN3aXRjaCAo
b3ApIHsKLSAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVj
dGlvbi0+YXM8T3BDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZv
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2NvbnN0cnVjdDoKLSAgICAgICAgY2FsbExp
bmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKS5tZXRhZGF0YShwcm9maWxl
ZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF90YWls
X2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2Fs
bD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOgotICAgICAgICBjYWxsTGlua0luZm8gPSAm
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2sp
Lm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2l0ZXJhdG9yX25l
eHQ6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5l
eHQ+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0g
ICAgfQotICAgIAotICAgIAotICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhjYWxsTGlua0luZm8t
Pmxhc3RTZWVuQ2FsbGVlKCkpOwotfQotCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcigKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCwgY29uc3QgSUNTdGF0dXNNYXAmIG1hcCwKICAgICBFeGl0U2l0ZURhdGEg
ZXhpdFNpdGVEYXRhKQpAQCAtMTA1LDEwICs2MywxOSBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvcigKICAgICBVTlVTRURfUEFSQU0oZXhpdFNpdGVEYXRhKTsKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG1hcC5n
ZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuY2FsbExpbmtJbmZvOwotICAgIGlmICghY2Fs
bExpbmtJbmZvKSB7CisgICAgaWYgKCFjYWxsTGlua0luZm8pCisgICAgICAgIHJldHVybiBDYWxs
TGlua1N0YXR1cygpOworICAgIC8vIGRvbmVMb2NhdGlvbiBpcyBudWxscHRyIHdoZW4gaXQgaXMg
dGllZCB0byBMTEludCAobm90IEJhc2VsaW5lKS4KKyAgICBpZiAoIWNhbGxMaW5rSW5mby0+ZG9u
ZUxvY2F0aW9uKCkpIHsKICAgICAgICAgaWYgKGV4aXRTaXRlRGF0YS50YWtlc1Nsb3dQYXRoKQog
ICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICAgICAgcmV0dXJuIGNvbXB1
dGVGcm9tTExJbnQobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJs
b2NrKCktPmhhc0V4aXRTaXRlKERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBC
YWRDb25zdGFudFZhbHVlKSkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdWxkIGZvcmNlIHRoaXMg
dG8gYmUgYSBjbG9zdXJlIGNhbGwsIGJ1dCBpbnN0ZWFkIHdlJ2xsIGp1c3QgYXNzdW1lIHRoYXQg
aXQKKyAgICAgICAgICAgIC8vIHRha2VzIHNsb3cgcGF0aC4KKyAgICAgICAgICAgIHJldHVybiB0
YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgICAKICAgICByZXR1
cm4gY29tcHV0ZUZvcihsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGV4aXRT
aXRlRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5oCmluZGV4IDViNTM4MGY5MGM1NmZjMDU0ZTY5ZjM3ZDQzNzUyZTQzY2RjMDcwMmEuLmE5
MmQ5MDAxYjk2YmU0OWQ5MDFiNGFiYTljZDUyOTEwMjEwMTAwZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCkBAIC0xMTcsNyArMTE3LDYg
QEAgY2xhc3MgQ2FsbExpbmtTdGF0dXMgZmluYWwgewogcHJpdmF0ZToKICAgICB2b2lkIG1ha2VD
bG9zdXJlQ2FsbCgpOwogICAgIAotICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRnJv
bUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIEJ5dGVjb2RlSW5k
ZXgpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVG
cm9tQ2FsbExpbmtJbmZvKAogICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDYWxs
TGlua0luZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKaW5kZXggNzdjYWE4ZTU3ZTk0YWQ3MzJhODcwM2I3MTBmZDQ4MGY3MTgxM2FlNi4uNWE4Yjc4
NTZjZWJjYzBjNTk5ZWZiNTg1MTQwMWIzNTQwY2VhZDFlMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ0OSwxNCArNDQ5LDE3IEBAIGJvb2wg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YSh0aGlzKTsgXAogICAgIG5ldyAoJm1ldGFkYXRhKSBfX29wOjpNZXRhZGF0YSB7IGJ5dGVjb2Rl
IH07IFwKIAotI2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKLQotI2RlZmlu
ZSBMSU5LKC4uLikgXAotICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKTogeyBc
CisjZGVmaW5lIExJTktfSU1QTCguLi4pIFwKICAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShX
VEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykpIFwKICAgICAgICAgV1RGX0xBWllfSEFTX1JFU1Qo
X19WQV9BUkdTX18pKHsgXAogICAgICAgICAgICAgV1RGX0xBWllfRk9SX0VBQ0hfVEVSTShMSU5L
X0ZJRUxELCAgV1RGX0xBWllfUkVTVF8oX19WQV9BUkdTX18pKSBcCiAgICAgICAgIH0pIFwKKwor
I2RlZmluZSBDQVNFKF9fb3ApIGNhc2UgX19vcDo6b3Bjb2RlSUQKKworI2RlZmluZSBMSU5LKC4u
LikgXAorICAgIENBU0UoV1RGX0xBWllfRklSU1QoX19WQV9BUkdTX18pKTogeyBcCisgICAgICAg
IExJTktfSU1QTChfX1ZBX0FSR1NfXykgXAogICAgICAgICBicmVhazsgXAogICAgIH0KIApAQCAt
NDY1LDEwICs0NjgsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogICAgICAgICBtX2J5dGVjb2Rl
Q29zdCArPSBvcGNvZGVMZW5ndGhzW29wY29kZUlEXTsKICAgICAgICAgc3dpdGNoIChvcGNvZGVJ
RCkgewotICAgICAgICBMSU5LKE9wQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAgIExJTkso
T3BUYWlsQ2FsbFZhcmFyZ3MsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWlsQ2FsbEZvcndh
cmRBcmd1bWVudHMsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BDb25zdHJ1Y3RWYXJhcmdzLCBw
cm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0QnlWYWwsIHByb2ZpbGUpCiAgICAgICAgIExJTkso
T3BHZXRQcml2YXRlTmFtZSwgcHJvZmlsZSkKIApAQCAtNDk4LDExICs0OTcsNiBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5
KQogICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQogCi0gICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQotICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
Ci0gICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENvbnN0
cnVjdCwgcHJvZmlsZSkKLQogICAgICAgICBMSU5LKE9wSW5CeVZhbCkKICAgICAgICAgTElOSyhP
cFB1dEJ5VmFsKQogICAgICAgICBMSU5LKE9wUHV0QnlWYWxEaXJlY3QpCkBAIC01MjcsMTMgKzUy
MSw2OCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBMSU5LKE9wQ2F0Y2gpCiAg
ICAgICAgIExJTksoT3BQcm9maWxlQ29udHJvbEZsb3cpCiAKKyAgICAgICAgY2FzZSBvcF9jYWxs
OiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsLCBwcm9maWxlKQorICAgICAgICAgICAg
bWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2Fs
bDogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGwsIHByb2ZpbGUpCisjaWYgRU5B
QkxFKEpJVCkKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhID0g
Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKGJ5
dGVjb2RlLCBudW1QYXJhbWV0ZXJzKCkpOworICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlu
a0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNv
ZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksICZzaHVmZmxlRGF0YSk7CisjZWxzZQorICAgICAg
ICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExp
bmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxw
dHIpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2Ugb3BfY2FsbF9ldmFsOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsRXZhbCwgcHJv
ZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRh
SUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVjdGlvbi5p
bmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAgIExJTktfSU1QTChPcENvbnN0cnVj
dCwgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRpYWxp
emVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0cnVj
dGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
ICAgICAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7Ci0gICAgICAgICAgICBJTklUSUFMSVpF
X01FVEFEQVRBKE9wSXRlcmF0b3JPcGVuKQorICAgICAgICAgICAgTElOS19JTVBMKE9wSXRlcmF0
b3JPcGVuKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURh
dGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9u
LmluZGV4KCksIG51bGxwdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHQ6IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVU
QURBVEEoT3BJdGVyYXRvck5leHQpCisgICAgICAgICAgICBMSU5LX0lNUEwoT3BJdGVyYXRvck5l
eHQpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlD
KHZtLCBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5k
ZXgoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAgICAgICBMSU5LX0lNUEwoT3BDYWxsVmFy
YXJncywgcHJvZmlsZSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLmluaXRp
YWxpemVEYXRhSUModm0sIENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBpbnN0
cnVjdGlvbi5pbmRleCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgTElO
S19JTVBMKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEu
bV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlw
ZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50czogeworICAgICAgICAgICAgTElOS19JTVBMKE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5p
dGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIGlu
c3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7CisgICAgICAgICAgICBM
SU5LX0lNUEwoT3BDb25zdHJ1Y3RWYXJhcmdzLCBwcm9maWxlKQorICAgICAgICAgICAgbWV0YWRh
dGEubV9jYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCksIGluc3RydWN0aW9uLmluZGV4KCksIG51bGxwdHIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNzgzLDIxICs4MzIsMTggQEAgdm9pZCBDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+
IGppdENvZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9qaXRDb25zdGFudFBv
b2wuaXNFbXB0eSgpKTsKICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVk
VmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkpOwogICAgICAgICBq
aXREYXRhLm1fc3R1YkluZm9zID0gRml4ZWRWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+KGppdENv
ZGUtPm1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKLSAgICAgICAgaml0RGF0YS5tX2NhbGxM
aW5rSW5mb3MgPSBGaXhlZFZlY3RvcjxDYWxsTGlua0luZm8+KGppdENvZGUtPm1fdW5saW5rZWRD
YWxscy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkQ2FsbExpbmtJbmZvIDog
aml0Q29kZS0+bV91bmxpbmtlZENhbGxzKSB7CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCB1bmxp
bmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxs
TGlua0luZm8pOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDb2RlTG9jYXRpb25zKHsg
fSwgdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9v
bC5hdChpKTsKICAgICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSgpKSB7CiAgICAgICAgICAg
ICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgogICAgICAgICAgICAg
ICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpDYWxsTGlua0luZm86IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50ZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gaml0Q29kZS0+
bV91bmxpbmtlZENhbGxzW2luZGV4XTsKLSAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zW2luZGV4XTsKLSAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5r
SW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gJmNhbGxMaW5rSW5mbzsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogewogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucG9pbnRlcigpKTsKICAgICAg
ICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0g
aml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvc1tpbmRleF07CkBAIC0xNTY3LDE1ICsxNjEzLDYg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKQogCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9KTsKLQotICAgIGZvckVhY2hMTEludENhbGxMaW5rSW5mbyhb
Jl0oTExJbnRDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgewotICAgICAgICBpZiAoY2FsbExp
bmtJbmZvLmlzTGlua2VkKCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZvLmNhbGxl
ZSgpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAi
Q2xlYXJpbmcgTExJbnQgY2FsbCBmcm9tICIsICp0aGlzKTsKLSAgICAgICAgICAgIGNhbGxMaW5r
SW5mby51bmxpbmsoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmxhc3RT
ZWVuQ2FsbGVlKCkgJiYgIXZtLmhlYXAuaXNNYXJrZWQoY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2Fs
bGVlKCkpKQotICAgICAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyTGFzdFNlZW5DYWxsZWUoKTsK
LSAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xNTkzLDggKzE2MzAsNiBAQCBDb2Rl
QmxvY2s6OkpJVERhdGEmIENvZGVCbG9jazo6ZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcygp
CiB7CiAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCi0gICAg
ICAgICAgICBjYWxsTGlua0luZm8udmlzaXRXZWFrKHZtKCkpOwogICAgICAgICBmb3IgKGF1dG8m
IHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlckJhc2UgbG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeSk7CiAgICAgICAgICAgICBz
dHViSW5mby52aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CkBAIC0xNjEyLDE5ICsx
NjQ3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkKICAgICAg
ICAgfQogICAgIH0KICNlbmRpZgotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBpZiAoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7Ci0gICAgICAgIC8vIFZlcmlmeSB3ZSBkb24n
dCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KLSAg
ICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2Vs
aW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKLSAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2VsbCopIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9Ci0KLSAgICB9Ci0jZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNjM0LDggKzE2NTYsMTMgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiB2bSkKIAogICAgIHVw
ZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJl
dGVkKGppdFR5cGUoKSkpCisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRU
eXBlKCkpKSB7CiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKKyAgICAgICAg
Ly8gSWYgdGhlIENvZGVCbG9jayBpcyBERkcgb3IgRlRMLCBDYWxsTGlua0luZm8gaW4gbWV0YWRh
dGEgaXMgbm90IHJlbGF0ZWQuCisgICAgICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlu
a0luZm8oWyZdKENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgICAgICBjYWxs
TGlua0luZm8udmlzaXRXZWFrKHZtKTsKKyAgICAgICAgfSk7CisgICAgfQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCkBAIC0xNjk5LDEzICsxNzI2LDE2IEBAIHZvaWQg
Q29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIAogdm9pZCBDb2RlQmxvY2s6OmdldElD
U3RhdHVzTWFwKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIElDU3RhdHVzTWFwJiByZXN1bHQp
CiB7CisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKSB7Cisg
ICAgICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgICAgICByZXN1bHQuYWRkKGNhbGxMaW5rSW5mby5j
b2RlT3JpZ2luKCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5jYWxsTGlua0luZm8gPSAm
Y2FsbExpbmtJbmZvOworICAgICAgICB9KTsKKyAgICB9CiAjaWYgRU5BQkxFKEpJVCkKICAgICBp
ZiAoSklUQ29kZTo6aXNKSVQoaml0VHlwZSgpKSkgewogICAgICAgICBpZiAoYXV0byogaml0RGF0
YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBzdHViSW5mbyA6
IGppdERhdGEtPm1fc3R1YkluZm9zKQogICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3R1Yklu
Zm8uY29kZU9yaWdpbiwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLnN0dWJJbmZvID0gJnN0
dWJJbmZvOwotICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5t
X2NhbGxMaW5rSW5mb3MpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8u
Y29kZU9yaWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0g
JmNhbGxMaW5rSW5mbzsKICAgICAgICAgfQogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKQEAgLTE3NjAsMTUgKzE3
OTAsMjQgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotQ2FsbExpbmtJbmZv
KiBDb2RlQmxvY2s6OmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRl
eCBpbmRleCkKK0NhbGxMaW5rSW5mbyogQ29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRl
Y29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXggaW5kZXgp
CiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGlmIChhdXRv
KiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbExp
bmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKSB7Ci0gICAgICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLmNvZGVPcmlnaW4oKSA9PSBDb2RlT3JpZ2luKGluZGV4KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJmNhbGxMaW5rSW5mbzsKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVy
cHJldGVkKGppdFR5cGUoKSkpIHsKKyAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVj
dGlvbnMoKS5hdChpbmRleCk7CisgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCkpIHsKKyNkZWZpbmUgQ0FTRShPcCkgXAorICAgICAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAor
ICAgICAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcyku
bV9jYWxsTGlua0luZm87IFwKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENBU0UpCisKKyN1bmRlZiBDQVNFCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKwog
I2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0
VHlwZSgpKSkgewogICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29k
ZS0+ZGZnQ29tbW9uKCk7CkBAIC0yMTM1LDEzICsyMTc0LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNo
cmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFNocmlua01vZGUgc2hyaW5rTW9k
ZSkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2Fs
bChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8qIGluY29taW5nKQotewotICAg
IG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2luY29taW5nQ2Fs
bHMucHVzaChpbmNvbWluZyk7Ci19Ci0KIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5
bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSog
aW5jb21pbmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKQEAgLTIx
NTIsMTAgKzIxODQsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0MKIH0KICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCit2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUq
IGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8qIGluY29taW5nKQoreworICAgIG5vdGljZUluY29t
aW5nQ2FsbChjYWxsZXJGcmFtZSk7CisgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcp
OworfQorCiB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiB7Ci0gICAgd2hp
bGUgKG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMu
ZW5kKCkpCi0gICAgICAgIG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCktPnVubGluaygpOwor
ICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5k
KCkpCisgICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsodm0oKSk7CiAjaWYg
RU5BQkxFKEpJVCkKICAgICBKSVREYXRhKiBqaXREYXRhID0gbnVsbHB0cjsKICAgICB7CkBAIC0y
MTYzLDIwICsyMjAxLDEyIEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkK
ICAgICAgICAgaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKTsKICAgICB9CiAgICAgaWYgKGppdERh
dGEpIHsKLSAgICAgICAgd2hpbGUgKGppdERhdGEtPm1faW5jb21pbmdDYWxscy5iZWdpbigpICE9
IGppdERhdGEtPm1faW5jb21pbmdDYWxscy5lbmQoKSkKLSAgICAgICAgICAgIGppdERhdGEtPm1f
aW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsodm0oKSk7CiAgICAgICAgIHdoaWxlIChqaXRE
YXRhLT5tX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IGppdERhdGEtPm1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQogICAgICAgICAgICAgaml0RGF0YS0+bV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChD
YWxsRnJhbWUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyogaW5jb21pbmcpCi17Ci0g
ICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKLSAgICBtX2luY29taW5nTExJbnRD
YWxscy5wdXNoKGluY29taW5nKTsKLX0KLQogQ29kZUJsb2NrKiBDb2RlQmxvY2s6Om5ld1JlcGxh
Y2VtZW50KCkKIHsKICAgICByZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50
Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKTsKQEAgLTIzMjksMjIgKzIzNTksMjIg
QEAgdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNvbiByZWFz
b24sIFJlb3B0aW1pemF0aW9uTW9kZSBtb2QKICAgICBpZiAodm0uaGVhcC5jdXJyZW50VGhyZWFk
SXNEb2luZ0dDV29yaygpICYmICF2bS5oZWFwLmlzTWFya2VkKG93bmVyRXhlY3V0YWJsZSgpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0jaWYgRU5BQkxFKEpJVCkKICAgICB7CiAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgaWYgKEpJVERhdGEqIGppdERh
dGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJ
bmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewot
ICAgICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0Nv
bW1vbigpOwotICAgICAgICAgICAgZm9yIChhdXRvKiBjYWxsTGlua0luZm8gOiBkZmdDb21tb24t
Pm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENsZWFy
ZWRCeUpldHRpc29uKCk7Ci0gICAgICAgIH0KKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICAg
ICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24o
KTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGNhbGxMaW5rSW5mbyA6IGRmZ0NvbW1vbi0+
bV9jYWxsTGlua0luZm9zKQorICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENs
ZWFyZWRCeUpldHRpc29uKCk7CisgICAgICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZdKENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LnNldENsZWFyZWRCeUpldHRpc29uKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAg
IH0KLSNlbmRpZgogCiAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDIpLgogICAgIG93bmVyRXhl
Y3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh2bSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5cGUoKSwgc3Bl
Y2lhbGl6YXRpb25LaW5kKCkpOwpAQCAtMjg0NywxOSArMjg3NywxMyBAQCBBcnJheVByb2ZpbGUq
IENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5
dGVjb2RlSW5kZQogewogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChi
eXRlY29kZUluZGV4KTsKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7Ci0j
ZGVmaW5lIENBU0UxKE9wKSBcCisjZGVmaW5lIENBU0UoT3ApIFwKICAgICBjYXNlIE9wOjpvcGNv
ZGVJRDogXAogICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0
aGlzKS5tX2FycmF5UHJvZmlsZTsKIAotI2RlZmluZSBDQVNFMihPcCkgXAotICAgIGNhc2UgT3A6
Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFk
YXRhKHRoaXMpLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlOwotCi0gICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNFMSkKLSAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhDQVNFMikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9B
UlJBWV9QUk9GSUxFKENBU0UpCiAKLSN1bmRlZiBDQVNFMQotI3VuZGVmIENBU0UyCisjdW5kZWYg
Q0FTRQogCiAgICAgY2FzZSBPcEdldEJ5SWQ6Om9wY29kZUlEOiB7CiAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwpAQCAtMzAyOSwxNyArMzA1Mywx
MiBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcm9maWxlUHJlZGljdGlvbnMoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZQogICAgICAgICB9CiAgICAgfSk7CiAKLSNkZWZp
bmUgVklTSVQxKF9fb3ApIFwKKyNkZWZpbmUgVklTSVQoX19vcCkgXAogICAgIG1fbWV0YWRhdGEt
PmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlKTsgfSk7CiAKLSNkZWZpbmUgVklTSVQyKF9fb3ApIFwKLSAgICBtX21ldGFk
YXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRhZGF0
YS5tX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZSk7IH0pOwotCi0gICAgRk9SX0VBQ0hfT1BD
T0RFX1dJVEhfQVJSQVlfUFJPRklMRShWSVNJVDEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
TExJTlRfQ0FMTF9MSU5LX0lORk8oVklTSVQyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FS
UkFZX1BST0ZJTEUoVklTSVQpCiAKLSN1bmRlZiBWSVNJVDEKLSN1bmRlZiBWSVNJVDIKKyN1bmRl
ZiBWSVNJVAogCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yTmV4dD4oWyZdIChh
dXRvJiBtZXRhZGF0YSkgewogICAgICAgICBwcm9jZXNzKG1ldGFkYXRhLm1faXRlcmFibGVQcm9m
aWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA2
NGY5ZjVhYmNmZTJhZTcwNWQxZGE2NWFhOWY4MzE5N2I5NmM2ZDMxLi5iN2FlYTI2NzdmNWU5NDkw
OGFiMzU1Zjk2YjBkMjNjMzc4MjQyMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKLSNpbmNs
dWRlICJMTEludENhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkxhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGFUYWJsZS5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmgiCkBAIC0yNjEsOCArMjYwLDYgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAKICAgICAgICAgRml4ZWRWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwot
ICAgICAgICBGaXhlZFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKLSAgICAg
ICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhp
Y0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAgICAgICAgIGJvb2wgbV9o
YXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNl
dExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwpAQCAtMjkxLDcgKzI4OCw3IEBAIGNsYXNzIENv
ZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0aW9u
IGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBpbGluZyBPU1IgZXhpdHMgaW4gdGhlIGNhc2UK
ICAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlubGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5b3Ug
d2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxseQogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2Fs
bExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KLSAgICBD
YWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRl
eCk7CisgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIGNvbnN0
IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKTsKIApAQCAtMzA5LDE0ICszMDYsMTEgQEAgY2xhc3Mg
Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAg
IHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0jaWYgRU5BQkxFKEpJVCkKICAgICB2b2lk
IGxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKik7
CisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChD
YWxsRnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKik7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIAotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyopOwotCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIG91
dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKTsKICAgICBpbnQgb3V0T2ZM
aW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkKICAgICB7CkBA
IC00NTMsNyArNDQ3LDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0
IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hB
cnJheUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25zdCBG
dW5jdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTExJ
bnRDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhjb25zdCBGdW5j
dG9yJik7CiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIHVuYXJ5
QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKQEAgLTk1OSw3ICs5
NTMsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBWTSogbV92bTsK
IAogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlciB7IG51bGxwdHIgfTsK
LSAgICBTZW50aW5lbExpbmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIFBhY2tlZFJhd1NlbnRp
bmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdMTEludENhbGxzOworICAgIFNl
bnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxs
TGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBt
X2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29k
ZTsKICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tJbmxpbmVzLmgKaW5kZXggMWQ1OTRhYjgzNTI4OTdlYzhhNzQ1ZWEyNDkzZjhk
MmRhMDE4Yjk2Mi4uOTJkYTk5YTBiYTJhY2MxZmNkYjZhOTczNWZjZGRlMjNlZmM5MzNkOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
CkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoY29uc3QgRnVuY3RvciYgZnVuYykKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KLXZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8oY29uc3QgRnVu
Y3RvciYgZnVuYykKK3ZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExp
bmtJbmZvKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB7CiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNk
ZWZpbmUgVklTSVQoX19vcCkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTExJbnRDYWxsTGlua0luZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEz
MmU5YjY2YmI3YzYxZmViMzM5ZjgwNTI4YzJkMzQ3MWQ4MDY4Yi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTExJbnRDYWxsTGlua0luZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkpTQ1B0clRhZy5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIK
LSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLSNpbmNsdWRlIDx3dGYvU2VudGlu
ZWxMaW5rZWRMaXN0Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgSW5zdHJ1Y3Rpb247
Ci0KLWNsYXNzIExMSW50Q2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9k
ZTxMTEludENhbGxMaW5rSW5mbz4gewotcHVibGljOgotICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCB1bmxpbmtl
ZEJpdCA9IDB4MTsKLQotICAgIExMSW50Q2FsbExpbmtJbmZvKCkgPSBkZWZhdWx0OwotICAgIAot
ICAgIH5MTEludENhbGxMaW5rSW5mbygpCi0gICAgewotICAgICAgICBpZiAoaXNPbkxpc3QoKSkK
LSAgICAgICAgICAgIHJlbW92ZSgpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzTGlua2VkKCkg
Y29uc3QgeyByZXR1cm4gIShtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCAmIHVu
bGlua2VkQml0KTsgfQotICAgIAotCi0gICAgdm9pZCBsaW5rKFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHIpCi0gICAgewotICAgICAgICBpZiAoaXNPbkxpc3QoKSkKLSAgICAgICAgICAgIHJl
bW92ZSgpOwotICAgICAgICBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxlZSk7Ci0gICAgICAgIHZtLndyaXRlQmFycmllcihv
d25lciwgY2FsbGVlKTsKLSAgICAgICAgbV9tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHI7Ci0g
ICAgfQotCi0gICAgdm9pZCB1bmxpbmsoKQotICAgIHsKLSAgICAgICAgLy8gTWFrZSBsaW5rIGlu
dmFsaWRhdGVkLiBJdCB3b3JrcyBiZWNhdXNlIExMSW50IHRlc3RzIHRoZSBnaXZlbiBjYWxsZWUg
d2l0aCB0aGlzIHBvaW50ZXIuIEJ1dCBpdCBpcyBzdGlsbCB2YWxpZCBhcyBsYXN0U2VlbkNhbGxl
ZSEKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgfD0gdW5saW5r
ZWRCaXQ7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQgPSBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4oKTsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAg
ICByZW1vdmUoKTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogY2FsbGVlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmICghaXNMaW5rZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTT2JqZWN0Kj4obV9jYWxsZWVPckxhc3RTZWVu
Q2FsbGVlV2l0aExpbmtCaXQpOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBsYXN0U2VlbkNhbGxl
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTT2JqZWN0Kj4o
bV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgJiB+dW5saW5rZWRCaXQpOwotICAg
IH0KLQotICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgpCi0gICAgewotICAgICAgICBtX2Nh
bGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCA9IHVubGlua2VkQml0OwotICAgIH0KLQot
ICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExMSW50Q2FsbExp
bmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KLQotcHJpdmF0ZToKLSAgICB1aW50cHRyX3QgbV9j
YWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJpdCB9OwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX21hY2hpbmVDb2RlVGFyZ2V0Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bj
b2RlLmgKaW5kZXggY2E4YmVmMzI4YjRiZmIyYjBkZmRjOGIyODUyNDkyMWFjODM5YmQzNi4uMWNi
YzY2Zjg0OTk1NDk5N2VmN2M1MGQ0OTM4NDMwMmYzNWM2MjllZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMTI2LDExICsxMjYsMTkgQEAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0
Q29uc3RleHByKG0KICAgICBtYWNybyhPcFJzaGlmdCkgXAogICAgIG1hY3JvKE9wR2V0UHJpdmF0
ZU5hbWUpIFwKIAotI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1h
Y3JvKSBcCisjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZP
KG1hY3JvKSBcCisgICAgbWFjcm8oT3BDYWxsKSBcCisgICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAor
ICAgIG1hY3JvKE9wQ2FsbEV2YWwpIFwKKyAgICBtYWNybyhPcENvbnN0cnVjdCkgXAorICAgIG1h
Y3JvKE9wSXRlcmF0b3JPcGVuKSBcCisgICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKICAgICBt
YWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZhcmFyZ3MpIFwKICAg
ICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3Ry
dWN0VmFyYXJncykgXAorCisjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJ
TEUobWFjcm8pIFwKICAgICBtYWNybyhPcEdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BJbkJ5VmFs
KSBcCiAgICAgbWFjcm8oT3BQdXRCeVZhbCkgXApAQCAtMTM5LDYgKzE0Nyw3IEBAIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1T
QlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBt
YWNybyhPcEVudW1lcmF0b3JJbkJ5VmFsKSBcCiAgICAgbWFjcm8oT3BFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHkpIFwKKyAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5G
TyhtYWNybykgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX0FMTE9DQVRJ
T05fUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wTmV3QXJyYXkpIFwKQEAgLTE0OCwxNCAr
MTU3LDYgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxl
bmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfT0JKRUNUX0FMTE9DQVRJT05fUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wTmV3
T2JqZWN0KSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5L
X0lORk8obWFjcm8pIFwKLSAgICBtYWNybyhPcENhbGwpIFwKLSAgICBtYWNybyhPcFRhaWxDYWxs
KSBcCi0gICAgbWFjcm8oT3BDYWxsRXZhbCkgXAotICAgIG1hY3JvKE9wQ29uc3RydWN0KSBcCi0g
ICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKLSAgICBtYWNybyhPcEl0ZXJhdG9yTmV4dCkgXAot
CiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKG1hY3Jv
KSBcCiAgICAgbWFjcm8oT3BBZGQpIFwKICAgICBtYWNybyhPcE11bCkgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXgg
MGQxOWUyNzkwNTZlNWYzN2U3NzFjNWM0OWEyZGIwZTZjMmQ4NDhkNy4uYWM1NzEyN2JjZjg5MDcy
YmUwMzg0MTZkYTEzOWI0MWYxNjRhZTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC00MDMsNyArNDAzLDYgQEAg
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcyh1bnNpZ25lZCBu
dW1CaW5hcnlBcml0aFByb2ZpbGVzLAogCiAjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJy
YXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCi0gICAgICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAg
ICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9w
SXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDQwMzk0YTk0Mzk5Mjk5M2Y1
NDVhMmFjNjJjZjZlZGMwOWRmNTU1ZmEuLjFjNTkwNDJlMGQwYzM4MTFiM2M5YmUyMTU4Y2RjNTRj
MDFkYmI4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCkBAIC03NSw3ICs3NSw2IEBAIGNsYXNzIENhY2hlZENvZGVCbG9jazsK
IAogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBl
ZGVmIHVuc2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci10eXBlZGVmIHVu
c2lnbmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87CiAKIHN0cnVjdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA1YzcyMDU4ZGNmMjE5NjBk
Y2Y4NTNlMGE5MmMyN2U4OWEyZDU2YmVlLi41ZTMyZDJkMjRmMWIzZWQ4NzBjMzMwZjJlZjIzZDg1
ZTRlY2U0ODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwCkBAIC0zMTUsNiArMzE1LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2
ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAg
Y2FzZSBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9p
bnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9pbnRlcm5h
bF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X2xpbmtfY2Fs
bF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmU6Cisg
ICAgY2FzZSBsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2dldF9ob3N0
X2NhbGxfcmV0dXJuX3ZhbHVlOgogICAgIGNhc2UgbGxpbnRfaGFuZGxlX3VuY2F1Z2h0X2V4Y2Vw
dGlvbjoKICAgICBjYXNlIGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJh
bXBvbGluZToKQEAgLTMyNSw2ICszMjksOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxl
dmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAg
IGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9jYWxs
X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246
CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3Nf
c2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcmV0dXJuX2xvY2F0
aW9uOgpAQCAtMzM1LDcgKzM0MSw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwo
T3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3Rfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2FzZSBvcF9pdGVyYXRv
cl9vcGVuX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dF9z
bG93X3JldHVybl9sb2NhdGlvbjoKLSAgICBjYXNlIG9wX3RhaWxfY2FsbF9yZXR1cm5fbG9jYXRp
b246CiAgICAgY2FzZSBvcF90YWlsX2NhbGxfc2xvd19yZXR1cm5fbG9jYXRpb246CiAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfc2xvd19yZXR1cm5fbG9jYXRpb246CiAg
ICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93X3JldHVybl9sb2NhdGlvbjoKQEAgLTM0
Myw4ICszNDgsOSBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugd2FzbV9mdW5j
dGlvbl9wcm9sb2d1ZToKICAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9ndWVfbm9fdGxzOgog
ICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jYWxsOgotICAgIGNhc2UganNfdHJhbXBvbGluZV9v
cF90YWlsX2NhbGw6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2NvbnN0cnVjdDoKKyAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2UganNfdHJhbXBvbGlu
ZV9vcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0
b3JfbmV4dDoKICAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfaXRlcmF0b3Jfb3BlbjoKICAgICBj
YXNlIGpzX3RyYW1wb2xpbmVfb3BfY2FsbF9zbG93OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IGI0NTFjZGI2
MWY3YTExYjMzMDJjMTg1YzY2YmZmMTdhOWZkYmUwOWYuLmU3MjJmOWViZGFjYzg5MzY5MDY1NmQ1
YjYzZTlmNjI0NDQ2MTVmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTE2NiwxMCArMTY2LDEwIEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY2FsbGVyUmV0dXJuUEMo
Q29kZUJsb2NrKiBiYXNlbGluZUNvCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVU
VVJOX0xPQ0FUSU9OKG9wX2NvbnN0cnVjdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgotICAgICAgICAgICAganVtcFRhcmdl
dCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdyk7CisgICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJncyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0
cnVjdFZhcmFyZ3M6Ci0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gTExJTlRfUkVUVVJOX0xPQ0FU
SU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRhcmdldCA9
IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6IHsKICAg
ICAgICAgICAgIGlmIChjYWxsSW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSA9PSBvcF9nZXRfYnlfaWQp
CkBAIC0yMDEsMTAgKzIwMSwxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDbwogICAgICAgICBj
YXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgogICAgICAgICBjYXNlIElubGluZUNhbGxG
cmFtZTo6Q2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1
Y3RWYXJhcmdzOiB7Ci0gICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9Ci0g
ICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5m
b0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gPSBudWxscHRyOworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPm1fbG9jayk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgobG9ja2VyLCBj
YWxsQnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm8pOwotCiAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJ
bmZvLT5kb25lTG9jYXRpb24oKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDk1NmQ2OTQwZTdkMjBiODIwMmYyNTUz
ZWM1ZmU3MGI3ZThlOWU2MGEuLmU2MWY4OTRiZTEwOGNjYmZhMTJkYjIwODkyOWVjZGUyYzNkZjBm
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcApAQCAtODQ3LDEwICs4NDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuZW1p
dFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGluZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBbJl0geworICAgICAgICAg
ICAgaW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIHNjb3BlZExhbWJkYTx2
b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNo
dWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9KSk7CiAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93UGF0aCA9IG1f
aml0LmxhYmVsKCk7CiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAg
ICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIHNj
b3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRh
aWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVm
ZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTkwMCw3ICs5MDAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5wcmVwYXJl
Rm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAgICAgICB9
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRGYXN0UGF0aCht
X2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKaW5kZXggMGZlN2E3OTA5MTVhNzI0ZjRlMWZmYmQ5NmJhMTRlN2E4NWNi
OGM3OS4uNzcwNzNmMzRhZmJmZGY5NWZlNTgyNWEzYzg5ODljMzIyM2RkYWE1YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC05
MzgsMTAgKzkzOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2Rl
KQogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkxhYmVsIG1haW5QYXRoID0gbV9qaXQubGFiZWwo
KTsKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwog
Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBbJl0geworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxG
YXN0UGF0aChtX2ppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwogICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dQYXRoID0gbV9qaXQubGFiZWwoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7
CkBAIC05ODEsNyArOTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZSkKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBp
ZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBzY29w
ZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWls
Q2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKQEAgLTk4OSw3ICs5ODksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgICAg
IG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOworICAg
ICAgICB9KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+
ZW1pdEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBlMWM4MmRmODgzNDE0OTE5ODRiMDk4MzgxYjgwZDVlYTM2NzJkNmViLi4wMThhMmY4NThm
NDIxMWQzODdiNDJiNjkyZTI1YjUxODYxYmU0Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMDQwMywxMCArMTA0MDMsMTAgQEAgSUdO
T1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0
VGFpbENhbGxGYXN0UGF0aChqaXQsIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBzY29wZWRMYW1iZGE8dm9pZCgp
PihbJl17CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1
ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJl
dHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA1NTksMTAgKzEw
NTU5LDEwIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkQ2FsbExp
bmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAg
ICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KSk7CiAKICAgICAg
ICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGF1dG8gc2xv
d1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOwpAQCAtMTA5MDIsMTAgKzEwOTAyLDEwIEBAIElHTk9S
RV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86
OnJlZ1QwLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgc2NvcGVkTGFtYmRh
PHZvaWQoKT4oWyZdewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9
KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZh
bGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8pOwogICAgICAgICAgICAgICAg
ICAgICBkb25lID0gaml0Lmp1bXAoKTsKQEAgLTExMTgzLDEwICsxMTE4MywxMCBAQCBJR05PUkVf
Q0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2
b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGppdC5qdW1wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAKaW5kZXggYzhjYmJlZTA2YmY3ZDY2NjJjMTlhNGE0YThhMThjMjFjZWZk
M2Y3Mi4uZTY0NTg1MzFlYmM5MDRkZTVkZDA0Y2UzYWJhNTNjNWJkM2M3MGIwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcApAQCAtNzQ1LDE4ICs3
NDUsMTggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1AKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
TGlua0luZm8qIGluZm8pCiB7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCks
IEdQUkluZm86OnJlZ1QzKTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KHZtLCBpbmZvKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZt
LCBHUFJJbmZvOjpyZWdUMiwgaW5mby0+Y2FsbE1vZGUoKSk7CiB9CiAKLXZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwg
Q2FsbExpbmtJbmZvKiBpbmZvKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2Fs
bFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBtb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIp
OwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7
CiAgICAgICAgIGxpbmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soWz0sICZ2
bV0gKCkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sICppbmZvKTsKLSAgICAg
ICAgICAgIGluZm8tPnNldFNsb3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZt
LCB2aXJ0dWFsVGh1bmspKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRT
dHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2Fs
bE1vZGUpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxs
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPih2aXJ0dWFs
VGh1bmsuY29kZSgpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggNjVkZDhlZGVmNzQ3OTk2ZDVmNmQ4ZjE5
MjQ2ZTZhZDkzMzZkNDczOC4uYTQ0YWE1Y2Y5NTRmMmMxNjU0NzllYzJkY2Q5MjNkNWZmNGYzZDFm
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0x
NzUyLDcgKzE3NTIsNyBAQCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3Nl
bWJsZXIgewogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7Ci0gICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRo
b3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0
VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgQ2FsbE1vZGUpOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCmluZGV4IDE1ODk2MDNmMTQ5YzI3
NmMzNTllN2JiMjZkNjRmNGQ4NTcyN2YxNTAuLjMwMDNiMDczNTAxODhlNWY3M2ZjYzk2NzIwZDZh
OWU3NDFmOGJjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENv
ZGUuaApAQCAtNjIsNyArNjIsNiBAQCBjbGFzcyBKSVRDb25zdGFudFBvb2wgewogCiAgICAgZW51
bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CiAgICAgICAgIEdsb2JhbE9iamVjdCwKLSAgICAgICAg
Q2FsbExpbmtJbmZvLAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKICAgICAgICAgRnVuY3Rp
b25EZWNsLAogICAgICAgICBGdW5jdGlvbkV4cHIsCkBAIC05Myw3ICs5Miw2IEBAIGNsYXNzIEJh
c2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVy
IHsKICAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CiAgICAgUENUb0NvZGVPcmlnaW5N
YXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdp
bk1hcC5nZXQoKTsgfQogCi0gICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZv
czsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxz
OwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CiAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwCmluZGV4IGNmMTVjZTE5OWVkMzc2YWYxNTBlODg3ZjNlZWQwMmZhMTVkYzdiMmEu
LjUwMmY5YTA3MjFkZjFlMzEwNzhmNjk5YTNjZWVkZjUyOTc4OTIxYjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3Rz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExp
c3QuaCIKIApAQCAtODIsNiArODMsMzcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KgogICAgIH0K
IH0KIAorQ2FsbEZyYW1lU2h1ZmZsZURhdGEgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZv
ckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07CisjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKKyNlbmRpZgorICAgIENhbGxGcmFtZVNodWZmbGVE
YXRhIHNodWZmbGVEYXRhOworICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29k
ZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG51bVBhcmFtZXRlcnM7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9
IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworI2VuZGlmCisgICAgc2h1ZmZsZURhdGEubnVt
TG9jYWxzID0gYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6
ZW9mKFJlZ2lzdGVyKTsKKyAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2Fy
Z2MpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkg
eworICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCisgICAgICAgICAg
ICAgICAgRGF0YUZvcm1hdEpTKTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzaHVm
ZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVKU1IucGF5bG9hZEdQ
UigpLCBEYXRhRm9ybWF0SlMpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzaHVmZmxl
RGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBj
YWxsZWVKU1IucGF5bG9hZEdQUigpKTsKKyNlbmRpZgorICAgIHNodWZmbGVEYXRhLnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIHNodWZmbGVEYXRhLnNocmlua1RvRml0KCk7CisgICAg
cmV0dXJuIHNodWZmbGVEYXRhOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmgKaW5kZXggMzM2NTdlMzNhNjRmMzc4MWY0MzA5OThjMTMzMzcxYTFhYTY0Yjc1
YS4uMGJjMTliOTlkNjFlNGJjYmI3MTllYTlmY2MxYmM4YzM3ZmJmZWM1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaApAQCAtMzIsNiAr
MzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RydWN0IE9wVGFpbENhbGw7CisKIHN0cnVj
dCBDYWxsRnJhbWVTaHVmZmxlRGF0YSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CkBAIC00MCw2ICs0Miw4IEBAIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSB7CiAg
ICAgICAgIGFyZ3Muc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgY3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwoY29uc3QgT3BUYWls
Q2FsbCYsIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMpOworCiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zl
cnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNp
Z25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAppbmRleCA5Mjk0MjQ2MDczNDAwOTExYjZjMzU3Yzc4YTRhMGM2YTc0ZTlhYWQ0Li4yOGFlNmY3
NzBkZGFjZDcxYzZmMTgyYzlkMTc5ZmQxY2NlYjhkZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCkBAIC0xMDEsMTIgKzEwMSw5IEBAIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5saW5rCiAgICAg
cmV0dXJuIHN0ZDo6dHVwbGUgeyBzdHViSW5mbywgc3R1YkluZm9JbmRleCB9OwogfQogCi1zdGQ6
OnR1cGxlPFVubGlua2VkQ2FsbExpbmtJbmZvKiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudD4g
SklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpCitVbmxpbmtlZENhbGxMaW5rSW5mbyogSklU
OjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpCiB7Ci0gICAgdm9pZCogdW5saW5rZWRDYWxsTGlu
a0luZm9JbmRleCA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Piht
X3VubGlua2VkQ2FsbHMuc2l6ZSgpKSk7Ci0gICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8g
PSAmbV91bmxpbmtlZENhbGxzLmFsbG9jKCk7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjYWxsTGlua0luZm9JbmRleCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6Q2FsbExpbmtJbmZvLCB1bmxpbmtlZENhbGxMaW5rSW5mb0luZGV4KTsKLSAgICByZXR1
cm4gc3RkOjp0dXBsZSB7IGluZm8sIGNhbGxMaW5rSW5mb0luZGV4IH07CisgICAgcmV0dXJuICZt
X3VubGlua2VkQ2FsbHMuYWxsb2MoKTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTAx
MCw3ICsxMDA3LDYgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV91bmxpbmtl
ZENhbGxzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+KG1fdW5saW5rZWRDYWxs
cy5zaXplKCkpOwogICAgIGlmIChtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5zaXplKCkpCiAg
ICAgICAgIHN0ZDo6bW92ZShtX3VubGlua2VkQ2FsbHMuYmVnaW4oKSwgbV91bmxpbmtlZENhbGxz
LmVuZCgpLCBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscy5iZWdpbigpKTsKLSAgICBtX2ppdENv
ZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwog
ICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8+KG1fdW5saW5rZWRTdHViSW5mb3Muc2l6ZSgpKTsKICAgICBpZiAo
bV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSkKICAgICAgICAgc3RkOjptb3Zl
KG1fdW5saW5rZWRTdHViSW5mb3MuYmVnaW4oKSwgbV91bmxpbmtlZFN0dWJJbmZvcy5lbmQoKSwg
bV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zLmJlZ2luKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKaW5kZXggZGUyYzVjZTc3MGJiZDU5M2I3YWU1ZmQxYTY1MjY3Mzg5NDNkZDlhMS4uNjdi
NDNkOGZhMzBiNzJjYmQ0OTQ0NjIyOGM2NDI5NjRmM2QzMzUxNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCkBAIC0xNTMsNyArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENh
bGxDb21waWxhdGlvbkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxv
Y2F0aW9uOwogICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0lu
Zm87Ci0gICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rp
b24pOwpAQCAtMjk0LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYg
T3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZv
Q29uc3RhbnQpOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpv
cGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
OworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJik7CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNv
bnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwpAQCAtNzA2LDYgKzcwNSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNo
RnVuY3Rpb24+CiAgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiosIGNvbnN0IEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVybkZyb21C
YXNlbGluZUdlbmVyYXRvcihWTSYpOworCisgICAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTcyMSw3ICs3MjQsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJH
ZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdl
bmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNl
ZEZvck9wR2V0RnJvbVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQpAQCAtOTU4LDcgKzk2
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlLCB2b2lkKiBwYXlsb2Fk
ID0gbnVsbHB0cik7CiAgICAgICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8oKTsKLSAgICAgICAgc3RkOjp0dXBsZTxVbmxpbmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQ+IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOwogCiAgICAgICAg
IEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC0xMDI5LDcgKzEwMzEsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBWZWN0b3I8SklUQ29uc3RhbnRQb29sOjpWYWx1ZT4gbV9j
b25zdGFudFBvb2w7CiAgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxP
YmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9Owot
ICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwogICAgICAgICBT
ZWdtZW50ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAg
ICAgICAgU2VnbWVudGVkVmVjdG9yPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5r
ZWRTdHViSW5mb3M7CiAgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0
Y2hKdW1wVGFibGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkx
OTkxNTg0NjhjMGZlMTAyYjVkZmJmYTJiZTRmZTE3MzE5N2UyYi4uNTcxOTYxMjE1NjBhM2EyOWFl
M2QyMDcxMTNjNjBkY2U2MDgwZDYzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCkBAIC01OSwxNyArNTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4g
cmV0dXJuVmFsdWVHUFIgKHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQp
LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVK
U1IpOwotCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci0jZWxzZQotICAgIGVtaXROYWtlZE5lYXJK
dW1wKHZtKCkuZ2V0Q1RJU3R1YihvcF9yZXRfaGFuZGxlckdlbmVyYXRvcikuY29kZSgpKTsKLSNl
bmRpZgorICAgIGVtaXROYWtlZE5lYXJKdW1wKHZtKCkuZ2V0Q1RJU3R1YihyZXR1cm5Gcm9tQmFz
ZWxpbmVHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IoVk0mKQoreworICAg
IENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKKyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExp
c3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJ
VGh1bmspOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOworfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCkBA
IC04NCw3ICs4OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9w
X2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAg
ICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQp
CitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICB1bnNp
Z25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBpbnQg
YXJnQ291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0
ZWNvZGUsIGNoZWNrcG9pbnQpOwpAQCAtOTcsNyArMTAxLDcgQEAgSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCB0bXBKU1IpOwog
ICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwodG1wSlNSKTsKICAgICAgICAgbG9h
ZDMyKEFkZHJlc3ModG1wSlNSLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgdG1wR1BSKTsKLSAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEodG1wR1BSLCBieXRlY29k
ZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwg
Ynl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJv
ZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmso
dGhpcyk7CiAgICAgfQogCkBAIC0xMTAsNyArMTE0LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9j
b25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAs
IHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK0pJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlKQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlz
VmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC0xNjAsNyArMTY0LDcgQEAgSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmYKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1Q1LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zm
c2V0KSwgcmVnVDIpOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVn
VDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1l
dGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpKSwgcmVnVDMpOwogICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCBy
ZWdUMywgcmVnVDIpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5r
SW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CkBAIC0yMDMs
NjQgKzIwNywzOSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQo
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpDYWxsLCByZWdUMCk7Ci0KICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNv
ZGUubV9hcmd2OwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZFZhbHVlKEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsZWVKU1IpOwogICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOwotICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3QoKm1fdm0sIGluZm8pOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
ID0gcmVnVDI7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cENhbGxFdmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZv
R1BSKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3Zt
LCBjYWxsTGlua0luZm9HUFIsIENhbGxNb2RlOjpSZWd1bGFyKTsKICAgICByZXNldFNQKCk7CiAK
ICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExp
bmtJbmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCitib29sIEpJVDo6
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJ
bmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNo
dWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KCk7Ci0gICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0g
ICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzaHVmZmxlRGF0YS0+bnVtYmVy
VGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSNlbmRpZgotICAgIHNo
dWZmbGVEYXRhLT5udW1Mb2NhbHMgPQotICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLT5h
cmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9
Ci0gICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0
ZWNvZGUubV9hcmd2LAotICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7Ci0gICAgfQotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6
OmluR1BSKGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIERhdGFGb3JtYXRKUyk7Ci0jZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
blBhaXIoY2FsbGVlSlNSLnRhZ0dQUigpLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpKTsKLSNlbmRp
ZgotICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLQogICAgIGNv
bnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENvbnN0YW50
KGNhbGxMaW5rSW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOwotICAgIEp1bXBMaXN0IHNs
b3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxMaW5rSW5mb0dQUiwgWyZdIHsKLSAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIgc2h1ZmZsZXIgeyAqdGhpcywgKnNodWZmbGVEYXRhIH07CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcFRhaWxDYWxsOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBKdW1w
TGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIHNjb3BlZExh
bWJkYTx2b2lkKCk+KFsmXXsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURh
dGEgPSBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6Y3JlYXRlRm9yQmFzZWxpbmVPckxMSW50VGFpbENh
bGwoYnl0ZWNvZGUsIG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsIHNodWZmbGVEYXRhIH07CiAg
ICAgICAgIHNodWZmbGVyLmxvY2tHUFIoY2FsbExpbmtJbmZvR1BSKTsKICAgICAgICAgc2h1ZmZs
ZXIucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgfSk7CisgICAgfSkpOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRocyk7CiAKLSAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKLSAgICBp
bmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7Ci0KICAgICBhdXRv
IGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yODgs
MTcgKzI2NywxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogICAgICovCiAKICAgICBVbmxp
bmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3Bf
Y2FsbF9ldmFsKSB7Ci0gICAgICAgIHN0ZDo6dGllKGluZm8sIGluZm9Db25zdGFudCkgPSBhZGRV
bmxpbmtlZENhbGxMaW5rSW5mbygpOworICAgICAgICBpbmZvID0gYWRkVW5saW5rZWRDYWxsTGlu
a0luZm8oKTsKICAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
LSAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKTsKICAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENh
bGxDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOwotICAgICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50
ID0gaW5mb0NvbnN0YW50OwogICAgIH0KLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwg
aW5mb0NvbnN0YW50KTsKKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSk7CiAKICAgICAv
LyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGgg
QXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwpAQCAtMzE2LDE2ICsyOTIsMTYg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwoY2FsbGVlSlNSKSk7CiAjZW5kaWYKIAotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNv
ZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQorICAgIGlmIChjb21w
aWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjYWxsTGlua0luZm9HUFIgPSByZWdUMjsK
LSAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBjYWxsTGlua0luZm9HUFIpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkNhbGxMaW5rSW5mbygpLCBjYWxsTGlua0luZm9HUFIpOwogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVt
aXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1IucGF5bG9hZEdQUigpLCBj
YWxsTGlua0luZm9HUFIsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRH
UFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17CiAgICAgICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFp
bENhbGxTbG93KGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIH0pOworICAgICAgICB9KSk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gbGFiZWwoKTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CkBAIC0zNDQsMTUgKzMyMCwxNiBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCB1bnNpZ25lZCkKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIEFTU0VSVChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdU
Mik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNjYsNyArMzQzLDYgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUUKIAogICAgIHJlc2V0U1AoKTsKIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0NTg3ODAzYzI2
MThjNjgwMzk4MzZjZWU2YzdiMzRmZDJjMzA0Li4yZmUyM2M0OWZkMGY5NDA5MWY2ODYwNWI3NTdh
ZTJjZTMyMjAxNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
QEAgLTM3MCwyMSArMzcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0m
KQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJB
dE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIGpp
dC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwotICAgIGppdC5yZXQoKTsKLQotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OkV4dHJhQ1RJVGh1bmspOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9yZXRfaGFuZGxlciIpOwotfQotI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRp
dmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMGUyZDdkMDhjZmI3
NWYzMjcxZDA2MmIwOTZhYmIwYzM1YzdmMWE4NS4uNmJjZTc0YWI4MmM1NTdkMDA4NTE1MDc4NTFh
MDRlNGUxNDYzMGMwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCkBAIC02MCw3ICs2MCw3IEBACiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKLSNp
bmNsdWRlICJSZXBhdGNoLmgiCisjaW5jbHVkZSAiUmVwYXRjaElubGluZXMuaCIKICNpbmNsdWRl
ICJTaGFkb3dDaGlja2VuLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNs
dWRlICJTdXBlclNhbXBsZXIuaCIKQEAgLTE0NDYsMTg2ICsxNDQ2LDkgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxFdmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiBnbG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLXN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBjYWxs
ZWVGcmFtZS0+c2V0Q29kZUJsb2NrKG51bGxwdHIpOwotCi0gICAgaWYgKGNhbGxMaW5rSW5mby0+
c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgYXV0byBjYWxs
RGF0YSA9IGdldENhbGxEYXRhKHZtLCBjYWxsZWUpOwotICAgICAgICBBU1NFUlQoY2FsbERhdGEu
dHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOwotCi0gICAgICAgIGlmIChjYWxsRGF0YS50eXBl
ID09IENhbGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxlZUZyYW1l
LT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgICAgICB2bS5lbmNvZGVkSG9z
dENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxs
ZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBEaXNhbGxv
d0dDIGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAg
ICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCks
Ci0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAot
ICAgICAgICAgICAgICAgIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/
IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgIAotICAgICAg
ICBBU1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgICAg
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVy
cm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
Ci0gICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwotICAgIH0KLQotICAgIEFTU0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgp
ID09IENvZGVGb3JDb25zdHJ1Y3QpOwotCi0gICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0Q29u
c3RydWN0RGF0YSh2bSwgY2FsbGVlKTsKLSAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlICE9
IENhbGxEYXRhOjpUeXBlOjpKUyk7Ci0KLSAgICBpZiAoY29uc3RydWN0RGF0YS50eXBlID09IENh
bGxEYXRhOjpUeXBlOjpOYXRpdmUpIHsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbGVlRnJhbWUpOwotICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFz
T2JqZWN0KGNhbGxlZSkpOwotICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9
IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9i
amVjdCh2bSksIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0
clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRo
ZUZyYW1lKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxs
RGF0YTo6VHlwZTo6Tm9uZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKLSAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
S2VlcFRoZUZyYW1lKSk7Ci19Ci0KIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25M
aW5rQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pKQog
ewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7
Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIAotICAgIFJFTEVBU0VfQVNT
RVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOwotICAgIAotICAgIEpTVmFsdWUgY2FsbGVl
QXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOwotICAgIEpT
Q2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUp
OwotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAgICAgICAgaWYgKGF1dG8qIGlu
dGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2Fs
bGVlQXNWYWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Io
a2luZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOwotCi0gICAgICAg
ICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldFNlZW4oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBs
aW5rTW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0
ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7Ci0KLSAgICAgICAgICAgIHZvaWQqIGxpbmtl
ZFRhcmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIHJldHVy
biBlbmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
TGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDog
S2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxl
ZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLQotICAgIEpTRnVuY3Rpb24qIGNhbGxl
ZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpTU2Nv
cGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwotICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG51bGxwdHI7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKLSAg
ICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBraW5kLCBjYWxsZWUpOwotICAg
ICAgICBpZiAoIWNvZGVQdHIpCi0gICAgICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50
cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRsZVRocm93
RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0u
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQq
PihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2FsbChraW5k
KSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFs
T2JqZWN0LCBjYWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlv
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGNh
bGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKLSAgICAgICAgZnVuY3Rpb25FeGVjdXRh
YmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwg
c2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKLQotICAgICAgICBjb2RlQmxv
Y2sgPSAqY29kZUJsb2NrU2xvdDsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7Ci0KLSAgICAg
ICAgQXJpdHlDaGVja01vZGUgYXJpdHk7Ci0gICAgICAgIGlmIChjYWxsZWVGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAg
ICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcml0
eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7Ci0gICAgfQotCi0gICAgaWYgKCFj
YWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2Vlbigp
OwotICAgIGVsc2UKLSAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUs
ICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLQotICAgIHJldHVy
biBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBS
ZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci19Ci0KLWlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlND
ZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi17Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxp
emF0aW9uS2luZCgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7Ci0KLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFu
dGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVu
Y3Rpb24oY2FsbGVlQXNWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCkpIHsKLSAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZt
LCBjYWxsZWVBc1ZhbHVlKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGlu
ZUZvcihraW5kKTsKLSAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwotICAgICAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFp
bCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZ2xvYmFsT2JqZWN0
LCBjYWxsZWVGcmFtZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvKSk7Ci0gICAgfQotICAg
IAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGVVbmNo
ZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5leGVj
dXRhYmxlKCk7Ci0gICAgaWYgKFVOTElLRUxZKCFleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yKGtp
bmQpKSkgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotCi0gICAgICAg
IGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewotICAgICAgICAgICAgdm9pZCog
dGhyb3dUYXJnZXQgPSB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9OwotCi0gICAgICAg
IGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0
eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgewotICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3Ry
dWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGZ1bmN0aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm4g
aGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvZGVCbG9jayoq
IGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAg
ICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1
dGFibGU+KHZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigp
KTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5Ci0gICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hl
Y2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1l
LCBnbG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsLCBTbG93UGF0aFJldHVyblR5cGUsIChD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAppbmRleCA1NDhkNTFjZGE0ZTJhMjFhOTIxNzliNTE1Zjk4NGFmMmM2OGQ2ZGZjLi40ZDljMmVk
N2Q0OGU1YmEyNTZhMzM0NGRmMTY2ZGNhZmI3NWM2MWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJSZXBhdGNoLmgiCiAKLSNpZiBFTkFCTEUoSklUKQotCiAjaW5jbHVkZSAiQmluYXJ5
U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCIKQEAgLTcxLDYgKzY5LDEyMiBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2Rl
UmVmKQoreworICAgIGNhbGxMaW5rSW5mby5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2Rl
UmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKK30KKworI2lm
IEVOQUJMRShKSVQpCitzdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCit7CisgICAgbGlu
a1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJl
dGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9p
ZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQoreworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5r
ID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkpOworICAgIGxp
bmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Cit9CisKK3N0YXRp
YyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiBjYWxsZWUpCit7CisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgIC8vIEVhY2ggV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc2hhcmVzIHRo
ZSBzdHVicyBmcm9tIHRoZWlyIFdlYkFzc2VtYmx5Lk1vZHVsZSwgd2hpY2ggYXJlIHRoZXJlZm9y
ZSB0aGUgYXBwcm9wcmlhdGUgb3duZXIuCisgICAgcmV0dXJuIGpzQ2FzdDxKU1dlYkFzc2VtYmx5
TW9kdWxlKj4oY2FsbGVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCit9CisKK3ZvaWQgbGlua01vbm9tb3JwaGljQ2FsbCgK
KyAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCisgICAgSlNPYmplY3QqIGNhbGxlZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCit7CisgICAgQVNT
RVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgLy8gT3VyIGNhbGxlciBtdXN0IGhhdmUg
YSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCisgICAgLy8gdGhpcyBmcm9tIFdhc20s
IHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICBBU1NFUlQoY2FsbGVyRnJhbWUt
PmNhbGxlZSgpLmlzQ2VsbCgpKTsKKworICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0g
Y2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworCisgICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1
YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9jay4KKyAgICBKU0NlbGwqIG93bmVyID0gaXNX
ZWJBc3NlbWJseU1vZHVsZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNz
ZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJs
b2NrOworICAgIEFTU0VSVChvd25lcik7CisKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xp
bmtlZCgpKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVy
LCBjYWxsZWUsIGNvZGVQdHIpOworICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2
bSwgb3duZXIsIGNhbGxlZSk7CisKKyAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNh
bGxlckNvZGVCbG9jaykpCisgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxs
Q29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAi
IHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwg
Y29kZVB0ciwgIlxuIik7CisKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICBjYWxs
ZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8p
OworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9u
S2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkpIHsKKyAg
ICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgbGlua1BvbHltb3JwaGljQ2Fs
bFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIAor
ICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOworfQorCitzdGF0aWMgdm9pZCByZXZl
cnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3sKKyAgICBpZiAoY2FsbExp
bmtJbmZvLmlzRGlyZWN0KCkpIHsKKyNpZiBFTkFCTEUoSklUKQorICAgICAgICBjYWxsTGlua0lu
Zm8uY2xlYXJDb2RlQmxvY2soKTsKKyAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5
SmV0dGlzb24oKSkKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby5pbml0aWFsaXplRGlyZWN0Q2Fs
bCgpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xl
YXJlZEJ5SmV0dGlzb24oKSkgeworICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxM
aW5rSW5mbywgY29kZVJlZik7CisKKyAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uc3R1Yigp
KQorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7CisgICAg
ICAgIH0KKyAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7IC8vIFRoaXMgYWxzbyBj
bGVhcnMgdGhlIGlubGluZSBjYWNoZSBib3RoIGZvciBkYXRhIGFuZCBjb2RlLWJhc2VkIGNhY2hl
cy4KKyAgICB9CisgICAgY2FsbExpbmtJbmZvLmNsZWFyU2VlbigpOworICAgIGNhbGxMaW5rSW5m
by5jbGVhclN0dWIoKTsKKyAgICBpZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCisgICAgICAg
IGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKK30KKwordm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZj
YWxsTGlua0luZm8pKTsKKyAgICAKKyAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZt
LmdldENUSUxpbmtDYWxsKCkucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOworfQor
CitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIo
Vk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTT2JqZWN0KiBjYWxsZWUpCit7
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmICghY2FsbGVlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoa2luZCAhPSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2Vi
QXNzZW1ibHlGdW5jdGlvbio+KHZtLCBjYWxsZWUpKQorICAgICAgICByZXR1cm4gd2FzbUZ1bmN0
aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2bSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGtpbmQpOworICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOworI2VuZGlm
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiBFTkFCTEUoSklUKQorCiBzdGF0aWMgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRhZ09wZXJhdGlvbldpdGhWYWxpZGF0aW9uKEZ1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9uKQogewogICAgIEpTQ19SRVRVUk5f
UkVUQUdHRURfT1BFUkFUSU9OX1dJVEhfVkFMSURBVElPTihvcGVyYXRpb24pOwpAQCAtMTQzNSw3
MCArMTU0OSw2IEBAIHZvaWQgcmVwYXRjaEluc3RhbmNlT2YoCiAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMp
OwogfQogCi1zdGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNv
ZGVSZWYpCi17Ci0gICAgY2FsbExpbmtJbmZvLnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNv
ZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpOwotfQotCi1z
dGF0aWMgdm9pZCBsaW5rU2xvd1BhdGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCi17Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0s
IGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoVk0mIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwg
Y2FsbExpbmtJbmZvKTsKLSAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0
dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIHdl
YkFzc2VtYmx5T3duZXIoSlNDZWxsKiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotICAgIC8vIEVhY2ggV2ViQXNzZW1ibHkuSW5zdGFuY2Ugc2hhcmVzIHRoZSBzdHVicyBmcm9t
IHRoZWlyIFdlYkFzc2VtYmx5Lk1vZHVsZSwgd2hpY2ggYXJlIHRoZXJlZm9yZSB0aGUgYXBwcm9w
cmlhdGUgb3duZXIuCi0gICAgcmV0dXJuIGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2Fs
bGVlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCi19Ci0KLXZvaWQgbGlua01vbm9tb3JwaGljQ2FsbCgKLSAgICBWTSYgdm0s
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJs
b2NrKiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlu
a0luZm8uc3R1YigpKTsKLQotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUt
PmNhbGxlckZyYW1lKCk7Ci0gICAgLy8gT3VyIGNhbGxlciBtdXN0IGhhdmUgYSBjZWxsIGZvciBh
IGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0gICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0
aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAgICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlz
Q2VsbCgpKTsKLQotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUt
PmNvZGVCbG9jaygpOwotCi0gICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2
ZSBhIHZhbGlkIENvZGVCbG9jay4KLSAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseU1v
ZHVsZShjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihj
YWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFT
U0VSVChvd25lcik7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAg
ICBjYWxsTGlua0luZm8uc2V0TW9ub21vcnBoaWNDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUsIGNv
ZGVQdHIpOwotICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZSh2bSwgb3duZXIsIGNh
bGxlZSk7Ci0KLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9j
aykpCi0gICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihj
YWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50
ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxu
Iik7Ci0KLSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2st
PmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUsICZjYWxsTGlua0luZm8pOwotCi0gICAgaWYg
KGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCAmJiBjYWxs
TGlua0luZm8uYWxsb3dTdHVicygpKSB7Ci0gICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxs
TGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7Ci19
Ci0KIHZvaWQgbGlua0RpcmVjdENhbGwoCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cikKQEAgLTE1MjgsMzUg
KzE1NzgsNiBAQCB2b2lkIGxpbmtTbG93Rm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKICAgICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsK
IH0KIAotc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVS
ZWYpCi17Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5pc0RpcmVjdCgpKSB7Ci0gICAgICAgIGNhbGxM
aW5rSW5mby5jbGVhckNvZGVCbG9jaygpOwotICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVh
cmVkQnlKZXR0aXNvbigpKQotICAgICAgICAgICAgY2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJl
Y3RDYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJl
ZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5r
SW5mbywgY29kZVJlZik7Ci0KLSAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uc3R1YigpKQot
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZlcnRDYWxsVG9TdHViKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2FsbGVlKCk7IC8vIFRoaXMgYWxzbyBjbGVh
cnMgdGhlIGlubGluZSBjYWNoZSBib3RoIGZvciBkYXRhIGFuZCBjb2RlLWJhc2VkIGNhY2hlcy4K
LSAgICB9Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU2VlbigpOwotICAgIGNhbGxMaW5rSW5mby5j
bGVhclN0dWIoKTsKLSAgICBjYWxsTGlua0luZm8uY2xlYXJTbG93U3R1YigpOwotICAgIGlmIChj
YWxsTGlua0luZm8uaXNPbkxpc3QoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwot
fQotCi12b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
LXsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2lu
ZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwotICAgIAotICAg
IHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Ci19Ci0KIHN0YXRp
YyB2b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewogICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBj
YWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CkBAIC0xNTY1LDkgKzE1ODYsOCBAQCBzdGF0aWMgdm9p
ZCBsaW5rVmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSQogICAgIGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihj
YWxsZXJDb2RlQmxvY2spLAogICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVs
bENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7
CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdl
dENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKICAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7Ci0gICAgY2FsbExpbmtJbmZvLnNldFNs
b3dTdHViKEdDQXdhcmVKSVRTdHViUm91dGluZTo6Y3JlYXRlKHZtLCB2aXJ0dWFsVGh1bmspKTsK
ICAgICBjYWxsTGlua0luZm8uc2V0Q2xlYXJlZEJ5VmlydHVhbCgpOwogfQogCkBAIC0xODAzLDgg
KzE4MjMsMTAgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIgPSBjb2RlUHRyOwotICAgICAg
ICBpZiAobmVlZHNEb25lSnVtcCkKKyAgICAgICAgaWYgKG5lZWRzRG9uZUp1bXApIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXNEYXRhSUMpOwogICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1Ykpp
dC5qdW1wKCkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJnN0
dWJKaXQpOwpAQCAtMTgyOCwxNSArMTg1MCwyMSBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbAog
ICAgIH0KICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgaWYg
KGlzRGF0YUlDICYmICFjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7Ci0gICAgICAgIC8vIFdl
IHdlcmUgY2FsbGVkIGZyb20gdGhlIGZhc3QgcGF0aCwgZ2V0IHJpZCBvZiBhbnkgcmVtbmFudHMg
b2YgdGhhdAotICAgICAgICAvLyB3aGljaCBtYXkgZXhpc3QuIFRoaXMgcmVhbGx5IG9ubHkgbWF0
dGVycyBmb3IgeDg2LCB3aGljaCBhZGp1c3RzCi0gICAgICAgIC8vIFNQIGZvciBjYWxscy4KLSAg
ICAgICAgc3R1YkppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVn
VDQpOworCisgICAgLy8gMS4gSWYgaXQgaXMgbm90IERhdGFJQywgbGlua1JlZ2lzdGVyIGlzIG5v
dCBwb2ludGluZyB0aGUgZG9uZUxvY2F0aW9uLgorICAgIC8vIDIuIElmIGl0IGlzIHRhaWwtY2Fs
bCwgbGlua1JlZ2lzdGVyIGlzIG5vdCBwb2ludGluZyB0aGUgZG9uZUxvY2F0aW9uIGZvciBzbG93
LWNhbGwgY2FzZS4KKyAgICAvLyBUaHVzIHdlIG5lZWQgdG8gcHV0IGl0IGZvciB0aGUgc2xvdy1w
YXRoIGNhbGwuCisgICAgaWYgKCFpc0RhdGFJQykgeworICAgICAgICBzdHViSml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRh
Z2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgIHN0dWJK
aXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpc0RhdGFJQyk7CisgICAgICAgIGlmIChjYWxsTGlu
a0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHZtLmdldENUSVN0dWIoSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVH
ZW5lcmF0b3IpLmNvZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpy
ZWdUNCk7CisgICAgICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgfQogICAgIH0KLSAgICBzdHViSml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51
bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7Ci0gICAgCi0gICAg
c3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7
CisKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwogICAg
ICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTE4
NTgsOCArMTg4NiwxMCBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbAogI2VuZGlmCiAgICAgfQog
Ci0gICAgaWYgKCFkb25lLmVtcHR5KCkpCisgICAgaWYgKCFkb25lLmVtcHR5KCkpIHsKKyAgICAg
ICAgQVNTRVJUKCFpc0RhdGFJQyk7CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2Fs
bExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKKyAgICB9CiAgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5r
UG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIAogICAgIGF1dG8g
c3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKApA
QCAtMjAwMSwyMyArMjAzMSw2IEBAIHZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKICAgICBJbmxpbmVBY2Nl
c3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbyk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBq
c1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNP
YmplY3QqIGNhbGxlZSkKLXsKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgaWYgKCFjYWxs
ZWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChraW5kICE9IENvZGVGb3JDYWxs
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0g
anNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNhbGxlZSkpCi0gICAgICAg
IHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHZtKTsKLSAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGNhbGxlZSk7CiAjZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAppbmRleCBlY2Uz
NzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3OWM3ZGU5Li45M2EwMzY1MzI2YWJmYmVkZWUw
NTc1ODljNDU0MDliMmViMzY1ODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApA
QCAtMjUsMTQgKzI1LDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEpJVCkKLQog
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJDYWxsVmFyaWFudC5o
IgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOworCiBlbnVtIGNsYXNzIEdldEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBC
eVZhbCwKQEAgLTg3LDUgKzg3LDMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29kZVNwZWNpYWxpemF0aW9uS2kKIAogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2hJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2hJbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmVmZTdiMWIzMzc2NGJkZjQy
YjJlNGYwMmQ0ZGYwY2Q5ZTgxYzQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaElubGluZXMuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiUmVwYXRjaC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNsb3dQYXRoUmV0
dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGNhbGxlZUZyYW1lLT5zZXRDb2Rl
QmxvY2sobnVsbHB0cik7CisKKyAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktp
bmQoKSA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERh
dGEodm0sIGNhbGxlZSk7CisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRh
OjpUeXBlOjpKUyk7CisKKyAgICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5
cGU6Ok5hdGl2ZSkgeworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbGVlRnJhbWUpOworICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09i
amVjdChjYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVl
ID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVj
dCh2bSksIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgICAgICB2bS5nZXRD
VElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRo
ZUZyYW1lKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoCisgICAgICAgICAgICAgICAgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBv
aW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpU
YWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25F
cnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAorICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZv
LT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKworICAgIGF1dG8g
Y29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNhbGxlZSk7CisgICAgQVNTRVJU
KGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAgaWYgKGNv
bnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7CisgICAgICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgY2Fs
bGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgdm0uZW5jb2Rl
ZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09i
amVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAgICAgIERp
c2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkgeworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgICAg
ICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihL
ZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
TExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAg
IH0KKworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5v
bmUpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFD
b25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCgKKyAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJu
VHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZv
LT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNE
aXJlY3QoKSk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3Vh
cmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxs
ID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rp
b25DZWxsKSB7CisgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWlj
Q2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENU
SUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoISFjb2RlUHRyKTsKKworICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNl
ZW5PbmNlKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2Fs
bGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQ
dHIpOworCisgICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtlZFRhcmdl
dCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENh
bGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChn
bG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsK
KyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNh
bGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVV
bmNoZWNrZWQoKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhl
Y3V0YWJsZSgpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNv
ZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlD
Q29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKKyAgICAgICAgaWYgKCFjb2RlUHRyKQorICAgICAg
ICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNr
QXJpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rp
b25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7CisgICAg
ICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2Vl
cFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYg
ZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVj
dCwgY2FsbGVlKSk7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsK
KyAgICAgICAgfQorCisgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVG
cmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3Bl
LCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisKKyAgICAgICAgY29kZUJsb2NrID0g
KmNvZGVCbG9ja1Nsb3Q7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworCisgICAgICAgIEFy
aXR5Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICAgICAgYXJp
dHkgPSBNdXN0Q2hlY2tBcml0eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJpdHkgPSBB
cml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOworICAgIH0KKworICAgIGlmICghY2FsbExp
bmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKKyAg
ICBlbHNlCisgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2Fs
bExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisKKyAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0
dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBK
U0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lh
bGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKKworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFy
YW50ZWVkSlNWYWx1ZUNhbGxlZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNG
dW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rp
b25DZWxsKSkgeworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4o
dm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9s
aW5lRm9yKGtpbmQpOworICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7CisgICAgICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpU
YWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmpl
Y3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisK
KyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNG
dW5jdGlvbkNlbGwpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVj
a2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0
YWJsZSgpOworICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5k
KSkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKworICAgICAgICBh
dXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAgICAgIHZvaWQqIHRo
cm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3QpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOwor
ICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NP
ZkNvZGVCbG9jaygpOworICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVj
dXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29k
ZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFu
ZGxlVGhyb3dFeGNlcHRpb24oKSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20g
SUMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMz
OQorICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigKKyAg
ICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxs
TW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1ZjdiNzg2NDExZDg1NWIyYTFkZTQ3Yy4uZGJk
NWFiZDM3ODhkNzFiODAzMDViYjg1MWZiY2MyNzEzZTg3YjAwZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtMzQ0LDQ4ICszNDQsMjUgQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5r
Rm9yUmVndWxhckNhbGwoVk0mIHZtKQogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENh
bGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3Qo
Vk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1
bGFyLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQogc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yVGFpbENhbGwoVk0mIHZtKQogewogICAg
IHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBDb2RlRm9yQ2FsbCk7
CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1
YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1
bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQotc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yQ29u
c3RydWN0Q2FsbChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2Fs
bE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNhbGwpOwotfQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDb25zdHJ1
Y3QoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpD
b25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0sIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKLSAgICBh
dXRvIG1vZGUgPSBjYWxsTGlua0luZm8uY2FsbE1vZGUoKTsKLSAgICBhdXRvIGtpbmQgPSBjYWxs
TGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgYXV0byBnZW5lcmF0b3IgPSBbJl0g
KCkgLT4gVGh1bmtHZW5lcmF0b3IgewotICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAg
c3dpdGNoIChjYWxsTW9kZSkgewogICAgICAgICBjYXNlIENhbGxNb2RlOjpSZWd1bGFyOgotICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsOwotICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxU
aHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3Q7CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5r
Rm9yUmVndWxhckNhbGw7CiAgICAgICAgIGNhc2UgQ2FsbE1vZGU6OlRhaWw6Ci0gICAgICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yVGFpbENhbGw7Ci0gICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFp
bENvbnN0cnVjdDsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsK
ICAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgotICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvckNv
bnN0cnVjdENhbGw7CiAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0
Q29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCAw
ZjlmNmUyZDM2ZjZkZDIzZTE4NzI2YWNlNjMxNGEzMGEyMDFkYmNlLi5hYjdjZjY2YzQyMTUxZWUw
MTk1OGMxYWIyMmYyOWZjZDhkZDcwMTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Io
Vk0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dl
bmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5r
UG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mLCBDYWxsTGlua0lu
Zm8mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVh
bFRodW5rRm9yKFZNJiwgQ2FsbE1vZGUpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4IGU4ZGFmZjdkODhiMzBjNmJm
ODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQwYjM3Mzg5MjFhNGYwMDE1MTJlN2RlZTNhODQ0M2M1
MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBA
IC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIgdm9pZCB3YXNtX2VudHJ5KHZvaWQqLCB2b2lkKiwg
dm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lKHZv
aWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBl
eHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lKHZvaWQpOwor
ZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUodm9p
ZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0aW9uSGFuZGxlclRyYW1wb2xpbmUodm9pZCk7CiBl
eHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxMSW50VHJhbXBvbGluZSh2b2lkKTsKICNlbmRpZgpA
QCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICBzdGF0
aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdh
dGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAg
ICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRh
ZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpT
RW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVJlZi5j
b25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lk
KiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50
cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYu
Z2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC0xNjEsMTEgKzE2MiwxOSBAQCB2
b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3ll
ZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsK
ICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAgICAgICAgICAgY29kZVJlZi5jb25z
dHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlTbG93UGF0aFB0clRhZykpOworICAgICAg
ICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcs
IHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9u
UHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRy
YW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFB0clRhZyldID0gY29k
ZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CisgICAgeworICAg
ICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRp
dmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOworICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklU
KCkpCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNF
bnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZVJlZi5j
b25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRH
YXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lk
KiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhv
dXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsKKyAgICAgICAgZ19qc2NDb25maWcubGxpbnQu
Z2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENhbGxXaXRob3V0VW50YWdK
U0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgfQogICAgIHsKICAgICAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKaW5kZXggMWE5NWQxZGQwZWE1ZWYzNDMxMDYxNWI2OTFlYmM5YTFl
YWI4MmE2YS4uZjlkMWRiNWE0NjkzNGM2NjcxNmVmNjc1ODBhNWM1YTIyOGMxZDRiNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC02Miw2
ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNs
dWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIK
KyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5oIgogI2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIK
ICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKQEAgLTU4
Miw2ICs1ODMsMTcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3RhY2tfY2hlY2spCiAgICAgTExJ
TlRfUkVUVVJOX1RXTyhwYywgY2FsbEZyYW1lKTsKIH0KIAorZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCog
Z2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKikKK3sKKyAg
ICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KSwgY2FsbExpbmtJbmZvKTsKK30KKworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVy
blR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCog
Z2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgSlNDZWxsKikKK3sKKyAg
ICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKKyAgICByZXR1cm4gdmlydHVh
bEZvcldpdGhGdW5jdGlvbihqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBj
YWxsZWVGcmFtZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOwor
fQorCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X29iamVjdCkKIHsKICAgICBM
TElOVF9CRUdJTigpOwpAQCAtMTgxOSw3ICsxODMxLDggQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJu
VHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxl
ZSwKICAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7
CiAgICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5h
dGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVG
cmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBM
TElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9z
dENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
SlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1l
ICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgICAgICAgICAgTExJTlRf
Q0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0
dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQ
dHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzbG93UGF0aExvZygiQ2FsbCBj
YWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwgIlxuIik7CkBAIC0xODM4LDcgKzE4
NTEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgICAgICBjYWxsZWVGcmFtZS0+c2V0
Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1
cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSkt
Pmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKICAgICAgICAgRGlzYWxsb3dHQyBkaXNh
bGxvd0dDOwotICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZy
YW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgIGF1dG8qIGNhbGxlclNQ
ID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAg
ICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRI
b3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAgCiAgICAgc2xvd1BhdGhMb2coIkNvbnN0cnVj
dG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4NDcs
NyArMTg2MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2Fs
bEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsCiAgICAgTExJTlRfQ0FMTF9USFJP
VyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwg
Y2FsbGVlKSk7CiB9CiAKLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNWYWx1ZSBj
YWxsZWVBc1ZhbHVlLCBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbnVsbHB0cikK
K2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJh
bWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKQog
ewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7
CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwpAQCAtMTg1OSwxNyArMTg3MywxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVw
Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaQogICAgIAog
ICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFz
VmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2
bSwgY2FsbGVlQXNWYWx1ZSkpIHsKKyAgICAgICAgaWYgKGNhbGxlZUFzVmFsdWUuaW5oZXJpdHM8
SW50ZXJuYWxGdW5jdGlvbj4odm0pKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFt
cG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0KLSAgICAg
ICAgICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewot
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVy
Q29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKLSAgICAgICAgICAgIH0KLQog
ICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxP
YmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQ
dHJUYWcpOworICAgICAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxl
ckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgICAgIExMSU5UX0NBTExfUkVU
VVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
SlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBraW5k
KSk7CiAgICAgfQpAQCAtMTkwNCw3NCArMTkxMyw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktp
CiAgICAgfQogCiAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgCi0gICAgaWYgKCFMTElOVF9B
TFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBjYWxsTGlu
a0luZm8tPmxpbmsodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICAg
ICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29taW5nQ2Fs
bChjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgfQotCiAgICAgYXNzZXJ0SXNUYWdnZWRX
aXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgTExJ
TlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJs
b2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgT3AmJiBieXRlY29kZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXggPSAwKQotewotICAgIC8vIFRo
aXMgbmVlZHMgdG86Ci0gICAgLy8gLSBTZXQgdXAgYSBjYWxsIGZyYW1lLgotICAgIC8vIC0gRmln
dXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBpbGUgaXQgaWYgbmVjZXNzYXJ5LgotICAgIC8v
IC0gSWYgcG9zc2libGUsIGxpbmsgdGhlIGNhbGwncyBpbmxpbmUgY2FjaGUuCi0gICAgLy8gLSBS
ZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3
IGNhbGwgZnJhbWUuCi0gICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFu
ZChjYWxsRnJhbWUsIGNhbGxlZUZvcihieXRlY29kZSwgY2hlY2twb2ludEluZGV4KSk7Ci0gICAg
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9IGNhbGxGcmFtZSAtIHN0YWNrT2Zmc2V0SW5S
ZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50SW5kZXgpOwotICAgIAotICAgIGNh
bGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludEluZGV4KSk7Ci0gICAgY2FsbGVlRnJh
bWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0g
Y2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1l
KTsKLSAgICAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
ayk7Ci0gICAgcmV0dXJuIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1
ZSwgJmNhbGxMaW5rSW5mb0ZvcihtZXRhZGF0YSwgY2hlY2twb2ludEluZGV4KSk7Ci19Ci0KLUxM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsKQotewotICAgIExMSU5UX0JFR0lOX05P
X1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwg
cGMtPmFzPE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3RhaWxfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcFRh
aWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY29uc3RydWN0KQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVO
VVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ29uc3RydWN0
PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpCi17Ci0gICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JP
cGVuPigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGwpKTsKLX0KLQot
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCkKLXsKLSAg
ICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2Fs
bEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck5leHQ+KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9y
TmV4dDo6Y29tcHV0ZU5leHQpKTsKKyAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsg
Q2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgIExMSU5UX0NBTExfUkVUVVJO
KGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNF
bnRyeVB0clRhZyk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2Zy
YW1lX2Zvcl92YXJhcmdzKQpAQCAtMjA0Myw4ICsxOTg3LDggQEAgZW51bSBjbGFzcyBTZXRBcmd1
bWVudHNXaXRoIHsKICAgICBDdXJyZW50QXJndW1lbnRzCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgU2V0QXJndW1lbnRzV2l0aCBzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgU2V0QXJn
dW1lbnRzV2l0aCBzZXQ+CitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwogCkBAIC0yMDUzLDEx
ICsxOTk3LDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAvLyAtIFJldHVybiBhIHR1
cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFt
ZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3A+KCk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIEpTVmFsdWUgY2FsbGVlQXNW
YWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2NhbGxlZSk7CiAKICAgICBD
YWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gdm0ubmV3Q2FsbEZyYW1lUmV0dXJuVmFsdWU7Ci0KLSAg
ICBpZiAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCkgeworICAgIHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdm0udmFyYXJnc0xlbmd0aCArIDE7CisgICAgaWYg
Y29uc3RleHByIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KSB7CiAgICAgICAgIHNl
dHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVl
RnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIGdldE9w
ZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2FyZ3VtZW50cyksIGJ5dGVjb2RlLm1fZmlyc3RW
YXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwogICAgICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQ
VElPTihnbG9iYWxPYmplY3QpOwogICAgIH0gZWxzZQpAQCAtMjA2NywyNyArMjAxMiwzMCBAQCBp
bmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVh
bFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBj
YWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOwor
ICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLnVwZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKworICAgIGF1dG8qIGNhbGxlclNQ
ID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAg
TExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbGVyU1ApOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BD
YWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6
Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcENhbGxWYXJhcmdzLCBTZXRBcmd1
bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzKQogewotICAgIHJl
dHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVG
b3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0
dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1l
LCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8
T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBT
ZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzKTsKKyAgICByZXR1cm4gdmFyYXJnc1Nl
dHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50
QXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFy
YXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNvbnN0
cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVw
PE9wQ29uc3RydWN0VmFyYXJncywgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUs
IHBjLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAogaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBj
b21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBj
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmV0dXJuUG9pbnQpCkBAIC0y
MTEwLDcgKzIwNTgsOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFs
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbgogICAgIAogICAgIHZtLmVu
Y29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGV2YWwoZ2xvYmFsT2Jq
ZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNvZGUubV9lY21hTW9kZSkpOwogICAgIERpc2FsbG93R0Mg
ZGlzYWxsb3dHQzsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZy
YW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgYXV0byogY2FsbGVyU1AgPSBj
YWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElO
VF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRy
eVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9l
dmFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRl
eCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4OGFhNmFhOTY0ZmI2ZTA5YjY2Li5kNDM4ZmNiMzM5ZGFm
ZTM3YTNjMTQxZGJlMjRhNmFkMjExMjliYjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMzgsNiArMzgsOCBAQCBuYW1lc3BhY2UgTExJbnQg
ewogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV9vcGVyYW5kKENh
bGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwgaW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQp
IFJFRkVSRU5DRURfRlJPTV9BU007CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGlu
dF90cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hl
cmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBSRUZFUkVOQ0VEX0ZST01fQVNNOworZXh0ZXJu
ICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxGcmFtZSosIEpTQ2Vs
bCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5
cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyos
IEpTQ2VsbCopOwogZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dyaXRlX2JhcnJpZXJfc2xvdyhDYWxs
RnJhbWUqLCBKU0NlbGwqKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTDsKIAogI2Rl
ZmluZSBMTElOVF9TTE9XX1BBVEhfREVDTChuYW1lKSBcCkBAIC0xMTksOSArMTIxLDYgQEAgTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5j
X2Z1bmMpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNf
ZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zZXRfZnVu
Y3Rpb25fbmFtZSk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGwp
OwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpOwotTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3QpOwogTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKTsKIExM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2Fy
ZF9hcmd1bWVudHMpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxs
X3ZhcmFyZ3MpOwpAQCAtMTMxLDggKzEzMCw2IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jYWxsX2V2YWxfd2lkZTE2KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfY2FsbF9ldmFsX3dpZGUzMik7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50VGh1bmtzLmNwcAppbmRleCA0NjJjYmZiZTRlMzQ1Njg0NWUwNWFhOGJjMGM0ODExNTNjYmI4
ZDBhLi4xNjAzYzJjNzg1NGM5OTliZTllNmM1NzA1MzM2Y2ZmNzQyNzI5MGIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKQEAgLTM0Niw5ICszNDYsOSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dh
dGVUaHVuayh2b2lkKiBwb2ludGVyLCBQdAogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAg
ICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMywgdGFnKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJlZ1QzKTsKLSAgICBqaXQuZmFy
SnVtcChHUFJJbmZvOjpyZWdUMywgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJ
bmZvOjpyZWdUNSwgdGFnKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIocG9pbnRlciksIEdQUkluZm86OnJlZ1Q1KTsKKyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpy
ZWdUNSwgT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkxMSW50VGh1bmspOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcs
ICJMTEludCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKQEAgLTM2NiwxMyArMzY2LDE1IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21H
YXRlVGh1bmsodm9pZCogcG9pbnRlciwKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAiTExJbnQgJXMgd2FzbSBjYWxsIGdhdGUgdGh1
bmsiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0
clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZyB0YWcpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZywg
Ym9vbCB1bnRhZykKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgaml0LnVudGFnUHRy
KEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSAgICBqaXQudmFs
aWRhdGVVbnRhZ2dlZFB0cihBUk02NFJlZ2lzdGVyczo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7Ci0gICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDAsIHRhZyk7CisgICAgaWYgKHVudGFn
KSB7CisgICAgICAgIGppdC51bnRhZ1B0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVn
aXN0ZXJzOjpscik7CisgICAgICAgIGppdC52YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0
ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICB9CisgICAgaml0LmZhckp1bXAo
R1BSSW5mbzo6YXJndW1lbnRHUFI3LCB0YWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0
clRhZywgIkxMSW50IHRhaWwgY2FsbCBnYXRlIHRodW5rIik7CkBAIC01NzMsOCArNTc1LDggQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJldHVybkxvY2F0aW9uVGh1bmso
T3Bjb2RlSUQgb3Bjb2RlSUQsIE9wY28KICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRl
cmF0b3Jfb3BlbikKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3JfbmV4dCkK
ICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0KQotICAgIExMSU5UX1JFVFVS
Tl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdykKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJ
T04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdykKKyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04o
b3BfY2FsbF92YXJhcmdzKQorICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3Rf
dmFyYXJncykKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfZ2V0X2J5X2lkKQogICAgIExM
SU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlfdmFsKQogICAgIExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9wdXRfYnlfaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5oCmluZGV4IGI4N2M0MjBjYmU0MDJhMWYwY2YwODY4MTA3YjVhZmQ2ZGJjZjU0YWMuLjA1ZWM2
MDFjMDE2NGNiOTU0YjczYTIxYzczNTFmZjAxMGZlYTcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFRodW5rcy5oCkBAIC04OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGppdENhZ2VQdHJUaHVuaygpOwogI2lmIENQ
VShBUk02NEUpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBj
cmVhdGVKU0dhdGVUaHVuayh2b2lkKiwgUHRyVGFnLCBjb25zdCBjaGFyKik7CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZv
aWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxsR2F0ZShQdHJUYWcpOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRh
ZywgYm9vbCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBs
b29wT1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+IGVudHJ5T1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IHdhc21PU1JFbnRyeUdhdGVUaHVuaygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CmluZGV4IGJiODhiNmZkYjA5OWI0OTlhZTZmZjRlODEwMTAxNTA0ZGFhNmQ0ZTMuLjMwN2I0MWYx
N2FmMzg4NmY2M2JkOGE4NjRiNTNiYWM1ZDU0ODRhN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTU1MSw2ICs1NTEs
NyBAQCBjb25zdCBTeW1ib2xUeXBlID0gY29uc3RleHByIFN5bWJvbFR5cGUKIGNvbnN0IE9iamVj
dFR5cGUgPSBjb25zdGV4cHIgT2JqZWN0VHlwZQogY29uc3QgRmluYWxPYmplY3RUeXBlID0gY29u
c3RleHByIEZpbmFsT2JqZWN0VHlwZQogY29uc3QgSlNGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIg
SlNGdW5jdGlvblR5cGUKK2NvbnN0IEludGVybmFsRnVuY3Rpb25UeXBlID0gY29uc3RleHByIElu
dGVybmFsRnVuY3Rpb25UeXBlCiBjb25zdCBBcnJheVR5cGUgPSBjb25zdGV4cHIgQXJyYXlUeXBl
CiBjb25zdCBEZXJpdmVkQXJyYXlUeXBlID0gY29uc3RleHByIERlcml2ZWRBcnJheVR5cGUKIGNv
bnN0IFByb3h5T2JqZWN0VHlwZSA9IGNvbnN0ZXhwciBQcm94eU9iamVjdFR5cGUKQEAgLTExNTEs
MjcgKzExNTIsMjcgQEAgbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmkKICAgICAgICAgY2xvb3BDYWxs
SlNGdW5jdGlvbiBjYWxsZWUKICAgICBlbHNpZiBBUk02NEUKICAgICAgICAgbWFjcm8gY2FsbE5h
cnJvdygpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNl
dE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0
clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
Y2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpv
ZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkg
KiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRh
ZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9qc190cmFtcG9saW5lXyVvcGNvZGVOYW1lJToK
LSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNh
bGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUxNigpCi0gICAg
ICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmln
R2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXpl
LCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQ
dHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0
T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2
KSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUl
X3dpZGUxNjoKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNh
bGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUz
MigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9m
SlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikg
KiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRh
ZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFt
ZSVfd2lkZTMyKSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9K
SVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9w
Y29kZU5hbWUlX3dpZGUzMjoKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAg
ICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKLSAgICAgICAgbW92ZSBj
YWxsZWUsIHQzCisgICAgICAgIG1vdmUgY2FsbGVlLCB0NQogICAgICAgICBzaXplKGNhbGxOYXJy
b3csIGNhbGxXaWRlMTYsIGNhbGxXaWRlMzIsIG1hY3JvIChnZW4pIGdlbigpIGVuZCkKICAgICBl
bHNlCiAgICAgICAgIGNhbGwgY2FsbGVlLCBjYWxsUHRyVGFnCkBAIC0xMjA5LDEyICsxMjEwLDIz
IEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAgICAgZW5kCiBlbmQKIAotbWFjcm8gcHJlcGFy
ZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQ
dHJUYWcpCi0gICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKK21hY3JvIHByZXBhcmVG
b3JSZWd1bGFyQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkKIGVuZAogCi0jIHNwIHBv
aW50cyB0byB0aGUgbmV3IGZyYW1lCi1tYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0
ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKK21hY3JvIGludm9rZUZvclJl
Z3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFt
ZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2Fs
bFB0clRhZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBj
YWxsZWUsIGNhbGxQdHJUYWcpCitlbmQKKworIyB0NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFy
ZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0
LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRy
VGFnKQorZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwoKQorZW5kCisKKyMg
c3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDU2l6ZQorIyBXZSBs
ZWF2ZSBjZnIgdGVtcDQgdG8gdXNlIGl0IGZvciB1bnRhZ2dpbmcuCittYWNybyBwcmVwYXJlRm9y
VGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCiAgICAgcmVzdG9yZUNhbGxlZVNh
dmVzVXNlZEJ5TExJbnQoKQogCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzW2Nmcl0sIHRlbXAyCkBAIC0xMjMyLDE4ICsxMjQ0LDE3IEBAIG1hY3Jv
IHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBj
YWxsUHRyVGFnKQogICAgIG1vdmUgY2ZyLCB0ZW1wMQogICAgIGFkZHAgdGVtcDIsIHRlbXAxCiAK
LSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbc3Bd
LCB0ZW1wMgorICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIENhbGxlckZyYW1lQW5kUENTaXplW3NwXSwgdGVtcDIKICAgICAjIFdlIGFzc3VtZSA8
IDJeMjggYXJndW1lbnRzCiAgICAgbXVsaSBTbG90U2l6ZSwgdGVtcDIKICAgICBhZGRpIFN0YWNr
QWxpZ25tZW50IC0gMSArIENhbGxGcmFtZUhlYWRlclNpemUsIHRlbXAyCiAgICAgYW5kaSB+U3Rh
Y2tBbGlnbm1lbnRNYXNrLCB0ZW1wMgogCiAgICAgaWYgQVJNdjcgb3IgQVJNNjQgb3IgQVJNNjRF
IG9yIENfTE9PUCBvciBDX0xPT1BfV0lOIG9yIE1JUFMgb3IgUklTQ1Y2NAotICAgICAgICBhZGRw
IENhbGxlckZyYW1lQW5kUENTaXplLCBzcAogICAgICAgICBzdWJpIENhbGxlckZyYW1lQW5kUENT
aXplLCB0ZW1wMgogICAgICAgICBsb2FkcCBDYWxsZXJGcmFtZUFuZFBDOjpyZXR1cm5QQ1tjZnJd
LCBscgogICAgIGVsc2UKLSAgICAgICAgYWRkcCBQdHJTaXplLCBzcAorICAgICAgICBzdWJwIFB0
clNpemUsIHNwCiAgICAgICAgIHN1YmkgUHRyU2l6ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgUHRy
U2l6ZVtjZnJdLCB0ZW1wMwogICAgICAgICBzdG9yZXAgdGVtcDMsIFtzcF0KQEAgLTEyNzAsOSAr
MTI4MSwxMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIs
IHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAgICBlbmQKIAogICAgIG1vdmUgdGVtcDEsIHNw
CitlbmQKKworbWFjcm8gaW52b2tlRm9yVGFpbENhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBj
YWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFnKQogICAgIGlmIEFSTTY0RQotICAgICAgICBt
b3ZlIHRlbXA0LCBhMgotICAgICAgICBtb3ZlIGNhbGxlZSwgYTAKKyAgICAgICAgbW92ZSBtYXli
ZU9sZENGUiwgYTIKKyAgICAgICAgbW92ZSBjYWxsZWUsIGE3CiAgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjp0YWlsQ2FsbCVjYWxsUHRyVGFnJSkgKiBQdHJTaXplLCBhMQogICAgICAgICBqbXAg
W2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgJWNhbGxQdHJUYWclCiAgICAgZWxzZQpAQCAt
MTI4MCw2ICsxMjk0LDIyIEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAx
LCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIGVuZAogZW5kCiAKKyMgdDUg
aXMgbWV0YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsKG9wY29kZU5h
bWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lz
dGVyLCBkaXNwYXRjaCwgY2FsbFB0clRhZykKKyAgICBpZiBBUk02NEUKKyAgICAgICAgbG9hZHAg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9t
b3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTcKKyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
OnRhaWxDYWxsV2l0aG91dFVudGFnJWNhbGxQdHJUYWclKSAqIFB0clNpemUsIGExCisgICAgICAg
IGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyAlY2FsbFB0clRhZyUKKyAgICBlbHNl
CisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8u
dS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIGExCisgICAgICAgIGpt
cCBhMSwgY2FsbFB0clRhZworICAgIGVuZAorZW5kCisKK21hY3JvIHByZXBhcmVGb3JTbG93VGFp
bENhbGwoKQorICAgIHJlc3RvcmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50KCkKK2VuZAorCiBtYWNy
byBzbG93UGF0aEZvckNvbW1vbkNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBk
aXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNv
ZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBz
bG93UGF0aCwgcHJlcGFyZUNhbGwpCiBlbmQKQEAgLTEyOTEsNyArMTMyMSw3IEBAIG1hY3JvIHNs
b3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIGRzdFZpcnR1CiAgICAgICAgIG1hY3JvIChjYWxsZWUsIGNhbGxlZUZyYW1lUHRyKQog
ICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAogICAgICAgICAg
ICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKLSAgICAgICAgICAgIHByZXBhcmVDYWxsKGNhbGxl
ZSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlTbG93UGF0aFB0clRhZykKKyAgICAgICAgICAgIHBy
ZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQogICAgICAgICAuZG9udFVwZGF0ZVNQOgogICAgICAg
ICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9zbG93LCBzaXplLCBvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNh
bGxlZSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQogICAgICAgICBlbmQpCkBAIC0xODIwLDEyICsx
ODUwLDE2IEBAIGlmIEFSTTY0RQogICAgIGdsb2JhbCBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGlu
ZQogICAgIF90YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFk
ZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGptcCBhNywg
SlNFbnRyeVB0clRhZwogCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1w
b2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lOgogICAgICAgICB1
bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5U2xvd1BhdGhQdHJU
YWcKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCisKKyAgICBnbG9iYWwgX3RhaWxDYWxs
V2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUKKyAgICBfdGFpbENhbGxXaXRob3V0VW50YWdK
U0VudHJ5VHJhbXBvbGluZToKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCiAKICAgICBn
bG9iYWwgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lCiAgICAgX2V4Y2VwdGlvbkhhbmRsZXJU
cmFtcG9saW5lOgpAQCAtMjMyNSwxNyArMjM1OSwxNyBAQCBlbmQpCiAKIAogIyB3ZSBjYW4ndCB1
c2UgY2FsbE9wIGJlY2F1c2Ugd2UgY2FuJ3QgcGFzcyBgY2FsbGAgYXMgdGhlIG9wY29kZSBuYW1l
LCBzaW5jZSBpdCdzIGFuIGluc3RydWN0aW9uIG5hbWUKLWNvbW1vbkNhbGxPcChvcF9jYWxsLCBf
bGxpbnRfc2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNy
byAoZ2V0dSwgbWV0YWRhdGEpCitjb21tb25DYWxsT3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0
aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNh
bGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3Vs
YXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJyYXlQcm9maWxlRm9yQ2FsbChP
cENhbGwsIGdldHUpCiBlbmQpCiAKIAotbWFjcm8gY2FsbE9wKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgcHJlcGFyZUNhbGwsIGZuKQotICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUs
IF9sbGludF9zbG93X3BhdGhfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxs
LCBmbikKK21hY3JvIGNhbGxPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxs
LCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCisg
ICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1lJSwgX2xsaW50X3Nsb3dfcGF0aF8lb3Bjb2Rl
TmFtZSUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5
bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBmbikKIGVuZAogCiAKLWNhbGxPcCh0YWlsX2NhbGws
IE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQor
Y2FsbE9wKHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZvclRhaWxDYWxsLCBpbnZva2VG
b3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENhbGwsIHByZXBhcmVGb3JTbG93
VGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBhcnJheVByb2ZpbGVGb3JDYWxs
KE9wVGFpbENhbGwsIGdldHUpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAg
ICAjIHJlbG9hZCBtZXRhZGF0YSBzaW5jZSBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKSBt
aWdodCBoYXZlIHRyYXNoZWQgdDUKQEAgLTIzNDMsNyArMjM3Nyw3IEBAIGNhbGxPcCh0YWlsX2Nh
bGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRh
KQogZW5kKQogCiAKLWNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVn
dWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQorY2FsbE9wKGNvbnN0cnVjdCwg
T3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGws
IHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJD
YWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCiBtYWNybyBicmFuY2hJZkV4Y2Vw
dGlvbihleGNlcHRpb25UYXJnZXQpCkBAIC0yMzU0LDQ3ICsyMzg4LDI5IEBAIG1hY3JvIGJyYW5j
aElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKIC5ub0V4Y2VwdGlvbjogICAgCiBlbmQKIAot
bWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3Bh
dGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQ
YXRoKGZyYW1lU2xvd1BhdGgpCi0gICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCi0gICAgIyBjYWxsZWVGcmFtZSBpbiByMQotICAgIGlm
IEpTVkFMVUU2NAotICAgICAgICBtb3ZlIHIxLCBzcAotICAgIGVsc2UKLSAgICAgICAgIyBUaGUg
Y2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUgZG93biBieSBDYWxsZXJGcmFt
ZUFuZFBDU2l6ZSB0byBhbGlnbgotICAgICAgICBpZiBBUk12NwotICAgICAgICAgICAgc3VicCBy
MSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCi0gICAgICAgICAgICBtb3ZlIHQyLCBzcAotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AK
LSAgICAgICAgZW5kCi0gICAgZW5kCi0gICAgc2xvd1BhdGhGb3JDb21tb25DYWxsKG9wY29kZU5h
bWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
LWVuZAotCiAKLWxsaW50T3Aob3BfY2FsbF92YXJhcmdzLCBPcENhbGxWYXJhcmdzLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywg
c2l6ZSwgT3BDYWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFt
ZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfY2FsbF92YXJhcmdzLCBPcENhbGxW
YXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAg
ICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcENhbGxWYXJhcmdz
LCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3BhdGhf
c2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5
bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKQogZW5kKQogCi1s
bGludE9wKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF92YXJh
cmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICAjIFdl
IGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQgb2YgcHJlcGFyaW5nIGl0IHNp
bmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBmb3IgYSBjYWxsIG9wY29kZQot
ICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIHNpemUsIE9wVGFpbENhbGxW
YXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdz
LCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzLCBwcmVwYXJlRm9yVGFpbENhbGwp
CisgICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJncywgc2l6ZSwgZ2V0LCBPcFRh
aWxDYWxsVmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxp
bnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfdGFp
bF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHBy
ZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsKQogZW5k
KQogCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBPcFRhaWxDYWxs
Rm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0
aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgT3BUYWlsQ2FsbEZvcndh
cmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgIyBXZSBsaWUgYW5kIHBl
cmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmluZyBpdCBzaW5jZSB3ZSBjYW4n
dAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBvcGNvZGUKLSAgICBkb0NhbGxW
YXJhcmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgc2l6ZSwgT3BUYWlsQ2FsbEZv
cndhcmRBcmd1bWVudHMsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9y
X2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBnZXQsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIF9sbGludF9zbG93X3Bh
dGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9sbGludF9zbG93X3BhdGhfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFpbENhbGwsIGludm9rZUZvclRh
aWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFyZUZvclNsb3dUYWls
Q2FsbCkKIGVuZCkKIAogCi1sbGludE9wKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBPcENvbnN0cnVj
dFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGRvQ2FsbFZhcmFyZ3Mo
b3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIE9wQ29uc3RydWN0VmFyYXJncywgZGlzcGF0Y2gs
IF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0
aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJDYWxsKQorbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25zdHJ1Y3RWYXJhcmdzLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKKyAgICBkb0NhbGxWYXJhcmdz
KG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ29uc3RydWN0VmFyYXJncywgbV9w
cm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVf
ZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MsIHBy
ZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5
bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsKQogZW5kKQogCiAK
QEAgLTI1MTAsNiArMjUyNiw5MSBAQCBvcChsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1
Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xp
bmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5jdGlvbkZvckNvbnN0cnVjdCkKIGVuZCkKIAorIyA2
NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyMg
dDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3JvIGxpbmtTbG93UGF0aEZvcihmdW5j
dGlvbikKKyAgICBmdW5jdGlvblByb2xvZ3VlKCkKKyAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6
bV92bVt0M10sIHQxCisgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MV0KKyAgICBt
b3ZlIHQyLCBhMgorICAgIG1vdmUgdDMsIGExCisgICAgbW92ZSBjZnIsIGEwCisgICAgY0NhbGw0
KGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uRXBpbG9ndWUoKQorICAgIHVudGFnUmV0dXJuQWRkcmVz
cyBzcAorICAgIGJ0cHogcjEsIC5kb05vdFRyYXNoCisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNz
QWZ0ZXJDYWxsKHQxKQorICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0MSwgdDIsIHQzLCB0NCkKKyAg
ICB1bnRhZ1JldHVybkFkZHJlc3MgdDQKKy5kb05vdFRyYXNoOgorICAgIGptcCB0MCwgSlNFbnRy
eVB0clRhZworZW5kCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBp
cyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CittYWNybyB2
aXJ0dWFsVGh1bmtGb3Iob2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2ssIGludGVybmFsRnVu
Y3Rpb25UcmFtcG9saW5lLCBwcmVwYXJlQ2FsbCwgc2xvd0Nhc2UpCisgICAgYWRkaSAxLCBDYWxs
TGlua0luZm86Om1fc2xvd1BhdGhDb3VudFt0Ml0KKyAgICBpZiBKU1ZBTFVFNjQKKyAgICAgICAg
bW92ZSBOb3RDZWxsTWFzaywgdDEKKyAgICAgICAgYnRxbnogdDAsIHQxLCBzbG93Q2FzZQorICAg
IGVsc2UKKyAgICAgICAgYmluZXEgdDEsIENlbGxUYWcsIHNsb3dDYXNlCisgICAgZW5kCisgICAg
YmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBKU0Z1bmN0aW9uVHlwZSwgLm5vdEpTRnVuY3Rpb24K
KyAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVPclJhcmVEYXRhW3QwXSwgdDEKKyAg
ICBidHB6IHQxLCAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgLmlzRXhlY3V0
YWJsZQorICAgIGxvYWRwIChGdW5jdGlvblJhcmVEYXRhOjptX2V4ZWN1dGFibGUgLSAoY29uc3Rl
eHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSlbdDFdLCB0MQorLmlzRXhlY3V0YWJsZToKKyAg
ICBsb2FkcCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja1t0MV0sIHQxCisgICAgYnRweiB0
MSwgc2xvd0Nhc2UKKy5jYWxsQ29kZToKKyAgICBwcmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkK
KyAgICBqbXAgdDEsIEpTRW50cnlQdHJUYWcKKy5ub3RKU0Z1bmN0aW9uOgorICAgIGJibmVxIEpT
Q2VsbDo6bV90eXBlW3QwXSwgSW50ZXJuYWxGdW5jdGlvblR5cGUsIHNsb3dDYXNlCisgICAgcHJl
cGFyZUNhbGwodDUsIHQyLCB0MywgdDQpCisgICAgam1wIGludGVybmFsRnVuY3Rpb25UcmFtcG9s
aW5lCitlbmQKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENh
bGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X2xp
bmtfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRf
bGlua19jYWxsKQorZW5kKQorCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyMg
dDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3Ao
bGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5r
Rm9yKEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGlu
dF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIs
IHRlbXAzLCB0ZW1wNCkgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQ
YXRoRm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAs
dDEpIGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpT
R2xvYmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNy
byAoKQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ29u
c3RydWN0V2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3Rf
dHJhbXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KSBlbmQsIC5zbG93
Q2FzZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2Fs
bCkKK2VuZCkKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENh
bGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3Zp
cnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9y
KEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGludF9p
bnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRl
bXAzLCB0ZW1wNCkKKyAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHRlbXAx
KQorICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQp
CisgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0ZW1wNAorICAgIGVuZCwgLnNsb3dDYXNlKQor
LnNsb3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5k
KQogCiBpZiBKSVQKICAgICBtYWNybyBsb2FkQmFzZWxpbmVKSVRDb25zdGFudFBvb2woKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3Bw
CmluZGV4IGMwNGZmZDZiMGJjM2YyNmUxOTJmMDZmMmJiZjc0YjA2NGRjYjI3OWEuLjk4NzZlZjZl
Zjc0MmFjZWVkYWUyNjlhMmFiNDU0YzViNjJjZDUxNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKQEAgLTEyOSw2ICsxMjks
OCBAQCB1c2luZyBXZWJDb25maWc6OmdfY29uZmlnOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgQ2FsbExpbmtJbmZvOworCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIENMb29wUmVnaXN0
ZXIgaXMgdGhlIHN0b3JhZ2UgZm9yIGFuIGVtdWxhdGVkIENQVSByZWdpc3Rlci4KIC8vIEl0IGRl
ZmluZXMgdGhlIHBvbGljeSBvZiBob3cgaW50cyBzbWFsbGVyIHRoYW4gaW50cHRyX3QgYXJlIHBh
Y2tlZCBpbnRvIHRoZQpAQCAtMTY2LDYgKzE2OCw3IEBAIGNsYXNzIENMb29wUmVnaXN0ZXIgewog
ICAgIG9wZXJhdG9yIFByb3RvQ2FsbEZyYW1lKigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxQcm90
b0NhbGxGcmFtZSo+KG1fdmFsdWUpOyB9CiAgICAgb3BlcmF0b3IgUmVnaXN0ZXIqKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFJlZ2lzdGVyKj4obV92YWx1ZSk7IH0KICAgICBvcGVyYXRvciBWTSoo
KSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Vk0qPihtX3ZhbHVlKTsgfQorICAgIG9wZXJhdG9yIENh
bGxMaW5rSW5mbyooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2FsbExpbmtJbmZvKj4obV92YWx1
ZSk7IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVf
aWZfdDxzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnRwdHJfdCk+PgogICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBvcGVyYXRvcj0oVCB2YWx1ZSkgeyBtX3ZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odmFsdWUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDkwM2U1YTQ1YjFiNjY4MmZkMjg3OGI5
Nzk0ODUyYWVmZDY3NTFkNWUuLmQ4YjYzMDhhM2U2ZmQ0NWYyYzM1ZDBiMjdhNDQ5NGI5OGRhNjAz
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMTgsNyArMTE4LDkgQEAgbWFjcm8gY0NhbGwyVm9p
ZChmdW5jdGlvbikKIGVuZAogCiBtYWNybyBjQ2FsbDQoZnVuY3Rpb24pCi0gICAgaWYgQVJNdjcg
b3IgTUlQUworICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCisgICAgICAgIGNsb29wQ2FsbFNs
b3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMKKyAgICBlbHNpZiBBUk12NyBvciBNSVBT
CiAgICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYgb3IgWDg2X1dJTgogICAgICAg
ICBwdXNoIGEzCkBAIC0yMTUxLDM1ICsyMTUzLDYwIEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNh
bGwob3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGJpbmVxIFRoaXNBcmd1bWVudE9mZnNldCArIFRh
Z09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICBsb2FkaSBUaGlzQXJndW1l
bnRPZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGxvYWRpIEpTQ2Vs
bDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1
cmVJRFt0NV0KKyAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJh
eVByb2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBlbmQKIAotbWFjcm8g
Y2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwg
bWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGdldENhbGxlZSh0MCkKKyMg
dDUgaG9sZHMgbWV0YWRhdGEuCittYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRo
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJl
cGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxs
LCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwg
Z2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgZ2V0Q2FsbGVlKHQzKQogCi0gICAg
bG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9y
TGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0sIHQyCi0gICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQzLCAub3BDYWxsU2xvdykKLSAgICBiaW5l
cSB0MywgdDIsIC5vcENhbGxTbG93CisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0
MywgdDEsIHQwKQorCisgICAgIyBBbGlnbmVkIHRvIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUKICAg
ICBnZXRBcmd1bWVudFN0YXJ0KHQzKQogICAgIGxzaGlmdGkgMywgdDMKICAgICBuZWdpIHQzCiAg
ICAgYWRkcCBjZnIsIHQzICAjIHQzIGNvbnRhaW5zIHRoZSBuZXcgdmFsdWUgb2YgY2ZyCi0gICAg
c3RvcmVpIHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgIGdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKHQyKSAgICAKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyh0MikKICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5
bG9hZE9mZnNldFt0M10KLSAgICBzdG9yZWkgQ2VsbFRhZywgQ2FsbGVlICsgVGFnT2Zmc2V0W3Qz
XQorCisgICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3Vy
ZSBzcC4KKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zm
c2V0W2Nmcl0KKyAgICBzdG9yZWkgdDAsIENhbGxlZSArIFBheWxvYWRPZmZzZXRbdDNdCisgICAg
c3RvcmVpIHQxLCBDYWxsZWUgKyBUYWdPZmZzZXRbdDNdCiAgICAgbW92ZSB0Mywgc3AKLSAgICBw
cmVwYXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFj
aGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICBj
YWxsVGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVBy
b2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5
UHRyVGFnKQorICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCisKKyAgICBiaW5lcSB0
MSwgQ2VsbFRhZywgLm9wQ2FsbFNsb3cKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MworICAgIGJ0cHog
dDMsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90
UG9seW1vcnBoaWMKKyAgICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJl
dHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUg
c2VwYXJhdGVseS4KKyAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHlt
b3JwaGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBo
aWMgdGh1bmsgc2lkZS4KKyAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwg
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3Bh
dGNoLCBKU0VudHJ5UHRyVGFnKQorICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisubm90UG9seW1v
cnBoaWM6CisgICAgYnBuZXEgdDAsIHQzLCAub3BDYWxsU2xvdworICAgIHByZXBhcmVDYWxsKHQy
LCB0MywgdDQsIHQxKQorCisuZ29Qb2x5bW9ycGhpYzoKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVz
dGluYXRpb25bdDVdLCB0NQorICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0
NSwgdDEsIEpTRW50cnlQdHJUYWcpCiAKIC5vcENhbGxTbG93OgotICAgIHNsb3dQYXRoRm9yQ2Fs
bChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZp
cnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAgICAjIDY0
Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoK
KyAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgYWRkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGlu
IHQyCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5t
X3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICBw
cmVwYXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xv
dywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0
ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKIGVuZAogICAgICAgICAKLW1hY3JvIGNv
bW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2Fs
bCwgcHJvbG9ndWUpCittYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9w
Y29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywg
cHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIApAQCAtMjE4OCw3ICsyMjE1LDcg
QEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3Qs
IHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5kLCBtZXRhZGF0YSkKIAogICAgICAg
ICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICBnZXQobV9jYWxsZWUsIHQwKQorICAg
ICAgICAgICBnZXQobV9jYWxsZWUsIGRzdCkKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8g
Z2V0QXJndW1lbnRTdGFydChkc3QpCkBAIC0yMTk5LDEwICsyMjI2LDY4IEBAIG1hY3JvIGNvbW1v
bkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwg
cHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBk
c3QpCiAgICAgICAgIGVuZAogICAgICAgICAKLSAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1l
LCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwg
c2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdl
dEFyZ3VtZW50Q291bnQpCisgICAgICAgICMgdDUgaG9sZHMgbWV0YWRhdGEKKyAgICAgICAgY2Fs
bEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1f
ZHN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJl
U2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVu
dFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVuZCkKIGVuZAogCittYWNybyBkb0NhbGxW
YXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZnJhbWVTbG93UGF0
aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMs
IHByZXBhcmVTbG93Q2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBi
cmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkK
KyAgICAjIGNhbGxlZUZyYW1lIGluIHIxCisgICAgaWYgSlNWQUxVRTY0CisgICAgICAgIG1vdmUg
cjEsIHNwCisgICAgZWxzZQorICAgICAgICAjIFRoZSBjYWxsZWVGcmFtZSBpcyBub3Qgc3RhY2sg
YWxpZ25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZyYW1lQW5kUENTaXplIHRvIGFsaWduCisgICAg
ICAgIGlmIEFSTXY3CisgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwg
dDIKKyAgICAgICAgICAgIG1vdmUgdDIsIHNwCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1
YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorICAgICAgICBlbmQKKyAgICBlbmQKKyAg
ICBjYWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBzbG93UGF0aCwKKyAgICAgICAgIyBUaG9zZSBh
cmUgcjAgYW5kIHIxCisgICAgICAgIG1hY3JvIChyZXN0b3JlZFBDT3JUaHJvdywgY2FsbGVlRnJh
bWVQdHIpCisgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQCisg
ICAgICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAgICAgICAgICAgIG1vdmUgY2Fs
bGVlRnJhbWVQdHIsIHNwCisgICAgICAgICAgICBnZXQobV9jYWxsZWUsIHQyKQorICAgICAgICAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDEsIHQwKQorICAgICAgICAgICAg
bWV0YWRhdGEodDUsIHQyKQorCisgICAgICAgICAgICBiaW5lcSB0MSwgQ2VsbFRhZywgLm9wQ2Fs
bFNsb3cKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxs
TGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQzCisgICAgICAgICAgICBidHB6IHQz
LCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBv
bHltb3JwaGljCisgICAgICAgICAgICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVu
dGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1w
b2xpbmUgc2VwYXJhdGVseS4KKyAgICAgICAgICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcg
dGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGlu
IHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgorICAgICAgICAgICAgcHJlcGFyZVBvbHltb3Jw
aGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0
VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgICAgIGpt
cCAuZ29Qb2x5bW9ycGhpYworCisgICAgICAgIC5ub3RQb2x5bW9ycGhpYzoKKyAgICAgICAgICAg
IGJwbmVxIHQwLCB0MywgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0
MywgdDQsIHQxKQorCisgICAgICAgIC5nb1BvbHltb3JwaGljOgorICAgICAgICAgICAgbG9hZHAg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9t
b3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGludm9rZUNhbGwob3Bj
b2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFs
UmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCisKKyAgICAgICAgLm9w
Q2FsbFNsb3c6CisgICAgICAgICAgICAjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUK
KyAgICAgICAgICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgorICAgICAgICAgICAgIyB0MyBpcyBj
YWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgICAgICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisg
ICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZv
Lm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAgICAgbG9hZHAgQ29k
ZUJsb2NrW2Nmcl0sIHQzCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2Jq
ZWN0W3QzXSwgdDMKKyAgICAgICAgICAgIHByZXBhcmVTbG93Q2FsbCgpCisgICAgICAgICAgICBj
YWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwg
dmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50
cnlQdHJUYWcpCisgICAgICAgIC5kb250VXBkYXRlU1A6CisgICAgICAgICAgICBqbXAgX2xsaW50
X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKKyAgICAgICAgZW5kKQorZW5kCisKIGxs
aW50T3Aob3BfcmV0LCBPcFJldCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hl
Y2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICBnZXQobV92YWx1ZSwgdDIpCkBAIC0yODY2
LDcgKzI5NTEsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRl
cmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRz
dAogICAgIGVuZAogCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xv
d19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9m
aWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlk
Q2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlz
U3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0
MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRl
cmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRl
cmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBh
cmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBz
aXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3Vt
ZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAog
LmdldEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9yZU5leHRBbmREaXNwYXRjaCh2YWx1ZVRhZywg
dmFsdWVQYXlsb2FkKQpAQCAtMjkyNyw3ICszMDEzLDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBh
cmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRv
cl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5l
eHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
c2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1
bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisg
ICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xs
aW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRS
ZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJl
Z3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNs
b3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0
Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRp
bmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CiAgICAgbWFjcm8gc3RvcmVEb25lQW5kSm1w
VG9HZXRWYWx1ZShkb25lVmFsdWVUYWcsIGRvbmVWYWx1ZVBheWxvYWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4
IGE5MTMxNGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJlMmY1OWMwYTgzNzAuLjM5MjVjN2MzNmM0ZTM4
MDAyODM3MmZiZjZiZGY1ZTcxNGM5NjViNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0xNDMsNyArMTQzLDkg
QEAgZW5kCiAjIFRoaXMgYmFyZWx5IHdvcmtzLiBhcmczIGFuZCBhcmc0IHNob3VsZCBwcm9iYWJs
eSBiZSBpbW1lZGlhdGVzLgogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KHQ0LCAweGJhZDBjMDA0KQotICAgIGlmIFg4Nl82NCBvciBBUk02NCBv
ciBBUk02NEUgb3IgUklTQ1Y2NAorICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCisgICAgICAg
IGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMKKyAgICBlbHNpZiBY
ODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKICAgICAgICAgY2FsbCBmdW5jdGlv
bgogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBPbiBXaW42NCwgcmN4LCByZHgsIHI4
LCBhbmQgcjkgYXJlIHVzZWQgZm9yIHBhc3NpbmcgdGhlIGZpcnN0IGZvdXIgcGFyYW1ldGVycy4K
QEAgLTMwOSwxMiArMzExLDEyIEBAIG1hY3JvIG1ha2VKYXZhU2NyaXB0Q2FsbChlbnRyeSwgcHJv
dG9DYWxsRnJhbWUsIHRlbXAxLCB0ZW1wMikKICAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgog
ICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAgZWxzaWYgQVJNNjRFCi0gICAg
ICAgIG1vdmUgZW50cnksIHQzCi0gICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9K
YXZhU2NyaXB0KSAqIFB0clNpemUsIGEyCi0gICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisgICAgICAgIG1vdmUgZW50cnksIHQ1CisgICAgICAg
IGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFw
ICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGE3Cisg
ICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCiAg
ICAgICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUKICAgICAgICAgX3Zt
RW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lOgotICAgICAgICBjYWxsIHQzLCBKU0VudHJ5UHRy
VGFnCisgICAgICAgIGNhbGwgdDUsIEpTRW50cnlQdHJUYWcKICAgICBlbHNlCiAgICAgICAgIGNh
bGwgZW50cnksIEpTRW50cnlQdHJUYWcKICAgICBlbmQKQEAgLTIzNjAsNDEgKzIzNjIsNTggQEAg
bWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUpCiAgICAgbG9hZHEg
VGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGJ0cW56IHQwLCBub3RDZWxs
TWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MwotICAg
IHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2Fy
cmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3RvcmVpIHQzLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJ
RFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3JvIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1Bh
dGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBw
cmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3Vt
ZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotICAgIG1ldGFkYXRhKHQ1
LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisjIHQ1IGhvbGRzIG1ldGFkYXRhLgorbWFjcm8gY2Fs
bEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJl
UG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBn
ZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KQorICAgIGdldENhbGxlZSh0MSkKIAotICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXRbdDVd
LCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQotICAgIGJxbmVx
IHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQx
LCB0MCkKIAorICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lCiAgICAgZ2V0
QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAgICAgbmVncCB0MwogICAgIGFk
ZHAgY2ZyLCB0MwotICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgIGdldEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKHQyKQotICAgIHN0b3JlUEMoKQogICAgIHN0b3JlaSB0MiwgQXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3QzXQorCisgICAgIyBTdG9yZSBs
b2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3VyZSBzcC4KKyAgICBzdG9yZVBD
KCkKKyAgICBzdG9yZXEgdDAsIENhbGxlZVt0M10KICAgICBtb3ZlIHQzLCBzcAotICAgIGlmIEFS
TTY0RQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAgICBwcmVwYXJlQ2FsbCh0MCwg
dDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQw
Ci0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQwLCBK
U0VudHJ5UHRyVGFnKQotICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIs
IHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQdHJUYWcpCi0gICAgZW5kCi0u
b3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBz
bG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXpl
LCBzcAorCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5m
by5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDEKKyAgICBidHB6IHQxLCAoY29uc3RleHByIENh
bGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAg
IyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1cm4gYWRkcmVzcy4gU28g
d2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNlcGFyYXRlbHkuCisgICAg
IyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhpYyBjYWxsIGNhc2Ug
c2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRodW5rIHNpZGUuCisg
ICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFs
dWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgSlNFbnRyeVB0clRh
ZykKKyAgICBqbXAgLmdvUG9seW1vcnBoaWMKIAotbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5h
bWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKKy5ub3RQ
b2x5bW9ycGhpYzoKKyAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93CisgICAgcHJlcGFyZUNh
bGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgorICAgIGxvYWRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0Nh
bGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBv
cGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0
Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworLm9wQ2FsbFNsb3c6CisgICAgIyA2NGJpdDp0
MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgIyB0MiBpcyBDYWxsTGlua0luZm8qCisgICAg
IyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBpbiB0Mgor
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9zbG93
UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQz
CisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisgICAgcHJlcGFy
ZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNp
emUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBk
aXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCitlbmQKKworbWFjcm8gY29tbW9uQ2FsbE9wKG9w
Y29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxs
LCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgcHJvbG9ndWUpCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDAp
CiAKQEAgLTI0MDMsNyArMjQyMiw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBz
bG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGVu
ZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkKLSAgICAgICAgICAg
IGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAgICBnZXQobV9jYWxsZWUsIGRzdCkKICAgICAg
ICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3QpCkBAIC0yNDE0LDEw
ICsyNDMzLDY3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bj
b2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUs
IG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGNhbGxI
ZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2Rz
dCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRB
cmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFk
YXRhCisgICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVj
dCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5
bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENh
bGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQK
IAorbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBnZXQsIG9wY29kZVN0cnVj
dCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgbWV0YWRh
dGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJl
cGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1l
U2xvd1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19w
YXRoX3RyYW1wb2xpbmUpCisgICAgIyBjYWxsZWVGcmFtZSBpbiByMQorICAgIGlmIEpTVkFMVUU2
NAorICAgICAgICBtb3ZlIHIxLCBzcAorICAgIGVsc2UKKyAgICAgICAgIyBUaGUgY2FsbGVlRnJh
bWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUgZG93biBieSBDYWxsZXJGcmFtZUFuZFBDU2l6
ZSB0byBhbGlnbgorICAgICAgICBpZiBBUk12NworICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVy
RnJhbWVBbmRQQ1NpemUsIHQyCisgICAgICAgICAgICBtb3ZlIHQyLCBzcAorICAgICAgICBlbHNl
CisgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKKyAgICAgICAg
ZW5kCisgICAgZW5kCisgICAgY2FsbENhbGxTbG93UGF0aCgKKyAgICAgICAgc2xvd1BhdGgsCisg
ICAgICAgICMgVGhvc2UgYXJlIHIwIGFuZCByMQorICAgICAgICBtYWNybyAocmVzdG9yZWRQQ09y
VGhyb3csIGNhbGxlZUZyYW1lUHRyKQorICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwg
LmRvbnRVcGRhdGVTUAorICAgICAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAg
ICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAorICAgICAgICAgICAgZ2V0KG1fY2FsbGVl
LCB0MSkKKyAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQor
ICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVd
LCB0MQorICAgICAgICAgICAgYnRweiB0MSwgKGNvbnN0ZXhwciBDYWxsTGlua0luZm86OnBvbHlt
b3JwaGljQ2FsbGVlTWFzayksIC5ub3RQb2x5bW9ycGhpYworICAgICAgICAgICAgIyBwcmVwYXJl
Q2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0
byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNlcGFyYXRlbHkuCisgICAgICAgICAgICAj
IEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNhbGwgY2FzZSBz
aW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsgc2lkZS4KKyAg
ICAgICAgICAgIHByZXBhcmVQb2x5bW9ycGhpYyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIEpTRW50
cnlQdHJUYWcpCisgICAgICAgICAgICBqbXAgLmdvUG9seW1vcnBoaWMKKworICAgICAgICAubm90
UG9seW1vcnBoaWM6CisgICAgICAgICAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93CisgICAg
ICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKKworICAgICAgICAuZ29Qb2x5bW9y
cGhpYzoKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxs
TGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1Cisg
ICAgICAgICAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFs
dWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIHQxLCBKU0Vu
dHJ5UHRyVGFnKQorCisgICAgICAgIC5vcENhbGxTbG93OgorICAgICAgICAgICAgIyA2NGJpdDp0
MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgICAgICAgICAjIHQyIGlzIENhbGxMaW5rSW5m
byoKKyAgICAgICAgICAgICMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKKyAgICAgICAg
ICAgIGFkZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQy
ICMgQ2FsbExpbmtJbmZvKiBpbiB0MgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwg
dDUKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MworICAgICAgICAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisgICAgICAgICAgICBwcmVwYXJl
U2xvd0NhbGwoKQorICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9z
bG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIHQ1LCBKU0VudHJ5UHRyVGFnKQorICAgICAgICAuZG9udFVwZGF0ZVNQ
OgorICAgICAgICAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5l
CisgICAgICAgIGVuZCkKK2VuZAorCiBsbGludE9wKG9wX3JldCwgT3BSZXQsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAg
Z2V0KG1fdmFsdWUsIHQyKQpAQCAtMzA0Niw4ICszMTIyLDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9pdGVyYXRvcl9vcGVuLCBPcEl0ZXJhdG9yT3BlbiwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gKICAgICAgICAgbW92ZSAxLCBkc3QKICAgICBlbmQKIAotCi0gICAgY2FsbEhlbHBlcihv
cF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJ
dGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVn
dWxhckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxl
ZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhp
c0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9y
X29wZW4sIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3Bl
biwgbV9pdGVyYXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
aW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBw
cmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1l
dGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1
bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9y
ZU5leHRBbmREaXNwYXRjaCh2YWx1ZSkKQEAgLTMxMDQsNyArMzE4MCw4IEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3BJdGVyYXRvck5leHQsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoCiAgICAgZW5kCiAKICAgICAjIFVzZSBtX3ZhbHVlIHNsb3QgYXMgYSB0bXAg
c2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHRvIGl0IGxhdGVyLgotICAgIGNhbGxIZWxwZXIo
b3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9w
SXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVn
dWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxl
ZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhp
c0NvdW50KQorICAgIG1ldGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9y
X25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9yTmV4
dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBp
bnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHBy
ZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdvdG9HZXREb25lQ2hlY2twb2ludCwgbWV0
YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3Vt
ZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0RG9uZVN0YXJ0OgogICAgIG1hY3JvIHN0b3Jl
RG9uZUFuZEptcFRvR2V0VmFsdWUoZG9uZVZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS9jbG9vcC5yYgppbmRleCBjYWQyMTVhZTM0M2NjODZiM2ExMGE1ZmFmNjYyODQyNGE5
YzAyZjI4Li5jNzAxNjY0YWIyYmZmZjIwN2QxMmU1ZTIyMmY5NjRjZmE5MTJhMmZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgpAQCAtNTcyLDYgKzU3MiwxNCBA
QCBkZWYgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9pZChvcGVyYW5kcykKICAgICAkYXNtLnB1dGMg
IiN7b3BlcmFuZHNbMF0uY0xhYmVsfSgje29wZXJhbmRzWzFdLmNsRHVtcH0sICN7b3BlcmFuZHNb
Ml0uY2xEdW1wfSk7IgogZW5kCiAKK2RlZiBjbG9vcEVtaXRDYWxsU2xvd1BhdGg0KG9wZXJhbmRz
KQorICAgICRhc20ucHV0YyAieyIKKyAgICAkYXNtLnB1dGMgIiAgICBjbG9vcFN0YWNrLnNldEN1
cnJlbnRTdGFja1BvaW50ZXIoc3AudnAoKSk7IgorICAgICRhc20ucHV0YyAiICAgIFNsb3dQYXRo
UmV0dXJuVHlwZSByZXN1bHQgPSAje29wZXJhbmRzWzBdLmNMYWJlbH0oI3tvcGVyYW5kc1sxXS5j
bER1bXB9LCAje29wZXJhbmRzWzJdLmNsRHVtcH0sICN7b3BlcmFuZHNbM10uY2xEdW1wfSwgI3tv
cGVyYW5kc1s0XS5jbER1bXB9KTsiCisgICAgJGFzbS5wdXRjICIgICAgZGVjb2RlUmVzdWx0KHJl
c3VsdCwgdDAsIHQxKTsiCisgICAgJGFzbS5wdXRjICJ9IgorZW5kCisKIGNsYXNzIEluc3RydWN0
aW9uCiAgICAgZGVmIGxvd2VyQ19MT09QCiAgICAgICAgIGNhc2Ugb3Bjb2RlCkBAIC0xMTc1LDYg
KzExODMsOSBAQCBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAgd2hlbiAiY2xvb3BDYWxsU2xvd1Bh
dGhWb2lkIgogICAgICAgICAgICAgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoVm9pZChvcGVyYW5kcykK
IAorICAgICAgICB3aGVuICJjbG9vcENhbGxTbG93UGF0aDQiCisgICAgICAgICAgICBjbG9vcEVt
aXRDYWxsU2xvd1BhdGg0KG9wZXJhbmRzKQorCiAgICAgICAgICMgRm9yIGRlYnVnZ2luZyBvbmx5
LiBUaGlzIGlzIHVzZWQgdG8gaW5zZXJ0IGluc3RydW1lbnRhdGlvbiBpbnRvIHRoZQogICAgICAg
ICAjIGdlbmVyYXRlZCBMTEludEFzc2VtYmx5LmggZHVyaW5nIGxsaW50IGRldmVsb3BtZW50IG9u
bHkuIERvIG5vdCB1c2UKICAgICAgICAgIyBmb3IgcHJvZHVjdGlvbiBjb2RlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCmluZGV4IDljYmE1
ZDY4ZjNjYWQzMWNmYTJkOTZlYTRjOWJiYThkZmU5ZGE5YjIuLmMwMGI1MTZiMzNlYzVhZDEyOWQ1
NmMzZmZkMjNlOWY1ZWMyMDVmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS9pbnN0cnVjdGlvbnMucmIKQEAgLTQ1OSw2ICs0NTksNyBAQAogICAgICAiY2xvb3BD
YWxsTmF0aXZlIiwgICAgICAgICAjIG9wZXJhbmRzOiBjYWxsZWUKICAgICAgImNsb29wQ2FsbFNs
b3dQYXRoIiwgICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgY3VycmVudEZyYW1lLCBjdXJy
ZW50UEMKICAgICAgImNsb29wQ2FsbFNsb3dQYXRoVm9pZCIsICAgIyBvcGVyYW5kczogY2FsbFRh
cmdldCwgY3VycmVudEZyYW1lLCBjdXJyZW50UEMKKyAgICAgImNsb29wQ2FsbFNsb3dQYXRoNCIs
ICAgICAgIyBvcGVyYW5kczogY2FsbFRhcmdldCwgYTAsIGExLCBhMiwgYTMKIAogICAgICAjIEZv
ciBkZWJ1Z2dpbmcgb25seToKICAgICAgIyBUYWtlcyBubyBvcGVyYW5kcyBidXQgc2ltcGx5IGVt
aXRzIHdoYXRldmVyIGZvbGxvd3MgaW4gLy8gY29tbWVudHMgYXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCmluZGV4IDk1ODEwNWQzMjY2ZGRmZjg1
YmU1ZDc2ZDg3Y2RlNWNiMzMxMzE0YzMuLjQ4ZmQ5MmY4YjZhOGVkMjk0NGE3MjQ4YjE1N2QyYWY3
Mjc3M2M1YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGVCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZUJhc2UuaApAQCAtNTcsNiArNTcsNyBAQCBpbmxpbmUgYm9vbCBpc0NhbGwoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQogCiBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKICAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4
IDVhYTU0MmExMmYyNzFkYmRmZjAyMGI5MTBlZGJjYzlhMTFjODM2NTYuLjJlOWI1MDY2MDVjZmM2
ZjFjNWVkZDIyZGFkOTczZTczZWFhOGY2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaCIKKyNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0YWJsZS5oIgogI2luY2x1
ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlIDx3dGYvQm94Lmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HYXRlLmgKaW5kZXggZjZhMDViMDY1ZTMyZDhhZWNkNTY3YmY2YWI3NGFhZTYzODk5
Nzc3OC4uZTQ3NzkyYjg3NjRlOTFkNTA2MTBlNGNkZGFlMzIzMWMxNDU5ZTIwNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaApAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB2KGppdENhZ2VQdHIsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50cnlQ
dHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdih0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFB0clRhZywg
Tm9QdHJUYWcpIFwKKyAgICB2KHRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVB0clRhZywgTm9Q
dHJUYWcpIFwKICAgICB2KGxvb3BPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KGVudHJ5T1NS
RW50cnksIE5vUHRyVGFnKSBcCiAgICAgdih3YXNtT1NSRW50cnksIE5vUHRyVGFnKSBcCkBAIC00
NiwyMCArNDcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgSlNDX0pTX0dBVEVfT1BD
T0RFUyh2KSBcCiAgICAgdihvcF9jYWxsLCBKU0VudHJ5UHRyVGFnKSBcCi0gICAgdihvcF90YWls
X2NhbGwsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NvbnN0cnVjdCwgSlNFbnRyeVB0clRh
ZykgXAogICAgIHYob3BfaXRlcmF0b3JfbmV4dCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3Bf
aXRlcmF0b3Jfb3BlbiwgSlNFbnRyeVB0clRhZykgXAotICAgIHYob3BfY2FsbF9zbG93LCBKU0Vu
dHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF9zbG93LCBKU0VudHJ5U2xv
d1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NvbnN0cnVjdF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQ
dHJUYWcpIFwKLSAgICB2KG9wX2NhbGxfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJU
YWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0
clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3csIEpTRW50
cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdywgSlNF
bnRyeVNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihvcF9jYWxsX3ZhcmFyZ3MsIEpTRW50cnlQdHJU
YWcpIFwKKyAgICB2KG9wX2NvbnN0cnVjdF92YXJhcmdzLCBKU0VudHJ5UHRyVGFnKSBcCisgICAg
dihvcF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX3RhaWxfY2FsbF9zbG93
LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3Rfc2xvdywgSlNFbnRyeVB0clRh
ZykgXAorICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAg
dihvcF9pdGVyYXRvcl9vcGVuX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxf
dmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfdmFyYXJn
c19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHNfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Nf
c2xvdywgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3BfY2FsbF9ldmFsX3Nsb3csIEpTRW50cnlT
bG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3JfbmV4dF9zbG93LCBKU0VudHJ5U2xv
d1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRyeVNsb3dQ
YXRoUHRyVGFnKSBcCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5Y2Y1ZmVhMDE5ODQ5ZGI2ZTY2MDkxMGJiOTQ1MWNkMjdj
MjVmYmM1Li5lYzQ4MjJmNWE5MDNkNGZiODVjYjQ4NDFhNGNkNjhmMGMxMGJmYmYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0xMzgsNiArMTM4LDcgQEAKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRl
ICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJMTEludEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJN
aW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxv
Y2suaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIgpAQCAtOTEwLDYgKzkx
MSw0MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUlu
dGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZAogICAgIHJldHVybiBMTEludDo6Z2V0Q29k
ZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJh
bXBvbGluZSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBWTTo6
Z2V0Q1RJTGlua0NhbGwoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlmCisgICAgcmV0dXJu
IExMSW50OjpnZXRDb2RlUmVmPEpTRW50cnlQdHJUYWc+KGxsaW50X2xpbmtfY2FsbF90cmFtcG9s
aW5lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRD
VElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKQoreworI2lmIEVOQUJMRShKSVQpCisg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gZ2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpT
RW50cnlQdHJUYWc+KCk7CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6OmNhbGxUb1Rocm93KCp0
aGlzKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworfQorCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IFZNOjpnZXRDVElWaXJ0dWFsQ2FsbChD
YWxsTW9kZSBjYWxsTW9kZSkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvcigqdGhpcywgY2FsbE1vZGUp
OworI2VuZGlmCisgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAgIGNhc2UgQ2FsbE1vZGU6OlJl
Z3VsYXI6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworICAgIGNhc2UgQ2FsbE1vZGU6
OlRhaWw6CisgICAgICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4obGxpbnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZSk7CisgICAgY2FzZSBDYWxs
TW9kZTo6Q29uc3RydWN0OgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY29uc3RydWN0X3RyYW1wb2xpbmUpOworICAg
IH0KKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxs
aW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsKK30KKwogVk06OkNsaWVudERhdGE6On5DbGll
bnREYXRhKCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDllZjM4MmM2
MGVlODM0ZmNiYjFkOTA4MWM3ODE4ZmQ3ODY3ZmE0MDguLjNhYmY3MTFhNjU1MmJlNGIzMWFmZTQ3
ZTA1OWYzMzFlMDg5OTE5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTA2
LDYgKzEwNiw4IEBAIGNsYXNzIEJhc2ljQmxvY2tMb2NhdGlvbjsKIGNsYXNzIEJ1aWx0aW5FeGVj
dXRhYmxlczsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDYWxsRnJh
bWU7CitjbGFzcyBDYWxsTGlua0luZm87CitlbnVtIGNsYXNzIENhbGxNb2RlOwogc3RydWN0IENo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNh
Y2hlOwpAQCAtOTAyLDYgKzkwNCw5IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgTmF0aXZl
RXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5D
b25zdHJ1Y3QpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2Fs
bCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElUaHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IGdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlKTsKIAogICAg
IHN0YXRpYyBwdHJkaWZmX3QgZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI0M2ZkNzU5ZWIzNzU5
MDU0N2EzOGRlOGVjMjIxNmM4MDJiMDJhYjYuLjFhOTQ0ODJmZjJjNjk1Zjg1NzA5NzYxZjNiNjMy
YzdiMjBmMDNhOWIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMTEtMTIgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExM
SW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3
NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0
cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanM6Cisg
ICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzOgor
ICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIudm0uaXNXYXNtU3VwcG9y
dGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qczoKKyAgICAg
ICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyLnZtLmlzV2FzbVN1cHBvcnRlZCk6
CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanM6
CisgICAgICAgIChkb2VzVHJlZUhhdmVTdGFja1RyYWNlKToKKyAgICAgICAgKHJ1blRlc3QpOgor
ICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanM6CisKIDIwMjEtMTEt
MTEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgSW5saW5l
IFJlZ0V4cC50ZXN0IEpJVCBjb2RlIGluIERGRyBhbmQgRlRMCmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMg
Yi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2Yt
cHJveHkuanMKaW5kZXggNTBjYWVlZDExNDg0MjlmZDFiNWNlMGIwZmVhZTZiZGRkZTY3MTBiOC4u
OTRkYWI0NmQyZDcxODRmMzVkNDNlMmRiNGEyZGQ1NjQxOThiZWZmNSAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5
LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1h
d2FyZS1vZi1wcm94eS5qcwpAQCAtMSw0ICsxLDQgQEAKLS8vQCBydW5EZWZhdWx0KCItLXZhbGlk
YXRlT3B0aW9ucz10cnVlIC0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXVzZUNvbmN1cnJl
bnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAiLCAiLS10aHJlc2hvbGRGb3JK
SVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MTAw
IiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA9MTAwIiwgIi0tdGhyZXNo
b2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJX
YXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbj0xMDAwIiwgIi0tdmFs
aWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKKy8vQCBydW5EZWZhdWx0KCItLXZh
bGlkYXRlT3B0aW9ucz10cnVlIiwgIi0tdXNlQ29uY3VycmVudEpJVD1mYWxzZSIsICItLXVzZUNv
bmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249MTAiLCAiLS10aHJlc2hv
bGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJt
VXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA9MTAwIiwgIi0t
dGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXpl
QWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbj0xMDAwIiwg
Ii0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikKIAogZnVuY3Rpb24gbWFp
bigpIHsKICAgICBsZXQgdjE2MjsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5n
LXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmct
cHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKaW5kZXggNjg5YTAwNWFiNTU1YTFmYzYwMWE1
NGU0ZWJmOTRlOTlhNjY4Zjc3ZS4uNWMyMjBmZDc2Y2RjNWM0MGU1OWNjNjZlNTczNDJjNzJkOGM3
ZjNhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1u
YW1lLXNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2Fz
bS1uYW1lLXNlY3Rpb24uanMKQEAgLTY5LDUgKzY5LDUgQEAKICAgICB2YXIgd2FzbUVudHJ5ID0g
ZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZS5leHBvcnRzLl9wYXJyb3QoMSk7
CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRyeSwgWyJfc2lsbHkiLCAiKHVua25vd24pIiwg
Ijw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dIiwg
Ijw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XSIs
ICJ3YXNtLXN0dWIiLCAiMjQiLCAid2FzbUVudHJ5Il0pOworICAgIHJ1blRlc3Qod2FzbUVudHJ5
LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20tZnVuY3Rpb25bX2VnZ3NdIiwgIjw/
Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dIiwgIjw/
Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwgIih1bmtub3duKSIsICJ3YXNtRW50cnkiXSk7CiB9
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzIGIv
SlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qcwppbmRleCBjZDIxZjI4OGMx
NDhhNGI3NDA1YmY4NjhkZWY5YjU0NTczNDA1MDQ1Li4wNmRmMDEyNDk1OTY5ZTI4NDIxODc3ODY5
MDEzNWJmMDkwMTBlYzZkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9m
aWxlci13YXNtLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20u
anMKQEAgLTgsNSArOCw1IEBACiAgICAgdmFyIHdhc21FbnRyeSA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5sb29wKDEwMDAwMDAwKTsKICAgICB9OwotICAg
IHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0aW9uWzBdIiwgIndhc20tc3R1YiIs
ICIwIiwgIndhc21FbnRyeSJdKTsKKyAgICBydW5UZXN0KHdhc21FbnRyeSwgWyI8Pz4ud2FzbS1m
dW5jdGlvblswXSIsICIodW5rbm93bikiLCAid2FzbUVudHJ5Il0pOwogfQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcyBiL0pT
VGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIuanMKaW5kZXgg
OTY0MmRkYzdjMWU2ZjA2ZTNiMTMyNzljMGU0YTAyNWI1NGRjYWJmMS4uMWI5MmU5NDg1NGFmNjNm
NjdkMDhmNTQ4ODdjNTIxNzkxNGVlMmJmNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9z
YW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpzCkBAIC03MCwxMSArNzAsMTMgQEAg
ZnVuY3Rpb24gY2hlY2sobm9kZSkgewogICAgIAogICAgIGxldCBub2RlID0gdHJlZTsKICAgICBm
b3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5ndGg7IGktLTsgKSB7CisgICAgICAgIGxldCBwcmV2
ID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRyZW5bc3RhY2tUcmFjZVtpXV07CiAg
ICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgaWYgKFZFUkJPU0UpIHsKICAgICAgICAg
ICAgICAgICBwcmludCgiZmFpbGluZyBvbiAiICsgaSArICIgOiAiICsgc3RhY2tUcmFjZVtpXSk7
CiAgICAgICAgICAgICAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkodHJlZSkpOworICAgICAgICAg
ICAgICAgIHByaW50KE9iamVjdC5rZXlzKHByZXYuY2hpbGRyZW4pKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4LDcgKzExMCw3IEBA
IGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3RhY2tUcmFjZU9yU3RyaW5nKSB7CiAgICAgICAgIH0K
ICAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgdGltZVRvRmFpbCk7CiAgICAg
cHJpbnQoSlNPTi5zdHJpbmdpZnkocm9vdCwgdW5kZWZpbmVkLCAyKSk7Ci0gICAgZG9lc1RyZWVI
YXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNlLCB0cnVlLCB0cnVlKTsKKyAgICBkb2VzVHJl
ZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2VPclN0cmluZywgdHJ1ZSwgdHJ1ZSk7CiAg
ICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhY2sgdHJhY2UiKTsKIH0KIApkaWZmIC0tZ2l0IGEv
SlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzIGIvSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCmluZGV4IDY4MDVlNjg5ZjVjODc5ZTJjYTUw
OWM4OGQzZTdiMzc2ZGUwOWZhYWEuLjMzYzg2YmYxY2RlOWE4ZGFiMTE4ZTBlNGNiMGJhY2Q1OWI3
NDkxZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlv
bi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKQEAg
LTY5LDQgKzY5LDQgQEAKIGFzc2VydC5lcShzdGFja3RyYWNlWzNdLCAiPD8+Lndhc20tZnVuY3Rp
b25bX2JhY29uXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVxKHN0YWNrdHJhY2VbNF0sICI8Pz4u
d2FzbS1mdW5jdGlvbltfc3BhbV1AW3dhc20gY29kZV0iKTsKIGFzc2VydC5lcShzdGFja3RyYWNl
WzVdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF1AW3dhc20gY29kZV0iKTsKLWFzc2VydC5l
cShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHdhc20gZW50cnkK
K2Fzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFtuYXRpdmUgY29kZV0iKTsgLy8g
d2FzbSBlbnRyeQo=
</data>
<flag name="review"
          id="469059"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444173</attachid>
            <date>2021-11-14 02:31:45 -0800</date>
            <delta_ts>2021-11-14 11:26:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211114023144.patch</filename>
            <type>text/plain</type>
            <size>227861</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGM4YzUwNTI5Y2RlNTU0ZDVkMTg3Njk5YzQ1ZDFiNGUyNmQ3Nzg0Li44YWE1YjhlYjM5N2E4NGU0
NGIzNWI2YTAwM2UwMmVkMTI0NGVmNTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODAgQEAKKzIwMjEtMTEtMTQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIHBhdGNoIGludGVncmF0ZXMg
bm9ybWFsIENhbGxMaW5rSW5mbyBpbnRvIExMSW50IGFuZCByZW1vdmUgYWRob2MgTExJbnRDYWxs
TGlua0luZm8uCisgICAgICAgIFNvIHRoYXQgd2UgY2FuIHNpbXBsaWZ5IG91ciBJQyBzb2Z0d2Fy
ZSBzdGFjaywgYW5kIHVuaWZ5aW5nIGNhbGwgSUMgbWVjaGFuaXNtIGludG8gb25lIENhbGxMaW5r
SW5mby4KKworICAgICAgICAxLiBMTEludCBjYW4gZnVsbHkgdXNlIG91ciBwb2x5bW9ycGhpYyBj
YWxsIElDLCBhbmQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gcmVzZXQgY2FsbCBJQyB3aGVuCisgICAg
ICAgICAgIHRpZXJpbmcgdXAgZnJvbSBMTEludCB0byBCYXNlbGluZSBKSVQgc2luY2UgYm90aCBu
b3cgdXNlcyB0aGUgc2FtZSBDYWxsTGlua0luZm8gZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAgICAg
IERGRyBhbmQgRlRMIGNhbiBhbHNvIHJldHJpZXZlIGNhbGwgaW5mb3JtYXRpb24gZnJvbSB0aGlz
IENhbGxMaW5rSW5mby4KKyAgICAgICAgMi4gTExJbnQgdmFyYXJncyBjYWxscyBnZXQgdGhlIHNh
bWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIEJhc2VsaW5lLiBQcmV2aW91c2x5IGl0IGRvZXMg
bm90IGhhdmUKKyAgICAgICAgICAgY2FsbCBJQy4KKyAgICAgICAgMy4gV2hlbiBKSVQgaXMgZGlz
YWJsZWQsIHdlIGRpc2FibGUgcG9seW1vcnBoaWMgY2FsbCBJQyBzaW5jZSBpdCByZXF1aXJlcyBk
eW5hbWljIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSBvbmx5
IHVzZSBtb25vbW9ycGhpYyBvbmUsIHdoaWNoIGlzIHRoZSBzYW1lIHRvIHRoZSBvbGQgTExJbnRD
YWxsTGlua0luZm8uCisgICAgICAgIDQuIENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uIGlzIHNl
dCB1cCBvbmx5IGFmdGVyIEJhc2VsaW5lIEpJVC4gV2UgYWRqdXN0IGNhbGwgSUMgY29kZSBzbyB0
aGF0CisgICAgICAgICAgIHdlIG5vIGxvbmdlciByZWx5IG9uIGRvbmVMb2NhdGlvbiB3aGVuIHVz
aW5nIERhdGFJQy4gVGhpcyBhbGxvd3MgdXMgdG8gc21vb3RobHkgdGllcmluZyB1cAorICAgICAg
ICAgICBmcm9tIExMSW50IHRvIEJhc2VsaW5lIEpJVCB3aGlsZSB1c2luZyB0aGUgc2FtZSBDYWxs
TGlua0luZm8uCisgICAgICAgICAgIFdlIHNldCB1cCBkb25lTG9jYXRpb24gaW4gQmFzZWxpbmUg
SklUIGp1c3QgYmVjYXVzZSBERkcgT1NSIGV4aXQgcmVxdWlyZXMgd2hlbiBleGl0aW5nIHRvCisg
ICAgICAgICAgIEJhc2VsaW5lIEpJVCBjb2RlLgorICAgICAgICA1LiBXZSByZW1vdmUgQ2FsbExp
bmtJbmZvIGZyb20gSklUIGNvbnN0YW50IHBvb2wsIGFuZCB3ZSBzdG9yZSBDYWxsTGlua0luZm8g
aW4gbWV0YWRhdGEgc28gdGhhdAorICAgICAgICAgICBMTEludCBhbmQgQmFzZWxpbmUgSklUIHF1
aWNrbHkgYWNjZXNzIHRvIHRoYXQgYW5kIGtlZXBpbmcgdW5saW5rZWQgQmFzZWxpbmUgSklUIHdv
cmtpbmcuCisgICAgICAgIDYuIFdlIGltcGxlbWVudCBMTEludCB2ZXJzaW9uIG9mIGNhbGwgSUMg
dGh1bmtzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiBKSVQgaXMgZGlzYWJsZWQu
CisKKyAgICAgICAgU3BlZWRvbWV0ZXIyIGlzIG5ldXRyYWwuIEpldFN0cmVhbTIgaXMgMC43JSBw
cm9ncmVzc2VkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIv
Q29kZUxvY2F0aW9uLmg6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAg
ICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IpOiBEZWxldGVkLgorICAgICAgICAq
IGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5jcHA6CisgICAgICAgIChKU0M6OnNob3VsZER1bXBEaXNhc3NlbWJseUZvcik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBjb25zdCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OmNhbGxMaW5rSW5mb0Zvcik6
CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpjbGVhclN0dWIpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldE1v
bm9tb3JwaGljQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhckNhbGxl
ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmVtaXRTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6
ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxs
RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmlzTGlua2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpz
dHViIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1cGRhdGVNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Zm9yRWFj
aERlcGVuZGVudENlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldFNs
b3dTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhclNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFz
ZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0aXNv
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxp
bmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludENh
bGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0VmlydHVhbENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAg
ICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKToKKyAgICAg
ICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbyk6CisgICAgICAgIChK
U0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6
OkpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KToKKyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRj
aC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAgICAgICAgKEpTQzo6bGlu
a1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU93bmVyKToKKyAgICAgICAgKEpT
Qzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAg
ICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6anNUb1dhc21JQ0NvZGVQdHIp
OgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5
bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogaml0L1Jl
cGF0Y2hJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpoYW5kbGVIb3N0Q2FsbCk6Cisg
ICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0
aW9uKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yUmVndWxhckNv
bnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0ZvclRhaWxDb25z
dHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RD
YWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAg
ICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmluaXRpYWxpemUp
OgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OmxsaW50X2xpbmtfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF92aXJ0dWFs
X2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlSG9zdENhbGwpOgorICAgICAgICAo
SlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1
cCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5l
cmljQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVh
dGVKU0dhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVhdGVUYWlsQ2FsbEdhdGUp
OgorICAgICAgICAoSlNDOjpMTEludDo6cmV0dXJuTG9jYXRpb25UaHVuayk6CisgICAgICAgICog
bGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3BlcmF0b3IgQ2FsbExpbmtJbmZvKik6CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIG9mZmxpbmVhc20vY2xvb3AucmI6Cisg
ICAgICAgICogb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmI6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlQmFzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6
CisgICAgICAgICogcnVudGltZS9HYXRlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpnZXRDVElMaW5rQ2FsbCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRD
VElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0
Q1RJVmlydHVhbENhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMS0xMS0xNCAg
TWlraGFpbCBSLiBHYWRlbGhhICA8bWlraGFpbEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFByZXZl
bnQgZnVzZWQgbXVsdGlwbHkgYWRkIGR1cmluZyBQYXJzZUludApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IDEyYzRhNWM4Mjc3Y2E3NzAxZDg0OWVmZjY0NjdiZDg4Nzk1OTAw
MDguLmNjNDFmYzAzZDBhMDg2Y2M3N2NlNGU3ZDAwMmRlMTdjODY0MzIwMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY1OSw3ICs2NTksNiBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGJ5dGVjb2RlL0ludGVybmFsRnVu
Y3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFk
YXRhLmgKICAgICBieXRlY29kZS9KdW1wVGFibGUuaAotICAgIGJ5dGVjb2RlL0xMSW50Q2FsbExp
bmtJbmZvLmgKICAgICBieXRlY29kZS9MTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuaAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKICAg
ICBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNGRiYmVmNGRjYTIwMWJlNWJlMDBkMzA5NmE0YTlhZTg1YTYwNTI5ZC4uMmYxZDI5NWUy
ZjQxYWQxNWEyMTRlZGZjNzI5YjFkZTAzNGVkOTY2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCQkwRjBDQUVGQzFFQzREQTZCMDA5NzBEMTIgLyog
SlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwQ0FFRkExRUM0REE2MjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXpl
clByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjBDQUVGRjFFQzREQTg4MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDQUVGRTFF
QzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJG
MUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdElu
ZGV4TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVG
MTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFp
ckN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovOyB9OwogCQkwRjEyREUx
MDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4
Y2VwdGlvbkZ1enouaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzZENEIxNzRBRDY5QjAwNzVC
MzU0IC8qIERlZmVyR0MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTg2LDcgKzE4NSw2IEBACiAJCTBGMjRFNTQ0MTdFQTlGNTkwMEFCQjIxNyAv
KiBHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIx
NyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTRG
MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBU
ZW1wUmVnaXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NEExN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guaCAqLzsgfTsKIAkJMEYyNEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8q
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0
MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3
ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdG
Mjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovOyB9OwpA
QCAtMTE2MSw2ICsxMTU5LDcgQEAKIAkJNjUxMTIzMDcxNDA0NkIwQTAwMkIxMDFEIC8qIHRlc3RS
ZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjUxMTIyRTUxNDA0NjlCQTAwMkIxMDFEIC8qIHRlc3RSZWdFeHAuY3BwICovOyB9OwogCQk2NTE0
RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTE0RjIxNzE4QjNFMTY3MDA5OEZGOEIgLyogQnl0
ZWNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzMDNENjMxNDQ3QjlFMTAwRDNG
OTA0IC8qIFBhcnNlclRva2Vucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTNC
QzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NTcwRjVBMUFBNEMzRUEwMDlC
M0MyMyAvKiBSZWdyZXNzMTQxMjc1Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU1NzBGNTkxQUE0QzAwQTAwOUIzQzIzIC8qIFJlZ3Jlc3MxNDEyNzUu
bW0gKi87IH07CiAJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3Q0Y0NTcxOUJGNjY2
MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNjU4ODI0QUYxRTVDRkRCMDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1ODgyNEFF
MUU1Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyODUsNyArMTI4NCw2IEBACiAJCTg2NzA0QjQz
MTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCNDExMkRCOEE4MTAwQTlGRTdCIC8q
IFlhcnJTeW50YXhDaGVja2VyLmggKi87IH07CiAJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2NzA0QjdFMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjcwNEI4
NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODAxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2NTNC
QzQzRjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIw
IC8qIFlhcnJKSVRSZWdpc3RlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODEx
MkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
clBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2NzA0QjgzMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2ODkxNkIwMTU1RjI4NjMwMENC
MkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODY4OTE2QTkxNTVGMjg1NDAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MjAsNiAr
MTkxOCw4IEBACiAJCUUzNzUwQ0M4MjUwMkU4N0UwMDZBMEFBQiAvKiBJbnRsRGF0ZVRpbWVGb3Jt
YXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzc1MENDNzI1MDJFODdFMDA2QTBBQUIgLyogSW50bERhdGVUaW1lRm9ybWF0SW5saW5lcy5o
ICovOyB9OwogCQlFMzc4REM4RDI3Mjc2Mjk0MDA0MjdCMEIgLyogSW50bE51bWJlckZvcm1hdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUQ3OTJG
NjFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1hdC5jcHAgKi87IH07CiAJCUUzNzk0
RTc2MUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3OTRFNzQxQjc3RUI5NzAwNTU0M0FFIC8q
IE1vZHVsZUFuYWx5emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRTM3RTIwRTMyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzN0UyMEUwMjczRjU3NTMw
MEY3MDc1NyAvKiBSZXBhdGNoLmggKi87IH07CisJCUUzN0UyMEU1MjczRjU3NTMwMEY3MDc1NyAv
KiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM3RTIwRTIyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2hJbmxpbmVzLmggKi87
IH07CiAJCUUzODM1MDBBMjM5MEQ5M0IwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzgzNTAwOTIzOTBEOTM3MDAz
NjMxNkQgLyogV2FzbUdsb2JhbC5oICovOyB9OwogCQlFMzg1MEIxNTIyNkVENjQxMDA5QUJGOUMg
LyogREZHTWluaWZpZWRJRElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzODUwQjE0MjI2RUQ2M0UwMDlBQkY5QyAvKiBERkdNaW5pZmllZElE
SW5saW5lcy5oICovOyB9OwogCQlFMzg2NTJFMzIzN0NBMEM5MDBFMUQ1RUUgLyogQmxvY2tEaXJl
Y3RvcnlCaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzg2NTJFMjIzN0NBMEM4MDBFMUQ1RUUgLyogQmxvY2tEaXJlY3RvcnlCaXRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzOTEsNyArMjM5
MSw2IEBACiAJCTBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZpbmFsaXplckNhbGxi
YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMy
RjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQg
LyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TExJbnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMEYx
QTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJDdXN0b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2Vw
dGlvbkZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0
aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBFMTk3OUQ1
RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEV4Y2VwdGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0
NTQsOCArMjQ1Myw2IEBACiAJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE9wZXJhdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0NjE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ4
MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGVtcFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTUzMTdG
MEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lQ2FsbEZyYW1lU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxG
cmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJh
bWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQwMzUsNiArNDAzMiw3IEBA
CiAJCTY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEE2NERPcGNvZGUuY3BwOyBwYXRoID0gZGlzYXNz
ZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTJBM0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBNjRET3Bjb2RlLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvQVJN
NjQvQTY0RE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTMwM0Q2MzE0
NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhcnNlclRva2Vucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
NTNCQzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySklUUmVnaXN0ZXJzLmg7IHBhdGggPSB5YXJyL1lh
cnJKSVRSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0MDBDMTAw
QTY5QkFGMjAwNTA5ODg3IC8qIFByb3BlcnR5TmFtZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU5hbWVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NTQwQzc5QzFCODJEOTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJBdE9m
ZnNldExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQwQzc5RDFCODJE
OTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJBdE9mZnNldExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyOTUsNyArNDI5Myw2IEBACiAJCTg2NzA0QjdFMTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
WWFyckludGVycHJldGVyLmg7IHBhdGggPSB5YXJyL1lhcnJJbnRlcnByZXRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI3RjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJ
VC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBZYXJySklULmNwcDsg
cGF0aCA9IHlhcnIvWWFyckpJVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
NzA0QjgwMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFlhcnJKSVQuaDsgcGF0aCA9IHlhcnIvWWFyckpJVC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk2NTNCQzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJl
Z2lzdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySklUUmVnaXN0
ZXJzLmg7IHBhdGggPSB5YXJyL1lhcnJKSVRSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODY3MDRCODExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyclBhcnNlci5oOyBwYXRoID0geWFyci9Z
YXJyUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjgyMTJEQkEz
MzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBZYXJyUGF0dGVybi5jcHA7IHBhdGggPSB5YXJyL1lhcnJQYXR0ZXJuLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCODMxMkRCQTMzNzAwQTlGRTdCIC8q
IFlhcnJQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJQYXR0
ZXJuLmg7IHBhdGggPSB5YXJyL1lhcnJQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01MjQ2LDYgKzUyNDMsOSBAQAogCQlFMzc5NEU3MzFCNzdFQjk3MDA1NTQzQUUgLyog
TW9kdWxlQW5hbHl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TW9kdWxlQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc5NEU3
NDFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTW9kdWxlQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTM3Q0ZCMkQyMkYyN0M1NzAwOUE3QjM4IC8qIFdhc21Db21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvbXBpbGF0aW9uTW9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzN0UyMEUwMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTM3RTIwRTEyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzN0UyMEUyMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBh
dGNoSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzgwQTc2QjFEQ0Q3MTk1MDAw
Rjg5RTYgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVySGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzgwRDY2QjFGMTkyNDlEMDBBNTkwOTUgLyogQnVpbHRpbk5hbWVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0aW5OYW1lcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNt
R2xvYmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21HbG9iYWwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjQ1OCw4ICs2NDU4LDkgQEAKIAkJCQk2MjNBMzdFQjFCODdB
N0JEMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAw
MzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIz
MiAvKiBSZWdpc3RlclNldC5oICovLAotCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBS
ZXBhdGNoLmNwcCAqLywKLQkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5o
ICovLAorCQkJCUUzN0UyMEUxMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoLmNwcCAqLywKKwkJ
CQlFMzdFMjBFMDI3M0Y1NzUzMDBGNzA3NTcgLyogUmVwYXRjaC5oICovLAorCQkJCUUzN0UyMEUy
MjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoSW5saW5lcy5oICovLAogCQkJCTBGQTdBOEVEMThD
RTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovLAogCQkJCTBG
MjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywK
IAkJCQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwICov
LApAQCAtODgxNSw3ICs4ODE2LDYgQEAKIAkJCQkwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQlFMzYzN0VFODIzNkU1NkIwMDA5NkJE
MEEgLyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8sCiAJCQkJRTM2MzdFRTcyMzZFNTZCMDAwOTZC
RDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLywKLQkJCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODEx
NTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLywKIAkJCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAq
LywKIAkJCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMTRGNzlGNkUyMTZFQUQ1MDAwMDQ2
RDM5IC8qIE1ldGFkYXRhVGFibGUuY3BwICovLApAQCAtMTA1MjUsNyArMTA1MjUsNiBAQAogCQkJ
CUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzBERTlBMDkxQkU3RDY5RTAwNUQ4OUQ5IC8qIExMSW50QXNzZW1i
bHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTElu
dENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENBMTRCQkIxNkMw
MEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDMxNEJC
RDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDcyNSw3ICsx
MDcyNCw4IEBACiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90
ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTkyRjU2QjcxRTRFODRC
MjAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICov
LAotCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFMzdFMjBFMzI3M0Y1NzUzMDBGNzA3NTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTM3RTIwRTUyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2hJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTlGM0ZCOTI2MTNDNzg5MDA2OUU4OUYgLyogUmVzb3VyY2VFeGhh
dXN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyog
UmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQjY0MkYyNUQ2RkI0RDAwMUFEREI0
IC8qIFJvb3RNYXJrUmVhc29uLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IGE2Y2E1YzgxYzUxMDk1ZjgxOThk
OWI4MmRiMTRhNTgxYTI1Y2U2MDkuLjA3NTA0YmEwNGU1OWI2ZDFkY2EyMzU4OGJlZmI1NGRmMTkx
ODVhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxv
Y2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRp
b24uaApAQCAtMjcsOCArMjcsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCiAKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQotCiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBj
bGFzcyBOZWFyQ2FsbE1vZGUgOiB1aW50OF90IHsgUmVndWxhciwgVGFpbCB9OwpAQCAtMjY5LDUg
KzI2NywzIEBAIGlubGluZSBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8cmVzdWx0VGFnPiBD
b2RlTG9jYXRpb25Db21tb248dGFnPjo6Y29udmVydGliCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCmluZGV4IDA2MjQwZTg3NDM2Mzg3M2I5ZGYyY2M5
ZjM3ZjM4MjkxOGZlN2UyOWUuLmZmOTMwNTg5ZGIyNzExODBkMDk5ZTIzNTZjOTk3ZGM1OWIzNTZl
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
IkpJVENvZGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiV2FzbUNvbXBpbGF0
aW9uTW9kZS5oIgogCiAjaWYgT1MoTElOVVgpCiAjaW5jbHVkZSAiUGVyZkxvZy5oIgpAQCAtNDMs
MjkgKzQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBzaXplX3QgTGlua0J1ZmZlcjo6c19wcm9maWxl
Q3VtbXVsYXRpdmVMaW5rZWRTaXplc1tMaW5rQnVmZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIHNp
emVfdCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZENvdW50c1tMaW5rQnVm
ZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCk7Ci19Ci0KLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdh
c206OkNvbXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdh
c21EaXNhc3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKLSAgICAgICAgcmV0
dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNhc2UgV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdNb2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGU6Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1i
bHkoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiBMaW5rQnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpbmtCdWZm
ZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKQogewogICAgIHBlcmZvcm1G
aW5hbGl6YXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgKaW5kZXggNWEzZjAwZjA1YzY4NTgyOTU3NzI2NjdmYzIyMzU2N2Y2OGU5MmI4Ny4uMjg1
ZGYwZDFhMTgwOWRiMjBiNDc5NGNkMzEyMDU5ZWZjNmVlMDBlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKQEAgLTQzLDEyICs0Myw2IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1lbnVtIGNsYXNzIENvbXBpbGF0aW9u
TW9kZSA6IHVpbnQ4X3Q7Ci19Ci0KLWNsYXNzIENvZGVCbG9jazsKLQogLy8gTGlua0J1ZmZlcjoK
IC8vCiAvLyBUaGlzIGNsYXNzIGFzc2lzdHMgaW4gbGlua2luZyBjb2RlIGdlbmVyYXRlZCBieSB0
aGUgbWFjcm8gYXNzZW1ibGVyLCBvbmNlIGNvZGUgZ2VuZXJhdGlvbgpAQCAtNDQ2LDggKzQ0MCw2
IEBAIGNsYXNzIExpbmtCdWZmZXIgewogICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5m
aW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFnPigpKQogI2VuZGlmCiAK
LWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwotCiAjZGVmaW5lIEZJ
TkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRy
VGFnLCAuLi4pICBcCiAgICAgRklOQUxJWkVfQ09ERV9JRigoc2hvdWxkRHVtcERpc2Fzc2VtYmx5
Rm9yKGNvZGVCbG9jaykgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZl
clJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApAQCAtNDc2LDggKzQ2OCw2
IEBAIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwogI2RlZmluZSBG
SU5BTElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIGRh
dGFMb2dGQXJndW1lbnRzRm9ySGVhZGluZykgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKEpTQzo6
T3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCksIGxpbmtCdWZmZXJSZWZl
cmVuY2UsIHJlc3VsdFB0clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKQogCi1ib29s
IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwotCiAjZGVm
aW5lIEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcs
IC4uLikgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKChKU0M6Ok9wdGlvbnM6OmFzeW5jRGlzYXNz
ZW1ibHkoKSB8fCBKU0M6Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1
bXBXYXNtRGlzYXNzZW1ibHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywg
X19WQV9BUkdTX18pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAppbmRleCA1ZDU2NzQxZWZlNjY0MjZlZmNh
MjA1MmFjMjUwOTgzMjIwMjM3N2QwLi43MGRiMGQwMzllYTdlZDYxMWM4YTZlNWQ4MDg5MTNmMGFk
NWJkNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0yNiw4ICsyNiwxMSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiSklU
Q29kZS5oIgogI2luY2x1ZGUgIkpTQ1B0clRhZy5oIgorI2luY2x1ZGUgIldhc21Db21waWxhdGlv
bk1vZGUuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC02Myw1ICs2NiwyOCBAQCBDU3RyaW5nIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJh
c2U6OmRpc2Fzc2VtYmx5KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseQogICAgIHJl
dHVybiBvdXQudG9DU3RyaW5nKCk7CiB9CiAKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZH
RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpOworfQorCitib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihX
YXNtOjpDb21waWxhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAoT3B0aW9uczo6YXN5bmNEaXNh
c3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBX
YXNtRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNoIChtb2Rl
KSB7CisgICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGU6CisgICAgICAgIHJl
dHVybiBPcHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHkoKTsKKyAgICBjYXNlIFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01H
Rm9yT1NSRW50cnlNb2RlOgorICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2Vt
Ymx5KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IDkyNTU5
MThiMWJhMTc1YTFmNDlkYzMwMjVlYzZmY2E4ODkzOWQzNjQuLjFlYTMyNDU0MTVhYjA4YTQ1Yzdk
M2U1OTU5NjBjNDQ1YjE5ZmY3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAtNTQsNiArNTQsMTEgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2VudW0gY2xhc3MgQ29tcGls
YXRpb25Nb2RlIDogdWludDhfdDsKK30gLy8gbmFtZXNwYWNlIFdhc20KKworY2xhc3MgQ29kZUJs
b2NrOwogdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiAKIGVu
dW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKQEAgLTM3Nyw3ICszODIsMTAgQEAgY2xhc3MgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlIHsKIAog
ICAgIHZvaWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0
aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7Cisg
ICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFz
ZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2NhdGlvbigpLCBuYW1l
LCBvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJC
YXNlOjpkdW1wV2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKICAgICB9CiAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNv
ZGVQdHIiLCBvdXQpOyB9CkBAIC01MzcsNiArNTQ1LDkgQEAgaW5saW5lIEZ1bmN0aW9uUHRyPHRh
Zz46OkZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IHB0cikKIHsKIH0KIAor
Ym9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7Citib29sIHNob3VsZER1
bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCBiZTJlOGM4MTFkNmRkZDBjMTg0YmE1ZWQ0ZDk1Nzkz
NmZkMjI1OGEyLi4wMTM4NjBiNjZjMmIxOWE4Y2JiNTk1M2E1ZDBlNDRkZDI3N2ZiZDlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI2
LDYgKzI2LDcgQEAKIAogICAgIDpCYXNpY0Jsb2NrTG9jYXRpb24sCiAgICAgOkJvdW5kTGFiZWws
CisgICAgOkNhbGxMaW5rSW5mbywKICAgICA6RGVidWdIb29rVHlwZSwKICAgICA6RUNNQU1vZGUs
CiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCkBAIC00NCw3ICs0NSw2IEBACiAgICAgOkpT
U2NvcGUsCiAgICAgOkpTVHlwZSwKICAgICA6SlNWYWx1ZSwKLSAgICA6TExJbnRDYWxsTGlua0lu
Zm8sCiAgICAgOlJlc3VsdFR5cGUsCiAgICAgOk9wZXJhbmRUeXBlcywKICAgICA6UHJpdmF0ZUZp
ZWxkUHV0S2luZCwKQEAgLTg0MCw3ICs4NDAsOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxs
TGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBh
cnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LAogICAgIH0KIApAQCAtODUyLDcgKzg1Myw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxM
aW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CiAgICAgfQogCkBAIC04NjUsNyArODY3LDggQEAKICAgICAgICAgZWNtYU1vZGU6IEVDTUFNb2Rl
LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENh
bGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCiAgICAgfQogCkBAIC04NzksNiArODgyLDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGlu
dCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExp
bmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MDAsNiArOTA0LDcgQEAKICAgICAgICAg
Zmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxM
aW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MjEsNiArOTI2
LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2Zp
bGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0K
QEAgLTkzMyw3ICs5MzksOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisg
ICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6
IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApA
QCAtOTQ3LDYgKzk1NCw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKICAgICB9LApAQCAtMTI0OSw3ICsxMjU3LDggQEAKICAgICBtZXRhZGF0YTogewogICAg
ICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBp
dGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTElu
dENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBpdGVyYXRvclByb2ZpbGU6
IFZhbHVlUHJvZmlsZSwKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRh
LAogICAgICAgICBuZXh0UHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTI3Miw3ICsxMjgxLDgg
QEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9u
TW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAg
ICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJ
bmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAog
ICAgICAgICBuZXh0UmVzdWx0UHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgICAgICBkb25lTW9k
ZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBkb25lUHJvZmlsZTogVmFs
dWVQcm9maWxlLApAQCAtMTM5Myw2ICsxNDAzLDkgQEAKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0
dXJuX2Zyb21fanNfNDQKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDUKIG9w
IDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDYKK29wIDpsbGludF9jbG9vcF9kaWRf
cmV0dXJuX2Zyb21fanNfNDcKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDgK
K29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDkKIAogZW5kX3NlY3Rpb24gOkNM
b29wSGVscGVycwogCkBAIC0xNDE1LDYgKzE0MjgsMTAgQEAKIG9wIDpsbGludF9uYXRpdmVfY29u
c3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1w
b2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQor
b3AgOmxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF9jYWxsX3Ry
YW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6bGxp
bnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRf
ZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJh
bXBvbGluZQogb3AgOm5vcm1hbF9vc3JfZXhpdF90cmFtcG9saW5lCkBAIC0xNDIzLDYgKzE0NDAs
OCBAQAogb3AgOmxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24KIG9wIDpvcF9jYWxsX3Jl
dHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9j
YWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY29uc3RydWN0X3ZhcmFyZ3NfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBv
cCA6b3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9nZXRf
YnlfaWRfcmV0dXJuX2xvY2F0aW9uCkBAIC0xNDM4LDE1ICsxNDU3LDE1IEBACiBvcCA6b3BfY29u
c3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0b3Jfb3Blbl9zbG93X3Jl
dHVybl9sb2NhdGlvbgogb3AgOm9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb24K
LW9wIDpvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3Nsb3df
cmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3df
cmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9j
YXRpb24KIG9wIDpvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb24KIAogb3AgOmpzX3Ry
YW1wb2xpbmVfb3BfY2FsbAotb3AgOmpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsCiBvcCA6anNf
dHJhbXBvbGluZV9vcF9jb25zdHJ1Y3QKK29wIDpqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJn
cworb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3MKIG9wIDpqc190cmFtcG9s
aW5lX29wX2l0ZXJhdG9yX25leHQKIG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW4K
IG9wIDpqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQu
aAppbmRleCA0ZjQ3YzhiY2NmOGU1NzQ4YWE5YjBmMzZlNmYzNjMwNWFkYzMwMDExLi4yNzBjZDZm
MWQwMmY0NGQ1M2RiM2U2YWE2M2FmZmExNWUwYzA5MjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNr
cG9pbnQuaApAQCAtMTgwLDcgKzE4MCw3IEBAIHB0cmRpZmZfdCBzdGFja09mZnNldEluUmVnaXN0
ZXJzRm9yQ2FsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHVuc2lnbmVkIGNoZWNrCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+Ci1MTEludENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVj
a3BvaW50SW5kZXgpCitDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1ldGFk
YXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewogICAgIFVOVVNFRF9Q
QVJBTShjaGVja3BvaW50SW5kZXgpOwogICAgIHJldHVybiBtZXRhZGF0YS5tX2NhbGxMaW5rSW5m
bzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAK
aW5kZXggM2I4MDNiMzhhNzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBhNTU4YS4uYmRhYjM5NjEw
NzA0MDZkYzk3ZjdiYjc5OWUwYTFjNDI5YWYwMzZjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNs
dWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAotI2lm
IEVOQUJMRShKSVQpCiBuYW1lc3BhY2UgSlNDIHsKIAogQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBD
YWxsTGlua0luZm86OmNhbGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKQpAQCAtODIsMTEgKzgx
LDEzIEBAIENhbGxMaW5rSW5mbzo6fkNhbGxMaW5rSW5mbygpCiAKIHZvaWQgQ2FsbExpbmtJbmZv
OjpjbGVhclN0dWIoKQogeworI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCFzdHViKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fc3R1Yi0+Y2xlYXJDYWxsTm9kZXNGb3IodGhpcyk7CiAgICAg
bV9zdHViID0gbnVsbHB0cjsKKyNlbmRpZgogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5r
KFZNJiB2bSkKQEAgLTExMywxOSArMTE0LDIxIEBAIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKICAgICByZXR1cm4gbV9kb25l
TG9jYXRpb247CiB9CiAKLXN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBvbHltb3JwaGljQ2Fs
bGVlTWFzayA9IDE7Ci0KIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZShW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0Rp
cmVjdCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNh
bGxlZSkgJiBwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICBtX2NhbGxlZU9yQ29kZUJsb2Nr
LnNldCh2bSwgb3duZXIsIGNhbGxlZSk7CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgCisgICAgaWYg
KGlzRGF0YUlDKCkpCiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRp
b24gPSBjb2RlUHRyOwogICAgIGVsc2UgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIGNhbGxlZSk7
CisjZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiAg
ICAgfQogfQogCkBAIC0xMzUsOCArMTM4LDEzIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNh
bGxlZSgpCiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5jbGVhcigpOwogICAgIGlmIChpc0RhdGFJ
QygpKQogICAgICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gbnVs
bHB0cjsKLSAgICBlbHNlIGlmICghY2xlYXJlZEJ5SmV0dGlzb24oKSkKKyAgICBlbHNlIGlmICgh
Y2xlYXJlZEJ5SmV0dGlzb24oKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uLCBudWxscHRy
KTsKKyNlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYK
KyAgICB9CiB9CiAKIEpTT2JqZWN0KiBDYWxsTGlua0luZm86OmNhbGxlZSgpCkBAIC0yMjQsNiAr
MjMyLDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgCiAgICAg
aWYgKGlzTGlua2VkKCkpIHsKICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQp
CiAgICAgICAgICAgICBpZiAoIXN0dWIoKS0+dmlzaXRXZWFrKHZtKSkgewogICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coCkBAIC0yMzQsNiArMjQzLDkgQEAgdm9pZCBDYWxsTGlua0luZm86OnZp
c2l0V2VhayhWTSYgdm0pCiAgICAgICAgICAgICAgICAgdW5saW5rKHZtKTsKICAgICAgICAgICAg
ICAgICBtX2NsZWFyZWRCeUdDID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiAgICAgICAgIH0gZWxz
ZSBpZiAoIXZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSkpIHsKICAg
ICAgICAgICAgIGlmIChpc0RpcmVjdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKQEAgLTI4MCwxMyArMjkyLDE0IEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQp
CiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCiB7CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFr
ZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oc2h1ZmZsZURhdGEpOwogICAgIG1fZnJhbWVT
aHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2
b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAKQEAgLTM0NSw3ICszNTgsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bAogICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxs
TGlua0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRh
SUM6Ok5vKTsKQEAgLTM1OCw3ICszNzEsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUgogICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsK
QEAgLTM2Niw3ICszNzksNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmCiAKIHZvaWQgQ2FsbExp
bmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBz
ZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2FsbCgpLmNvZGUoKSk7CiAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBv
ZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KQEAg
LTM3NiwyMSArMzg5LDMxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgo
Vk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mCiAgICAgaml0Lm1vdmUo
Y2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KKyNlbmRpZgogCi12b2lkIENhbGxMaW5rSW5mbzo6
aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENh
bGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3Zv
aWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgQ2FsbFR5cGUgY2FsbFR5
cGUsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZy
YW1lU2h1ZmZsZURhdGEpCiB7Ci0gICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtl
ZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKLSAgICBzZXRVcENhbGwodW5saW5rZWRDYWxs
TGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7Ci0gICAgbV9kb25lTG9jYXRpb24gPSB1bmxp
bmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247Ci0gICAgaWYgKHVubGlua2VkQ2FsbExpbmtJ
bmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVTaHVmZmxlRGF0
YSk7CisgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KTsKKyAgICBt
X2NhbGxUeXBlID0gY2FsbFR5cGU7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBHUFJSZWcgY2FsbGVl
R1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IEdQUklu
Zm86OnJlZ1QyOworICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOworICAgIGlmIChmcmFtZVNo
dWZmbGVEYXRhKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJl
IGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRh
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZv
LmZyYW1lU2h1ZmZsZURhdGEpOworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5p
cXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqZnJhbWVTaHVmZmxlRGF0YSk7CiAgICAgfQotICAg
IHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKICAgICB1LmRhdGFJQy5tX2NhbGxMaW5r
SW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlv
bih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyNlbmRpZgorICAgIHNldFVzZXNEYXRhSUNzKFVzZURh
dGFJQzo6WWVzKTsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5r
Q2FsbCgpLmNvZGUoKSk7CisgICAgLy8gSWYgSklUIGlzIGRpc2FibGVkLCB3ZSBzaG91bGQgbm90
IHN1cHBvcnQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNhbGwgSUMuCisgICAgaWYgKCFPcHRpb25z
Ojp1c2VKSVQoKSkKKyAgICAgICAgZGlzYWxsb3dTdHVicygpOwogfQogCisjaWYgRU5BQkxFKEpJ
VCkKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CkBAIC00MDYsNyArNDI5
LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCkKICAgICB9KTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKQordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQ
YXRoKENDYWxsSGVscGVycyYgaml0LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JU
YWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogCkBAIC00NjIs
NiArNDg1LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgdGFyZ2V0KTsKIH0KKyNl
bmRpZgogCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CkBAIC00ODMsMTEg
KzUwNywxNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6cmV2ZXJ0Q2FsbFRvU3R1YigpCiAgICAgICAg
IG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9y
cGhpY0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUo
SklUKQogICAgICAgICBDQ2FsbEhlbHBlcnM6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNo
UHRyV2l0aFBhdGNoKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwgY2FsbGVlR1BS
KCksIG51bGxwdHIpOworI2Vsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyNlbmRpZgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxMaW5rSW5m
bzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKIHsK
ICAgICBjbGVhclN0dWIoKTsKQEAgLTUwNCw3ICs1MzMsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6
c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNv
ZGUoKS5jb2RlKCkpKTsKICAgICB9CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0j
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCmluZGV4IGU1Zjc3Y2YzN2JmMjY2ZjRiOWM5M2M1MGNmOTk2ZDIxYzY2
OGNlNDUuLjE4NDcxODcwM2VlMGMwYmUyOTUzNWIyMTY2MTU5YWYzMjg3MGNkYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTI4LDI1ICsy
OCwyOSBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCiAjaW5jbHVkZSAiQ2Fs
bE1vZGUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIlBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2lu
Y2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNp
ZiBFTkFCTEUoSklUKQotCiBjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBFeGVjdXRhYmxlQmFz
ZTsKIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKK2NsYXNzIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCitz
dHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87
CiAKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiB7CiBwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKKwogICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAg
ICAgICAgQ2FsbCwKQEAgLTU5LDYgKzYzLDggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGlj
IFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgRGlyZWN0Q29u
c3RydWN0LAogICAgICAgICBEaXJlY3RUYWlsQ2FsbAogICAgIH07CisKKyAgICBzdGF0aWMgY29u
c3RleHByIHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwogICAgIAogICAgIHN0
YXRpYyBDYWxsVHlwZSBjYWxsVHlwZUZvcihPcGNvZGVJRCBvcGNvZGVJRCk7CiAKQEAgLTE3NCwz
NSArMTgwLDQzIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5l
bE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBpc1ZhcmFyZ3NDYWxsVHlwZShz
dGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSkpOwogICAgIH0KIAotICAgIGJvb2wgaXNM
aW5rZWQoKSBjb25zdCB7IHJldHVybiBtX3N0dWIgfHwgbV9jYWxsZWVPckNvZGVCbG9jazsgfQor
ICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiBzdHViKCkgfHwgbV9jYWxsZWVPckNv
ZGVCbG9jazsgfQogICAgIHZvaWQgdW5saW5rKFZNJik7CiAKKyNpZiBFTkFCTEUoSklUKQogICAg
IHZvaWQgc2V0VXBDYWxsKENhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlR1BSKQogICAg
IHsKICAgICAgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOwogICAgICAgICBtX2NhbGxlZUdQUiA9
IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpOwotCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BS
OyB9CisjZW5kaWYKKworICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIENhbGxUeXBlLCBC
eXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSopOwogICAgIAogICAgIGVudW0gY2xh
c3MgVXNlRGF0YUlDIDogdWludDhfdCB7CiAgICAgICAgIFllcywKICAgICAgICAgTm8KICAgICB9
OwogCisjaWYgRU5BQkxFKEpJVCkKIHByaXZhdGU6Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9v
bCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBX
QVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxs
LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOwogcHVibGljOgogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1p
dERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFNj
b3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYpOwotICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7Cisg
ICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBTY29wZWRM
YW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1Bh
dGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKICAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1Bh
dGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKworICAgIHZv
aWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB2b2lkIHNldERpcmVjdENhbGxUYXJnZXQo
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOworI2VuZGlmCisKICAgICB2b2lkIHJl
dmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpA
QCAtMjE3LDcgKzIzMSw2IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdT
ZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIG1fZG9uZUxvY2F0aW9uID0gZG9u
ZUxvY2F0aW9uOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKIAog
ICAgIGJvb2wgYWxsb3dTdHVicygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsgfQogCkBA
IC0yMzcsNyArMjUwLDYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIEpT
Q2VsbCosIEZ1bmN0aW9uQ29kZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVCbG9jaygpOwog
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2soKTsKLSAgICB2b2lkIHNldERpcmVjdENh
bGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAgICAgdm9pZCBz
ZXRMYXN0U2VlbkNhbGxlZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxs
ZWUpOwogICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjQ3LDIyICsyNTksMTgg
QEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxs
TGlua0luZm8+IHsKICAgICB2b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihFeGVj
dXRhYmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAgICAgCisj
aWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lPiYmKTsKKyNlbmRpZgogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZSogc3R1YigpIGNvbnN0CiAgICAgeworI2lmIEVOQUJMRShKSVQp
CiAgICAgICAgIHJldHVybiBtX3N0dWIuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTbG93
U3R1YihSZWY8SklUU3R1YlJvdXRpbmU+JiYgbmV3U2xvd1N0dWIpCi0gICAgewotICAgICAgICBt
X3Nsb3dTdHViID0gV1RGTW92ZShuZXdTbG93U3R1Yik7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVh
clNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOworI2Vsc2UK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKICAgICB9CiAKICAgICBib29sIHNlZW5P
bmNlKCkKQEAgLTMzMCwxOSArMzM4LDE3IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQ
YWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHVpbnQzMl90KiBhZGRyZXNz
T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCi0gICAgewotICAgICAgICByZXR1cm4g
Jm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0gICAgfQotI2VuZGlmCi0KICAgICB1
aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBzZXRNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCk7CisgICAgdm9p
ZCB1cGRhdGVNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykKKyAgICB7CisgICAgICAgIGlmIChtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgICAgICAgICBt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoQ291bnQo
KQogICAgIHsKQEAgLTM2NCwxMCArMzcwLDEyIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKTsK
ICAgICB9CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fY2FsbGVlR1BSOwogICAgIH0KKyNlbmRpZgogCiAgICAgdWludDMy
X3Qgc2xvd1BhdGhDb3VudCgpCiAgICAgewpAQCAtMzgzLDkgKzM5MSwxMyBAQCBjbGFzcyBDYWxs
TGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewog
ICAgIHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKICAgICB7CiAgICAgICAgIGlmIChpc0xpbmtlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoc3R1
YigpKQorICAgICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
ICAgICAgICAgc3R1YigpLT5mb3JFYWNoRGVwZW5kZW50Q2VsbChmdW5jdG9yKTsKLSAgICAgICAg
ICAgIGVsc2UgeworI2Vsc2UKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZ1
bmN0b3IobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlz
RGlyZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9sYXN0U2VlbkNhbGxlZU9y
RXhlY3V0YWJsZS5nZXQoKSk7CkBAIC0zOTcsMjYgKzQwOSwzNSBAQCBjbGFzcyBDYWxsTGlua0lu
Zm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogCiAgICAg
dm9pZCB2aXNpdFdlYWsoVk0mKTsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXRGcmFt
ZVNodWZmbGVEYXRhKGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CiAKICAgICBjb25zdCBD
YWxsRnJhbWVTaHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0YSgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9mcmFtZVNodWZmbGVEYXRhLmdldCgpOwogICAgIH0KKyNlbmRpZgogCiBwcml2YXRl
OgogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFy
dCgpOwogCisgICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAg
fTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVu
dHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBh
cmd1bWVudHMuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25l
TG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKICAgICAgICAgVW5p
b25UeXBlKCkgCisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0
ciwgSW52YWxpZEdQUlJlZyB9CisjZWxzZQorICAgICAgICAgICAgOiBkYXRhSUMgeyBudWxscHRy
IH0KKyNlbmRpZgogICAgICAgICB7IH0KICAgICAgICAgc3RydWN0IERhdGFJQyB7CiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25vbW9ycGhpY0Nh
bGxEZXN0aW5hdGlvbjsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgR1BSUmVnIG1fY2Fs
bExpbmtJbmZvR1BSOworI2VuZGlmCiAgICAgICAgIH0gZGF0YUlDOwogCiAgICAgICAgIHN0cnVj
dCB7CkBAIC00MjksOSArNDUwLDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAKICAgICBXcml0ZUJhcnJpZXI8SlND
ZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fbGFz
dFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CisjaWYgRU5BQkxFKEpJVCkKICAgICBSZWZQdHI8UG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+IG1fc3R1YjsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc2xvd1N0dWI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRh
PiBtX2ZyYW1lU2h1ZmZsZURhdGE7CisjZW5kaWYKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdp
bjsKICAgICBib29sIG1faGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgIGJvb2wgbV9oYXNT
ZWVuQ2xvc3VyZSA6IDE7CkBAIC00NDEsOSArNDYzLDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgYm9vbCBt
X2NsZWFyZWRCeUpldHRpc29uIDogMTsKICAgICB1bnNpZ25lZCBtX2NhbGxUeXBlIDogNDsgLy8g
Q2FsbFR5cGUKICAgICB1bnNpZ25lZCBtX3VzZURhdGFJQyA6IDE7IC8vIFVzZURhdGFJQworI2lm
IEVOQUJMRShKSVQpCiAgICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9Owor
I2VuZGlmCiAgICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9OwotICAgIHVpbnQzMl90
IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0
aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUg
bnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogfTsKIAogaW5s
aW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykKQEAgLTQ1MywxMSArNDc2LDcgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2Fs
bExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIAogc3RydWN0
IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFs
bHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxs
VHlwZTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRp
b247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZm
bGVEYXRhOwogfTsKIAotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3Rh
dHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5j
cHAKaW5kZXggZjdhZmIyYjBmMjhmZDllNWZmYzVjMzRiNmEzYTg1NmFlMzczMDJmNS4uZDU5MDRh
OGU5MGEyY2RhNDY5MzcxZjg3ZTk3N2JkMmM4ZDM5MzE3YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC0zMCw3ICszMCw2IEBA
CiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBA
IC01Miw0NyArNTEsNiBAQCBDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0dXMoSlNWYWx1ZSB2
YWx1ZSkKICAgICBtX3ZhcmlhbnRzLmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkp
OwogfQogCi1DYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9j
ayk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIGlmIChwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5oYXNFeGl0U2l0
ZShERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkp
KSB7Ci0gICAgICAgIC8vIFdlIGNvdWxkIGZvcmNlIHRoaXMgdG8gYmUgYSBjbG9zdXJlIGNhbGws
IGJ1dCBpbnN0ZWFkIHdlJ2xsIGp1c3QgYXNzdW1lIHRoYXQgaXQKLSAgICAgICAgLy8gdGFrZXMg
c2xvdyBwYXRoLgotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgIE9wY29kZUlEIG9wID0gaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCk7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwot
ICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5m
byA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1f
Y2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2NvbnN0cnVjdDoKLSAg
ICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKS5tZXRh
ZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBvcF90YWlsX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+
YXM8T3BUYWlsQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOgotICAgICAgICBjYWxs
TGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpLm1ldGFkYXRhKHBy
b2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9w
X2l0ZXJhdG9yX25leHQ6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8
T3BJdGVyYXRvck5leHQ+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGxMaW5r
U3RhdHVzKCk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhj
YWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlKCkpOwotfQotCiBDYWxsTGlua1N0YXR1cyBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgSUNTdGF0dXNNYXAmIG1hcCwKICAgICBF
eGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhKQpAQCAtMTA1LDEwICs2MywxOSBAQCBDYWxsTGlua1N0
YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKICAgICBVTlVTRURfUEFSQU0oZXhpdFNp
dGVEYXRhKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuY2FsbExpbmtJbmZvOwot
ICAgIGlmICghY2FsbExpbmtJbmZvKSB7CisgICAgaWYgKCFjYWxsTGlua0luZm8pCisgICAgICAg
IHJldHVybiBDYWxsTGlua1N0YXR1cygpOworICAgIC8vIGRvbmVMb2NhdGlvbiBpcyBudWxscHRy
IHdoZW4gaXQgaXMgdGllZCB0byBMTEludCAobm90IEJhc2VsaW5lKS4KKyAgICBpZiAoIWNhbGxM
aW5rSW5mby0+ZG9uZUxvY2F0aW9uKCkpIHsKICAgICAgICAgaWYgKGV4aXRTaXRlRGF0YS50YWtl
c1Nsb3dQYXRoKQogICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICAgICAg
cmV0dXJuIGNvbXB1dGVGcm9tTExJbnQobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUlu
ZGV4KTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCktPmhhc0V4aXRTaXRlKERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRl
Y29kZUluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdWxk
IGZvcmNlIHRoaXMgdG8gYmUgYSBjbG9zdXJlIGNhbGwsIGJ1dCBpbnN0ZWFkIHdlJ2xsIGp1c3Qg
YXNzdW1lIHRoYXQgaXQKKyAgICAgICAgICAgIC8vIHRha2VzIHNsb3cgcGF0aC4KKyAgICAgICAg
ICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KICAg
ICAKICAgICByZXR1cm4gY29tcHV0ZUZvcihsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlu
a0luZm8sIGV4aXRTaXRlRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5oCmluZGV4IDViNTM4MGY5MGM1NmZjMDU0ZTY5ZjM3ZDQzNzUyZTQz
Y2RjMDcwMmEuLmE5MmQ5MDAxYjk2YmU0OWQ5MDFiNGFiYTljZDUyOTEwMjEwMTAwZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCkBAIC0x
MTcsNyArMTE3LDYgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXMgZmluYWwgewogcHJpdmF0ZToKICAg
ICB2b2lkIG1ha2VDbG9zdXJlQ2FsbCgpOwogICAgIAotICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1
cyBjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayos
IEJ5dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RhdGljIENhbGxMaW5rU3Rh
dHVzIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKAogICAgICAgICBjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBDYWxsTGlua0luZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKaW5kZXggNzdjYWE4ZTU3ZTk0YWQ3MzJhODcwM2I3MTBmZDQ4MGY3MTgx
M2FlNi4uYmZlMTg2NzhlNzVkNDEzMzM1MDkyODViMDQ4MDRjY2I2MmZmMDQ0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ0MSw2ICs0NDEs
MTcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLmluaXRpYWxpemVJbmRleGluZ01vZGUoYnl0ZWNvZGUubV9yZWNvbW1l
bmRlZEluZGV4aW5nVHlwZSk7CiAgICAgfTsKIAorICAgIGF1dG8gbGlua19jYWxsTGlua0luZm8g
PSBbJl0oY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24sIGF1dG8gYnl0ZWNvZGUsIGF1dG8mIG1ldGFk
YXRhKSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgaWYgY29uc3RleHByIChkZWNsdHlwZShi
eXRlY29kZSk6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbCkgeworICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGEgPSBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6Y3JlYXRl
Rm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwoYnl0ZWNvZGUsIG51bVBhcmFtZXRlcnMoKSk7Cisg
ICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBD
YWxsTGlua0luZm86OmNhbGxUeXBlRm9yKGRlY2x0eXBlKGJ5dGVjb2RlKTo6b3Bjb2RlSUQpLCBp
bnN0cnVjdGlvbi5pbmRleCgpLCAmc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlh
bGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihkZWNsdHlwZShieXRlY29k
ZSk6Om9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgfTsKKwog
I2RlZmluZSBMSU5LX0ZJRUxEKF9fZmllbGQpIFwKICAgICBXVEZfTEFaWV9KT0lOKGxpbmtfLCBf
X2ZpZWxkKShpbnN0cnVjdGlvbiwgYnl0ZWNvZGUsIG1ldGFkYXRhKTsKIApAQCAtNDQ5LDE0ICs0
NjAsMTcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKHRoaXMpOyBcCiAgICAgbmV3ICgmbWV0YWRhdGEpIF9fb3A6Ok1ldGFk
YXRhIHsgYnl0ZWNvZGUgfTsgXAogCi0jZGVmaW5lIENBU0UoX19vcCkgY2FzZSBfX29wOjpvcGNv
ZGVJRAotCi0jZGVmaW5lIExJTksoLi4uKSBcCi0gICAgQ0FTRShXVEZfTEFaWV9GSVJTVChfX1ZB
X0FSR1NfXykpOiB7IFwKKyNkZWZpbmUgTElOS19JTVBMKC4uLikgXAogICAgICAgICBJTklUSUFM
SVpFX01FVEFEQVRBKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSkgXAogICAgICAgICBXVEZf
TEFaWV9IQVNfUkVTVChfX1ZBX0FSR1NfXykoeyBcCiAgICAgICAgICAgICBXVEZfTEFaWV9GT1Jf
RUFDSF9URVJNKExJTktfRklFTEQsICBXVEZfTEFaWV9SRVNUXyhfX1ZBX0FSR1NfXykpIFwKICAg
ICAgICAgfSkgXAorCisjZGVmaW5lIENBU0UoX19vcCkgY2FzZSBfX29wOjpvcGNvZGVJRAorCisj
ZGVmaW5lIExJTksoLi4uKSBcCisgICAgQ0FTRShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykp
OiB7IFwKKyAgICAgICAgTElOS19JTVBMKF9fVkFfQVJHU19fKSBcCiAgICAgICAgIGJyZWFrOyBc
CiAgICAgfQogCkBAIC00NjUsMTAgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAg
ICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAgICAg
ICAgIG1fYnl0ZWNvZGVDb3N0ICs9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdOwogICAgICAgICBz
d2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIExJTksoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkK
LSAgICAgICAgTElOSyhPcFRhaWxDYWxsVmFyYXJncywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhP
cFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENvbnN0
cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkK
ICAgICAgICAgTElOSyhPcEdldFByaXZhdGVOYW1lLCBwcm9maWxlKQogCkBAIC00OTgsMTEgKzUw
OCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHkpCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2Zp
bGUpCiAKLSAgICAgICAgTElOSyhPcENhbGwsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWls
Q2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENhbGxFdmFsLCBwcm9maWxlKQotICAgICAg
ICBMSU5LKE9wQ29uc3RydWN0LCBwcm9maWxlKQotCiAgICAgICAgIExJTksoT3BJbkJ5VmFsKQog
ICAgICAgICBMSU5LKE9wUHV0QnlWYWwpCiAgICAgICAgIExJTksoT3BQdXRCeVZhbERpcmVjdCkK
QEAgLTUyNywxNSArNTMyLDE2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJ
TksoT3BDYXRjaCkKICAgICAgICAgTElOSyhPcFByb2ZpbGVDb250cm9sRmxvdykKIAotICAgICAg
ICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoT3BJdGVyYXRvck9wZW4pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogewotICAgICAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShPcEl0ZXJhdG9yTmV4dCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAg
ICAgIExJTksoT3BDYWxsLCBjYWxsTGlua0luZm8sIHByb2ZpbGUpCisgICAgICAgIExJTksoT3BU
YWlsQ2FsbCwgY2FsbExpbmtJbmZvLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wQ2FsbEV2YWws
IGNhbGxMaW5rSW5mbywgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcENvbnN0cnVjdCwgY2FsbExp
bmtJbmZvLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wSXRlcmF0b3JPcGVuLCBjYWxsTGlua0lu
Zm8pCisgICAgICAgIExJTksoT3BJdGVyYXRvck5leHQsIGNhbGxMaW5rSW5mbykKKyAgICAgICAg
TElOSyhPcENhbGxWYXJhcmdzLCBjYWxsTGlua0luZm8sIHByb2ZpbGUpCisgICAgICAgIExJTkso
T3BUYWlsQ2FsbFZhcmFyZ3MsIGNhbGxMaW5rSW5mbywgcHJvZmlsZSkKKyAgICAgICAgTElOSyhP
cFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgY2FsbExpbmtJbmZvLCBwcm9maWxlKQorICAgICAg
ICBMSU5LKE9wQ29uc3RydWN0VmFyYXJncywgY2FsbExpbmtJbmZvLCBwcm9maWxlKQogCiAgICAg
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogewogICAgICAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShPcFJlc29sdmVTY29wZSkKQEAgLTc4MywyMSArNzg5LDE4IEBAIHZvaWQgQ29kZUJsb2Nr
OjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRD
b2RlKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlz
RW1wdHkoKSk7CiAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rv
cjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKICAgICAgICAgaml0RGF0
YS5tX3N0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZvPihqaXRDb2RlLT5t
X3VubGlua2VkU3R1YkluZm9zLnNpemUoKSk7Ci0gICAgICAgIGppdERhdGEubV9jYWxsTGlua0lu
Zm9zID0gRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPihqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMu
c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA6IGppdENv
ZGUtPm1fdW5saW5rZWRDYWxscykgeworICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGxvY2tlciwgdW5saW5rZWRD
YWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBBU1NFUlQoY2FsbExpbmtJ
bmZvKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucyh7IH0sIHVu
bGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbik7CisgICAgICAgIH0KKwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQo
aSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUoKSkgewogICAgICAgICAgICAgY2Fz
ZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKICAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6Q2FsbExpbmtJbmZvOiB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVyKCkpOwotICAgICAgICAgICAgICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9IGppdENvZGUtPm1fdW5s
aW5rZWRDYWxsc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvc1tpbmRleF07Ci0gICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8s
IEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgaml0RGF0
YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9ICZjYWxsTGlua0luZm87Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50ZXIoKSk7CiAgICAgICAgICAg
ICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9IGppdENv
ZGUtPm1fdW5saW5rZWRTdHViSW5mb3NbaW5kZXhdOwpAQCAtMTU2NywxNSArMTU3MCw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfSk7Ci0KLSAgICBmb3JFYWNoTExJbnRDYWxsTGlua0luZm8oWyZdKExM
SW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by5pc0xpbmtlZCgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxMaW5rSW5mby5jYWxsZWUoKSkp
IHsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNsZWFy
aW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcyk7Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8u
dW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5sYXN0U2VlbkNh
bGxlZSgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZSgp
KSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckxhc3RTZWVuQ2FsbGVlKCk7Ci0gICAg
fSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTU5Myw4ICsxNTg3LDYgQEAgQ29kZUJsb2Nr
OjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewog
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgIGZvciAo
YXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBzdHVi
SW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CiAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXJCYXNlIGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwogICAgICAgICAgICAgc3R1Yklu
Zm8udmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHRoaXMpOwpAQCAtMTYxMiwxOSArMTYwNCw2
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpCiAgICAgICAgIH0K
ICAgICB9CiAjZW5kaWYKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgaWYgKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewotICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVl
ZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCi0gICAgICAg
IGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJ
VENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlua0luZm9zKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7Ci0gICAgICAgICAgICBjYWxs
TGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
Ci0gICAgfQotI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTYzNCw4ICsxNjEzLDEzIEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiAKICAgICB1cGRhdGVB
bGxQcmVkaWN0aW9ucygpOwogCi0gICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChq
aXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgp
KSkgewogICAgICAgICBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CisgICAgICAgIC8vIElm
IHRoZSBDb2RlQmxvY2sgaXMgREZHIG9yIEZUTCwgQ2FsbExpbmtJbmZvIGluIG1ldGFkYXRhIGlz
IG5vdCByZWxhdGVkLgorICAgICAgICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZv
KFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLnZpc2l0V2Vhayh2bSk7CisgICAgICAgIH0pOworICAgIH0KIAogI2lmIEVOQUJMRShKSVQp
CiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTY5OSwxMyArMTY4MywxNiBAQCB2b2lkIENvZGVC
bG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIHZvaWQgQ29kZUJsb2NrOjpnZXRJQ1N0YXR1
c01hcChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBJQ1N0YXR1c01hcCYgcmVzdWx0KQogewor
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkgeworICAgICAg
ICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykgeworICAgICAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29kZU9y
aWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNhbGxM
aW5rSW5mbzsKKyAgICAgICAgfSk7CisgICAgfQogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKEpJ
VENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBt
X2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgc3R1YkluZm8gOiBqaXRE
YXRhLT5tX3N0dWJJbmZvcykKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHN0dWJJbmZvLmNv
ZGVPcmlnaW4sIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5zdHViSW5mbyA9ICZzdHViSW5m
bzsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxs
TGlua0luZm9zKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoY2FsbExpbmtJbmZvLmNvZGVP
cmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNhbGxMaW5rSW5mbyA9ICZjYWxs
TGlua0luZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CkBAIC0xNzYwLDE1ICsxNzQ3LDI0
IEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUNhbGxMaW5rSW5mbyogQ29k
ZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggaW5k
ZXgpCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4IGluZGV4KQogewot
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBpZiAoYXV0byogaml0
RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5m
byA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykgewotICAgICAgICAgICAgaWYgKGNhbGxMaW5r
SW5mby5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdpbihpbmRleCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuICZjYWxsTGlua0luZm87CisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRl
ZChqaXRUeXBlKCkpKSB7CisgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
KCkuYXQoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7
CisjZGVmaW5lIENBU0UoT3ApIFwKKyAgICAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKKyAgICAg
ICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2Fs
bExpbmtJbmZvOyBcCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBGT1JfRUFDSF9PUENP
REVfV0lUSF9DQUxMX0xJTktfSU5GTyhDQVNFKQorCisjdW5kZWYgQ0FTRQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsK
ICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1v
bigpOwpAQCAtMjEzNSwxMyArMjEzMSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTaHJpbmtNb2RlIHNocmlua01vZGUpCiB9CiAKICNp
ZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNv
bWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9pbmNvbWluZ0NhbGxzLnB1c2goaW5j
b21pbmcpOwotfQotCiB2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxs
KENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQog
ewogICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7CkBAIC0yMTUyLDEwICsyMTQx
LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZy
YW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IAordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2Fs
bGVyRnJhbWUpOworICAgIG1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKK30KKwogdm9p
ZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogewotICAgIHdoaWxlIChtX2luY29t
aW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQotICAg
ICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51bmxpbmsoKTsKKyAgICB3aGlsZSAo
bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQorICAgICAg
ICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogI2lmIEVOQUJMRShKSVQp
CiAgICAgSklURGF0YSogaml0RGF0YSA9IG51bGxwdHI7CiAgICAgewpAQCAtMjE2MywyMCArMjE1
OCwxMiBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgICAgIGpp
dERhdGEgPSBtX2ppdERhdGEuZ2V0KCk7CiAgICAgfQogICAgIGlmIChqaXREYXRhKSB7Ci0gICAg
ICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRhLT5t
X2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAgICAgICAgICBqaXREYXRhLT5tX2luY29taW5nQ2Fs
bHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nUG9seW1v
cnBoaWNDYWxscy5lbmQoKSkKICAgICAgICAgICAgIGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9y
cGhpY0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgpKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qIGluY29taW5nKQotewotICAgIG5vdGljZUlu
Y29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChp
bmNvbWluZyk7Ci19Ci0KIENvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7
CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zv
cihzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yMzI5LDIyICsyMzE2LDIwIEBAIHZvaWQgQ29k
ZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGlt
aXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZtLmhlYXAuY3VycmVudFRocmVhZElzRG9pbmdHQ1dv
cmsoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIEVOQUJMRShKSVQpCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGlmIChKSVREYXRhKiBqaXREYXRhID0gbV9qaXRE
YXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERh
dGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xl
YXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShERkdfSklUKQogICAgICAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRD
b2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZvciAoYXV0byogY2FsbExpbmtJbmZvIDog
ZGZnQ29tbW9uLT5tX2NhbGxMaW5rSW5mb3MpCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZd
KENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLnNldENsZWFyZWRCeUpldHRpc29uKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQog
ICAgIH0KLSNlbmRpZgogCiAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDIpLgogICAgIG93bmVy
RXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh2bSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5cGUoKSwg
c3BlY2lhbGl6YXRpb25LaW5kKCkpOwpAQCAtMjg0NywxOSArMjgzMiwxMyBAQCBBcnJheVByb2Zp
bGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5dGVjb2RlSW5kZQogewogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5h
dChieXRlY29kZUluZGV4KTsKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7
Ci0jZGVmaW5lIENBU0UxKE9wKSBcCisjZGVmaW5lIENBU0UoT3ApIFwKICAgICBjYXNlIE9wOjpv
cGNvZGVJRDogXAogICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FycmF5UHJvZmlsZTsKIAotI2RlZmluZSBDQVNFMihPcCkgXAotICAgIGNhc2Ug
T3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1l
dGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlOwotCi0gICAgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNFMSkKLSAgICBGT1JfRUFDSF9PUENPREVf
V0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDQVNFMikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9BUlJBWV9QUk9GSUxFKENBU0UpCiAKLSN1bmRlZiBDQVNFMQotI3VuZGVmIENBU0UyCisjdW5k
ZWYgQ0FTRQogCiAgICAgY2FzZSBPcEdldEJ5SWQ6Om9wY29kZUlEOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwpAQCAtMzAyOSwxNyArMzAw
OCwxMiBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcm9maWxlUHJlZGljdGlvbnMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZQogICAgICAgICB9CiAgICAgfSk7CiAKLSNk
ZWZpbmUgVklTSVQxKF9fb3ApIFwKKyNkZWZpbmUgVklTSVQoX19vcCkgXAogICAgIG1fbWV0YWRh
dGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlKTsgfSk7CiAKLSNkZWZpbmUgVklTSVQyKF9fb3ApIFwKLSAgICBtX21l
dGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRh
ZGF0YS5tX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZSk7IH0pOwotCi0gICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShWSVNJVDEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oVklTSVQyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRI
X0FSUkFZX1BST0ZJTEUoVklTSVQpCiAKLSN1bmRlZiBWSVNJVDEKLSN1bmRlZiBWSVNJVDIKKyN1
bmRlZiBWSVNJVAogCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yTmV4dD4oWyZd
IChhdXRvJiBtZXRhZGF0YSkgewogICAgICAgICBwcm9jZXNzKG1ldGFkYXRhLm1faXRlcmFibGVQ
cm9maWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRl
eCA2NGY5ZjVhYmNmZTJhZTcwNWQxZGE2NWFhOWY4MzE5N2I5NmM2ZDMxLi5iN2FlYTI2NzdmNWU5
NDkwOGFiMzU1Zjk2YjBkMjNjMzc4MjQyMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiSlNDYXN0Lmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKLSNp
bmNsdWRlICJMTEludENhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkxhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGFUYWJsZS5oIgogI2luY2x1ZGUgIk1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmgiCkBAIC0yNjEsOCArMjYwLDYgQEAgY2xhc3MgQ29kZUJsb2NrIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKICAgICAgICAgRml4ZWRWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9z
OwotICAgICAgICBGaXhlZFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKLSAg
ICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5r
ZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9y
cGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAgICAgICAgIGJvb2wg
bV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwpAQCAtMjkxLDcgKzI4OCw3IEBAIGNsYXNz
IENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0
aW9uIGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBpbGluZyBPU1IgZXhpdHMgaW4gdGhlIGNh
c2UKICAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlubGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5
b3Ugd2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxseQogICAgIC8vIGxvb2tpbmcgZm9yIGEg
Q2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KLSAg
ICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJ
bmRleCk7CisgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIGNv
bnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKTsKIApAQCAtMzA5LDE0ICszMDYsMTEgQEAgY2xh
c3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAog
ICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0jaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZv
Kik7CisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2Fs
bChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKIAotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNh
bGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyopOwotCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IG91dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKTsKICAgICBpbnQgb3V0
T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkKICAgICB7
CkBAIC00NTMsNyArNDQ3LDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25z
dCBGdW5jdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
TExJbnRDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhjb25zdCBG
dW5jdG9yJik7CiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGJpbmFyeUFyaXRoUHJvZmlsZUZv
ckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIHVu
YXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKQEAgLTk1OSw3
ICs5NTMsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBWTSogbV92
bTsKIAogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlciB7IG51bGxwdHIg
fTsKLSAgICBTZW50aW5lbExpbmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIFBhY2tlZFJhd1Nl
bnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdMTEludENhbGxzOworICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxD
YWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1h
cCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0
Q29kZTsKICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKaW5kZXggMWQ1OTRhYjgzNTI4OTdlYzhhNzQ1ZWEyNDkz
ZjhkMmRhMDE4Yjk2Mi4uMGJlYzZiMTJiY2I2OTc3NjliNzA3MzY0YzY5MjdlYzg5OTk1MDU3MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCkBAIC04NiwxMyArODYsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJiBmdW5jKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25z
dCBGdW5jdG9yJiBmdW5jKQordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxpbmVD
YWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYgZnVuYykKIHsKICAgICBpZiAobV9tZXRhZGF0YSkg
ewogI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihb
Jl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9jYWxsTGlua0luZm8pOyB9KTsK
IAotICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJ
VCkKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQ0FMTF9MSU5LX0lORk8oVklTSVQpCiAK
ICN1bmRlZiBWSVNJVAogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZh
MzJlOWI2NmJiN2M2MWZlYjMzOWY4MDUyOGMyZDM0NzFkODA2OGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJKU0NQdHJUYWcuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
Ci0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0jaW5jbHVkZSA8d3RmL1NlbnRp
bmVsTGlua2VkTGlzdC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IEluc3RydWN0aW9u
OwotCi1jbGFzcyBMTEludENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8TExJbnRDYWxsTGlua0luZm8+IHsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgdW5saW5r
ZWRCaXQgPSAweDE7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbygpID0gZGVmYXVsdDsKLSAgICAK
LSAgICB+TExJbnRDYWxsTGlua0luZm8oKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkp
Ci0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0xpbmtlZCgp
IGNvbnN0IHsgcmV0dXJuICEobV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgJiB1
bmxpbmtlZEJpdCk7IH0KLSAgICAKLQotICAgIHZvaWQgbGluayhWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAgICBy
ZW1vdmUoKTsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpOwotICAgICAgICB2bS53cml0ZUJhcnJpZXIo
b3duZXIsIGNhbGxlZSk7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwot
ICAgIH0KLQotICAgIHZvaWQgdW5saW5rKCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2UgbGluayBp
bnZhbGlkYXRlZC4gSXQgd29ya3MgYmVjYXVzZSBMTEludCB0ZXN0cyB0aGUgZ2l2ZW4gY2FsbGVl
IHdpdGggdGhpcyBwb2ludGVyLiBCdXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMgbGFzdFNlZW5DYWxs
ZWUhCi0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHw9IHVubGlu
a2VkQml0OwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAg
ICAgcmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoIWlzTGlua2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0KTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogbGFzdFNlZW5DYWxs
ZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+
KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYgfnVubGlua2VkQml0KTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKQotICAgIHsKLSAgICAgICAgbV9j
YWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1bmxpbmtlZEJpdDsKLSAgICB9Ci0K
LSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxM
aW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludHB0cl90IG1f
Y2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZVRhcmdldDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
Y29kZS5oCmluZGV4IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFhYzgzOWJkMzYuLjZj
MDczY2Y2NzZhYmQ2ODBiZjNjM2Y3NGMxZTFmMTA0NDg4OWQ3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTEyNiwxMSArMTI2LDE5IEBAIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNl
dENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNybyhPcEdldFByaXZh
dGVOYW1lKSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRSht
YWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9DQUxMX0xJTktfSU5GTyhtYWNy
bykgXAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKKyAgICBt
YWNybyhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwKKyAgICBtYWNybyhP
cEl0ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8o
T3BDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxWYXJhcmdzKSBcCiAgICAgbWFj
cm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBtYWNybyhPcENvbnN0cnVjdFZh
cmFyZ3MpIFwKKworI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1h
Y3JvKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9wSW5CeVZhbCkgXAog
ICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKQEAgLTEzOSw2ICsxNDcsNyBAQCBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRD
b25zdGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8o
T3BFbnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3Bl
cnR5KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwK
IAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUo
bWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6
OmdldE1TQlNldENvbnN0ZXhwcihtCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09CSkVD
VF9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld09iamVjdCkgXAog
Ci0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3Jv
KSBcCi0gICAgbWFjcm8oT3BDYWxsKSBcCi0gICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAgIG1h
Y3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBtYWNybyhPcENvbnN0cnVjdCkgXAotICAgIG1hY3JvKE9w
SXRlcmF0b3JPcGVuKSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmluZSBG
T1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAogICAgIG1h
Y3JvKE9wQWRkKSBcCiAgICAgbWFjcm8oT3BNdWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDBkMTllMjc5MDU2
ZTVmMzdlNzcxYzVjNDlhMmRiMGU2YzJkODQ4ZDcuLmFjNTcxMjdiY2Y4OTA3MmJlMDM4NDE2ZGEx
MzliNDFmMTY0YWU2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtNDAzLDcgKzQwMyw2IEBAIHZvaWQgVW5saW5r
ZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJvZmlsZXModW5zaWduZWQgbnVtQmluYXJ5QXJp
dGhQcm9maWxlcywKIAogI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMg
Kz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENP
REVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5UKQotICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1i
ZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4
dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVu
dHJpZXM8T3BHZXRCeUlkPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCA0MDM5NGE5NDM5OTI5OTNmNTQ1YTJhYzYyY2Y2
ZWRjMDlkZjU1NWZhLi4xYzU5MDQyZTBkMGMzODExYjNjOWJlMjE1OGNkYzU0YzAxZGJiODFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaApAQCAtNzUsNyArNzUsNiBAQCBjbGFzcyBDYWNoZWRDb2RlQmxvY2s7CiAKIHR5cGVkZWYg
dW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25l
ZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxp
bmtlZExMSW50Q2FsbExpbmtJbmZvOwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUg
ewogICAgIHN0cnVjdCBPZmZzZXRMb2NhdGlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKaW5kZXggNWM3MjA1OGRjZjIxOTYwZGNmODUzZTBhOTJj
MjdlODlhMmQ1NmJlZS4uNWUzMmQyZDI0ZjFiM2VkODcwYzMzMGYyZWYyM2Q4NWU0ZWNlNDgzNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAt
MzE1LDYgKzMxNSwxMCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlE
IG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2UgbGxpbnRf
bmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVu
Y3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9saW5rX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxf
dGFpbF9jYWxsX3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVy
bl92YWx1ZToKICAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb246CiAgICAg
Y2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CkBA
IC0zMjUsNiArMzI5LDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9j
YXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF92YXJhcmdzX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzX3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKQEAgLTMz
NSw3ICszNDEsNiBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfY29uc3Ry
dWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93
X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5f
bG9jYXRpb246Ci0gICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CkBAIC0zNDMsOCArMzQ4LDkg
QEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9n
dWU6CiAgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKICAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY2FsbDoKLSAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxs
OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CiAg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW46CiAgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2NhbGxfc2xvdzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCBiNDUxY2RiNjFmN2ExMWIzMzAy
YzE4NWM2NmJmZjE3YTlmZGJlMDlmLi5lNzIyZjllYmRhY2M4OTM2OTA2NTZkNWI2M2U5ZjYyNDQ0
NjE1ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0xNjYsMTAgKzE2NiwxMCBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayog
YmFzZWxpbmVDbwogICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElP
TihvcF9jb25zdHJ1Y3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRh
cmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3MpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdz
OgotICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25z
dHJ1Y3RfdmFyYXJnc19zbG93KTsKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOiB7CiAgICAgICAgICAgICBp
ZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfZ2V0X2J5X2lkKQpAQCAtMjAxLDEw
ICsyMDEsMTIgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
YWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KICAgICAgICAgY2FzZSBJbmxpbmVD
YWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxW
YXJhcmdzOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczog
ewotICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQotICAgICAgICAgICAg
ICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29k
ZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2xvY2sp
OworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGxvY2tlciwgY2FsbEJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExp
bmtJbmZvKTsKLQogICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+ZG9uZUxv
Y2F0aW9uKCkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAppbmRleCA5NTZkNjk0MGU3ZDIwYjgyMDJmMjU1M2VjNWZlNzBiN2U4
ZTllNjBhLi5lNjFmODk0YmUxMDhjY2JmYTEyZGIyMDg5MjllY2RlMmMzZGYwZjI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKQEAgLTg0NywxMCArODQ3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxT
aXRlSW5kZXgoY2FsbFNpdGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpbmZvLT5lbWl0
RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAgIGluZm8tPmVt
aXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17
CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwog
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgp
OwogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBA
IC04OTIsNyArODkyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1Rh
aWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBzY29wZWRMYW1iZGE8
dm9pZCgpPihbJl17CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewog
ICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwog
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CkBAIC05MDAsNyArOTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgfQotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgIH0g
ZWxzZQogICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxl
ZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCmluZGV4IDBmZTdhNzkwOTE1YTcyNGY0ZTFmZmJkOTZiYTE0ZTdhODVjYjhjNzkuLjc3MDcz
ZjM0YWZiZmRmOTVmZTU4MjVhM2M4OTg5YzMyMjNkZGFhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtOTM4LDEwICs5Mzgs
MTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWluUGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAg
ICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKIAotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwpAQCAtOTgxLDcg
Kzk4MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAg
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgc2NvcGVkTGFtYmRhPHZv
aWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkBAIC05ODksNyArOTg5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBtX2ppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOwogICAgICAgICAgICAgfQotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwog
ICAgIH0gZWxzZQogICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0
aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggZTFjODJk
Zjg4MzQxNDkxOTg0YjA5ODM4MWI4MGQ1ZWEzNjcyZDZlYi4uMDE4YTJmODU4ZjQyMTFkMzg3YjQy
YjY5MmUyNWI1MTg2MWJlNGNkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcApAQCAtMTA0MDMsMTAgKzEwNDAzLDEwIEBAIElHTk9SRV9DTEFOR19X
QVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBbJl0geworICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNo
dWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFp
bENhbGwpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwNTU5LDEwICsxMDU1OSwxMCBAQCBJ
R05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZENhbGxMaW5rSW5mbyhjb2Rl
T3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRv
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExh
bWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSkpOwogCiAgICAgICAgICAgICAgICAg
c2xvd1BhdGgubGluaygmaml0KTsKICAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQg
PSBqaXQubGFiZWwoKTsKQEAgLTEwOTAyLDEwICsxMDkwMiwxMCBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsm
XXsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9
IGppdC5qdW1wKCk7CkBAIC0xMTE4MywxMCArMTExODMsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBq
aXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCmluZGV4IGM4Y2JiZWUwNmJmN2Q2NjYyYzE5YTRhNGE4YTE4YzIxY2VmZDNmNzIuLmU2NDU4
NTMxZWJjOTA0ZGU1ZGQwNGNlM2FiYTUzYzViZDNjNzBiMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTc0NSwxOCArNzQ1LDE4IEBAIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXJJbXBsKEdQCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogewogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwg
aW5mbyk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgR1BSSW5mbzo6
cmVnVDIsIGluZm8tPmNhbGxNb2RlKCkpOwogfQogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5m
byogaW5mbykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgQ2FsbE1vZGUg
Y2FsbE1vZGUpCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgbW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxs
IGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwogICAgICAgICBs
aW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9LCAmdm1dICgpIHsKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmly
dHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCAqaW5mbyk7Ci0gICAgICAgICAgICBpbmZv
LT5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRo
dW5rKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxNb2RlKTsKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUo
KSkpOwogICAgICAgICB9KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCmluZGV4IDY1ZGQ4ZWRlZjc0Nzk5NmQ1ZjZkOGYxOTI0NmU2YWQ5MzM2
ZDQ3MzguLmE0NGFhNWNmOTU0ZjJjMTY1NDc5ZWMyZGNkOTIzZDVmZjRmM2QxZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMTc1Miw3ICsxNzUy
LDcgQEAgY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNzZW1ibGVyIHsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCos
IENhbGxMaW5rSW5mbyopOwotICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0ds
b2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIENh
bGxNb2RlKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAg
IHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAppbmRleCAxNTg5NjAzZjE0OWMyNzZjMzU5ZTdiYjI2
ZDY0ZjRkODU3MjdmMTUwLi4zMDAzYjA3MzUwMTg4ZTVmNzNmY2M5NjcyMGQ2YTllNzQxZjhiY2I1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKQEAgLTYy
LDcgKzYyLDYgQEAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKIAogICAgIGVudW0gY2xhc3MgVHlw
ZSA6IHVpbnQ4X3QgewogICAgICAgICBHbG9iYWxPYmplY3QsCi0gICAgICAgIENhbGxMaW5rSW5m
bywKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCiAgICAgICAgIEZ1bmN0aW9uRGVjbCwKICAg
ICAgICAgRnVuY3Rpb25FeHByLApAQCAtOTMsNyArOTIsNiBAQCBjbGFzcyBCYXNlbGluZUpJVENv
ZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CiAgICAgfkJh
c2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOwogICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29k
ZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7
IH0KIAotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CiAgICAgRml4
ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAgICBGaXhl
ZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOwog
ICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcApp
bmRleCBjZjE1Y2UxOTllZDM3NmFmMTUwZTg4N2YzZWVkMDJmYTE1ZGM3YjJhLi41MDJmOWEwNzIx
ZGYxZTMxMDc4ZjY5OWEzY2VlZGY1Mjk3ODkyMWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCiAKQEAg
LTgyLDYgKzgzLDM3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCoKICAgICB9CiB9CiAKK0NhbGxG
cmFtZVNodWZmbGVEYXRhIENhbGxGcmFtZVNodWZmbGVEYXRhOjpjcmVhdGVGb3JCYXNlbGluZU9y
TExJbnRUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgdW5zaWduZWQgbnVtUGFy
YW1ldGVycykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwIH07CisjZW5kaWYKKyAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxl
RGF0YTsKKyAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwor
ICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBudW1QYXJhbWV0ZXJzOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3RlcjsKKyNlbmRpZgorICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IGJ5
dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rl
cik7CisgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKKyAgICAgICAg
c2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFj
ZWRJbkpTU3RhY2soCisgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAorICAgICAgICAgICAgICAgIERhdGFG
b3JtYXRKUyk7CisgICAgfQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2h1ZmZsZURhdGEuY2Fs
bGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgRGF0YUZv
cm1hdEpTKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc2h1ZmZsZURhdGEuY2FsbGVl
ID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBh
eWxvYWRHUFIoKSk7CisjZW5kaWYKKyAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKKyAgICBzaHVmZmxlRGF0YS5zaHJpbmtUb0ZpdCgpOworICAgIHJldHVybiBzaHVm
ZmxlRGF0YTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5o
CmluZGV4IDMzNjU3ZTMzYTY0ZjM3ODFmNDMwOTk4YzEzMzM3MWExYWE2NGI3NWEuLjBiYzE5Yjk5
ZDYxZTRiY2JiNzE5ZWE5ZmNjMWJjOGMzN2ZiZmVjNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKQEAgLTMyLDYgKzMyLDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBPcFRhaWxDYWxsOworCiBzdHJ1Y3QgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAt
NDAsNiArNDIsOCBAQCBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgewogICAgICAgICBhcmdz
LnNocmlua1RvRml0KCk7CiAgICAgfQogCisgICAgc3RhdGljIENhbGxGcmFtZVNodWZmbGVEYXRh
IGNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmLCB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzKTsKKwogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwog
ICAgIHVuc2lnbmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFz
c2VkQXJncyB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggOTI5
NDI0NjA3MzQwMDkxMWI2YzM1N2M3OGE0YTBjNmE3NGU5YWFkNC4uMjhhZTZmNzcwZGRhY2Q3MWM2
ZjE4MmM5ZDE3OWZkMWNjZWI4ZGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAt
MTAxLDEyICsxMDEsOSBAQCBzdGQ6OnR1cGxlPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBKSVQ6OmFkZFVubGluawogICAgIHJldHVybiBzdGQ6
OnR1cGxlIHsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggfTsKIH0KIAotc3RkOjp0dXBsZTxVbmxp
bmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5s
aW5rZWRDYWxsTGlua0luZm8oKQorVW5saW5rZWRDYWxsTGlua0luZm8qIEpJVDo6YWRkVW5saW5r
ZWRDYWxsTGlua0luZm8oKQogewotICAgIHZvaWQqIHVubGlua2VkQ2FsbExpbmtJbmZvSW5kZXgg
PSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV91bmxpbmtlZENh
bGxzLnNpemUoKSkpOwotICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gJm1fdW5saW5r
ZWRDYWxscy5hbGxvYygpOwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvSW5kZXggPSBhZGRUb0NvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxM
aW5rSW5mbywgdW5saW5rZWRDYWxsTGlua0luZm9JbmRleCk7Ci0gICAgcmV0dXJuIHN0ZDo6dHVw
bGUgeyBpbmZvLCBjYWxsTGlua0luZm9JbmRleCB9OworICAgIHJldHVybiAmbV91bmxpbmtlZENh
bGxzLmFsbG9jKCk7CiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTEwMTAsNyArMTAwNyw2
IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IEZp
eGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPihtX3VubGlua2VkQ2FsbHMuc2l6ZSgpKTsK
ICAgICBpZiAobV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMuc2l6ZSgpKQogICAgICAgICBzdGQ6
Om1vdmUobV91bmxpbmtlZENhbGxzLmJlZ2luKCksIG1fdW5saW5rZWRDYWxscy5lbmQoKSwgbV9q
aXRDb2RlLT5tX3VubGlua2VkQ2FsbHMuYmVnaW4oKSk7Ci0gICAgbV9qaXRDb2RlLT5tX2V2YWxD
YWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKICAgICBtX2ppdENv
ZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBGaXhlZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPihtX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSk7CiAgICAgaWYgKG1faml0Q29kZS0+
bV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpCiAgICAgICAgIHN0ZDo6bW92ZShtX3VubGlua2Vk
U3R1YkluZm9zLmJlZ2luKCksIG1fdW5saW5rZWRTdHViSW5mb3MuZW5kKCksIG1faml0Q29kZS0+
bV91bmxpbmtlZFN0dWJJbmZvcy5iZWdpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4
IGRlMmM1Y2U3NzBiYmQ1OTNiN2FlNWZkMWE2NTI2NzM4OTQzZGQ5YTEuLjY3YjQzZDhmYTMwYjcy
Y2JkNDk0NDYyMjhjNjQyOTY0ZjNkMzM1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAt
MTUzLDcgKzE1Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRp
b25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKICAg
ICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOwotICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07
CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKQEAgLTI5
NCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsK
KyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYpOwogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAg
ICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyAgICAgICAg
LCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYpOwogCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2
YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTcw
Niw2ICs3MDUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgog
ICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBj
b25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0
aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZXR1cm5Gcm9tQmFzZWxpbmVHZW5l
cmF0b3IoVk0mKTsKKworICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgICAgIC8vIFRodW5rIGdlbmVyYXRvcnMuCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJik7CkBAIC03MjEsNyArNzI0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hl
Y2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZN
Jik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0m
KTsKIAogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcEdldEZy
b21TY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKQEAgLTk1OCw3ICs5NjAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGFkZFRvQ29u
c3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIp
OwogICAgICAgICBzdGQ6OnR1cGxlPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50PiBhZGRVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKCk7Ci0gICAg
ICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRDYWxsTGlua0luZm8qLCBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50PiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOworICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogYWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsKIAogICAgICAgICBJbnRlcnByZXRl
ciogbV9pbnRlcnByZXRlcjsKIApAQCAtMTAyOSw3ICsxMDMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgVmVjdG9yPEpJVENvbnN0YW50UG9vbDo6VmFsdWU+IG1fY29uc3RhbnRQb29s
OwogICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3Rh
bnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKLSAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CiAgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9z
OwogICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxl
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDA5MTk5MTU4NDY4YzBm
ZTEwMmI1ZGZiZmEyYmU0ZmUxNzMxOTdlMmIuLjU3MTk2MTIxNTYwYTNhMjlhZTNkMjA3MTEzYzYw
ZGNlNjA4MGQ2MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTks
MTcgKzU5LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVl
R1BSIChyZXR1cm5WYWx1ZUdQUjIvcmV0dXJuVmFsdWVHUFIgb24gMzItYml0KS4KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlSlNSKTsKLQotI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOwotICAgIHJldCgpOwotI2Vsc2UKLSAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdl
dENUSVN0dWIob3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpLmNvZGUoKSk7Ci0jZW5kaWYKKyAgICBl
bWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIocmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJh
dG9yKS5jb2RlKCkpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKFZNJikKK3sKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OworCisgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNl
bGluZTogb3BfcmV0X2hhbmRsZXIiKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lk
IEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQpAQCAtODQsNyArODgs
NyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFy
Z3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgdW5zaWduZWQgY2hlY2tw
b2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7CiAgICAgaW50IGFyZ0NvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKQEAgLTk3LDcgKzEwMSw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwgdG1wSlNSKTsKICAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHRtcEpTUik7CiAgICAgICAgIGxvYWQzMihBZGRyZXNz
KHRtcEpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHRtcEdQ
Uik7Ci0gICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVj
dHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBP
cDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNl
dE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAg
IH0KIApAQCAtMTEwLDcgKzExNCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6
Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklU
Ojpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0
ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOwpAQCAtMTYwLDcgKzE2NCw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mCiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1Qy
KTsKLSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZDYWxsTGlua0luZm8oKSwgcmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBD
YWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJl
Z1QzKTsKICAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNl
dE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwpAQCAtMjAzLDY0ICsyMDcsMzkg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAg
IENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgcmVnVDApOwotCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsK
IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWRWYWx1ZShBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbGVlSlNSKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3Zt
LCBpbmZvKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BDYWxsRXZhbDo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAg
ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgY2FsbExpbmtJ
bmZvR1BSLCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wg
SklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCiB7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxs
KGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2Fs
bExpbmtJbmZvQ29uc3RhbnQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFp
bENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4g
c2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOwotICAgIHNo
dWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVE
YXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVy
ID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0jZW5kaWYKLSAgICBzaHVmZmxlRGF0YS0+
bnVtTG9jYWxzID0KLSAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUo
Ynl0ZWNvZGUubV9hcmdjKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUu
bV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQotICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJn
diwKLSAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwotICAgIH0KLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxs
ZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxl
ZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7Ci0jZW5kaWYKLSAgICBzaHVm
ZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0KICAgICBjb25zdGV4cHIgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0lu
Zm9Db25zdGFudCwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBD
YWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1Iu
cGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsICpzaHVmZmxlRGF0YSB9OworICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BUYWlsQ2FsbDo6TWV0YWRhdGE6Om9mZnNl
dE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgSnVtcExpc3Qgc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2Fs
bGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgp
PihbJl17CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhID0gQ2FsbEZy
YW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKGJ5dGVjb2Rl
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOworICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCBzaHVmZmxlRGF0YSB9OwogICAgICAgICBzaHVm
Zmxlci5sb2NrR1BSKGNhbGxMaW5rSW5mb0dQUik7CiAgICAgICAgIHNodWZmbGVyLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwotICAgIH0pOworICAgIH0pKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aHMpOwogCi0gICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7Ci0gICAgaW5mby0+ZnJhbWVT
aHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOwotCiAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjg4LDE3ICsyNjcsMTQg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICAqLwogCiAgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5m
b0NvbnN0YW50ID0gVUlOVF9NQVg7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkg
ewotICAgICAgICBzdGQ6OnRpZShpbmZvLCBpbmZvQ29uc3RhbnQpID0gYWRkVW5saW5rZWRDYWxs
TGlua0luZm8oKTsKKyAgICAgICAgaW5mbyA9IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CiAg
ICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIGlu
Zm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CiAgICAg
ICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0lu
ZGV4KTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRp
b25JbmZvKCkpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25z
dGFudDsKICAgICB9Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFu
dCk7CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUpOwogCiAgICAgLy8gU1AgaG9sZHMg
bmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291
bnQgaW5pdGlhbGl6ZWQuCiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKQEAgLTMxNiwxNiArMjkyLDE2IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUpT
UikpOwogI2VuZGlmCiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBj
YWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxs
KGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENv
bnN0YW50KGluZm9Db25zdGFudCwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlu
a0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZv
R1BSLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRh
aWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxM
aW5rSW5mb0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhj
YWxsTGlua0luZm9HUFIpOwotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aHMpOwogICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7
CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxv
Y2F0aW9uID0gZG9uZUxvY2F0aW9uOwpAQCAtMzQ0LDE1ICszMjAsMTYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmQKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQp
CiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CisgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3Bf
Y2FsbF9ldmFsKTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkNhbGxMaW5rSW5mbygpLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwpAQCAtMzY2LDcgKzM0Myw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAK
ICAgICByZXNldFNQKCk7CiAKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4MDM5ODM2
Y2VlNmM3YjM0ZmQyYzMwNC4uMmZlMjNjNDlmZDBmOTQwOTFmNjg2MDViNzU3YWUyY2UzMjIwMTRh
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0zNzAsMjEg
KzM3MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKLXsKLSAgICBD
Q2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRo
dW5rKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJCYXNlbGluZTogb3BfcmV0X2hhbmRsZXIiKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDBlMmQ3ZDA4Y2ZiNzVmMzI3MWQwNjJi
MDk2YWJiMGMzNWM3ZjFhODUuLjZiY2U3NGFiODJjNTU3ZDAwODUxNTA3ODUxYTA0ZTRlMTQ2MzBj
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAt
NjAsNyArNjAsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
UHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVw
YXRjaC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hp
Y2tlbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiU3VwZXJT
YW1wbGVyLmgiCkBAIC0xNDQ2LDE4NiArMTQ0Niw5IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xv
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgY2FsbGVlRnJhbWUtPnNl
dENvZGVCbG9jayhudWxscHRyKTsKLQotICAgIGlmIChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0
aW9uS2luZCgpID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIGF1dG8gY2FsbERhdGEgPSBnZXRD
YWxsRGF0YSh2bSwgY2FsbGVlKTsKLSAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgIT0gQ2Fs
bERhdGE6OlR5cGU6OkpTKTsKLQotICAgICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0
YTo6VHlwZTo6TmF0aXZlKSB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVl
KGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJu
VmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFs
T2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUpOwotICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxv
d0dDOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgIHZt
LmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAg
ICAgICBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZy
YW1lIDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwotICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxP
YmplY3QsIGNhbGxlZSkpOwotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9y
Q29uc3RydWN0KTsKLQotICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEo
dm0sIGNhbGxlZSk7Ci0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6
VHlwZTo6SlMpOwotCi0gICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlw
ZTo6TmF0aXZlKSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxlZUZyYW1lKTsKLSAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxs
ZWUpKTsKLSAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3RE
YXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBj
YWxsZWVGcmFtZSk7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQq
PihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwot
ICAgIH0KLQotICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6
Ok5vbmUpOwotICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5v
dEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCgKLSAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwotfQotCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNs
b3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKSkKIHsKLSAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxM
aW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghY2FsbExp
bmtJbmZvLT5pc0RpcmVjdCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBj
YWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBKU0NlbGwqIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKLSAgICBpZiAo
IWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7Ci0gICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0
aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUp
KSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29k
ZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKLQotICAgICAgICAgICAgaWYgKCFj
YWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRTZWVuKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua01vbm9tb3Jw
aGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFs
RnVuY3Rpb24sIGNvZGVQdHIpOwotCi0gICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5j
YWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFt
ZSkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBo
YW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBj
YWxsTGlua0luZm8pKTsKLSAgICB9Ci0KLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9
IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRy
OwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvZGVQ
dHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKLSAgICAgICAgaWYgKCFj
b2RlUHRyKQotICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
a2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9
IFsmXSAoKSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNF
bnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rp
b25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0KSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2Fs
bGVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+
YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5k
LCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0gKmNvZGVC
bG9ja1Nsb3Q7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgICAgIEFyaXR5Q2hl
Y2tNb2RlIGFyaXR5OwotICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQotICAgICAgICAgICAgYXJpdHkgPSBN
dXN0Q2hlY2tBcml0eTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNo
ZWNrTm90UmVxdWlyZWQ7Ci0gICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwotICAgIH0KLQotICAgIGlmICghY2FsbExpbmtJbmZv
LT5zZWVuT25jZSgpKQotICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICBlbHNl
Ci0gICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0KLSAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOwotfQotCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJh
bWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotCi0g
ICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVl
Q2FsbGVlKCk7Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxl
ZUFzVmFsdWUpOwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKSB7Ci0g
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNW
YWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7
Ci0gICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRo
ZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJh
bWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLSAgICAKLSAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNl
bGwpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7Ci0g
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwot
ICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKLSAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRs
ZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0
ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2Fs
bChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3Io
Z2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93
RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tT
bG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwotICAgICAgICBmdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
ZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0gICAgfQot
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQotICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhl
Y3V0YWJsZS0+ZW50cnlwb2ludEZvcigKLSAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxM
aW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBL
ZWVwVGhlRnJhbWUpKTsKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwgZ2xvYmFsT2Jq
ZWN0LCBjYWxsTGlua0luZm8pOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uTGlua1BvbHltb3JwaGljQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8pKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXggNTQ4
ZDUxY2RhNGUyYTIxYTkyMTc5YjUxNWY5ODRhZjJjNjhkNmRmYy4uZTQ4MTA5YzJjNzk0YzI2MWUy
Nzc5MjNkNWViODc1MzU0NmEwOGNhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVw
YXRjaC5oIgogCi0jaWYgRU5BQkxFKEpJVCkKLQogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgog
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgiCkBAIC03MSw2ICs2OSwxMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0YXRp
YyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3sKKyAg
ICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2RlKCku
dGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKKyNpZiBFTkFCTEUoSklU
KQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIGxpbmtTbG93UGF0aFRv
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRT
dHViUm91dGluZVB0clRhZz4oKSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbGlua1Nsb3dG
b3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENU
SVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICBsaW5rU2xvd1BhdGhU
byh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworfQorCitzdGF0aWMgSlNDZWxsKiB3
ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAvLyBFYWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJv
bSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJv
cHJpYXRlIG93bmVyLgorICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNh
bGxlZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQorfQorCit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCisgICAgVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLAorICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQoreworICAgIEFTU0VSVCghY2FsbExp
bmtJbmZvLnN0dWIoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1l
LT5jYWxsZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3Ig
YSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUg
dGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5p
c0NlbGwoKSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1l
LT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhh
dmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlN
b2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIo
Y2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKKyAgICBB
U1NFUlQob3duZXIpOworCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Cisg
ICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBj
b2RlUHRyKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBj
YWxsZWUpOworCisgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxv
Y2spKQorICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4o
Y2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2lu
dGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJc
biIpOworCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2Nr
LT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKKworI2lmIEVO
QUJMRShKSVQpCisgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7CisgICAgICAgIGxpbmtT
bG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKK30KKworc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc0Rp
cmVjdCgpKSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29k
ZUJsb2NrKCk7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkp
CisgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyNlbmRp
ZgorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRp
c29uKCkpIHsKKyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNv
ZGVSZWYpOworCisgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKKyAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOworICAgICAgICB9CisgICAg
ICAgIGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBp
bmxpbmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCisgICAgfQor
ICAgIGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKKyAgICBjYWxsTGlua0luZm8uY2xlYXJTdHVi
KCk7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBjYWxsTGlua0lu
Zm8ucmVtb3ZlKCk7Cit9CisKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQoreworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZv
KSk7CisgICAgCisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElMaW5r
Q2FsbCgpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQoreworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKyAgICBpZiAoIWNhbGxlZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPih2bSwgY2FsbGVlKSkKKyAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxs
RW50cnlwb2ludCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIFVOVVNFRF9Q
QVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKKyNlbmRpZgorICAgIHJldHVy
biBudWxscHRyOworfQorCisjaWYgRU5BQkxFKEpJVCkKKwogc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKIHsKICAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX09Q
RVJBVElPTl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9uKTsKQEAgLTE0MzUsNzAgKzE1NDksNiBA
QCB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAogICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKIH0KIAotc3Rh
dGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewot
ICAgIGNhbGxMaW5rSW5mby5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUo
KS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQg
bGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yKQotewotICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0lu
Zm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRh
Zz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCi17Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5m
byk7Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsK
LSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVh
dGUodm0sIHZpcnR1YWxUaHVuaykpOwotfQotCi1zdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93
bmVyKEpTQ2VsbCogY2FsbGVlKQotewotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAvLyBF
YWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJB
c3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVy
LgotICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQotfQotCi12b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCi0gICAgVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVl
Q29kZUJsb2NrLAotICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIo
KSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpOwotICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdo
ZW4gY2FsbGluZwotICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBp
cyBhIGNlbGwuCi0gICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7Ci0K
LSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2so
KTsKLQotICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBD
b2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUt
PmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKLSAgICBBU1NFUlQob3duZXIp
OwotCi0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJ
bmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKLSAg
ICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOwotCi0g
ICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQotICAgICAg
ICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJs
b2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxs
ZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwotCi0gICAg
aWYgKGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21p
bmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKLQotICAgIGlmIChjYWxsTGlua0lu
Zm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFs
bG93U3R1YnMoKSkgewotICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBs
aW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCiB2b2lkIGxp
bmtEaXJlY3RDYWxsKAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCkBAIC0xNTI4LDM1ICsxNTc4LDYgQEAg
dm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXN0YXRp
YyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewotICAg
IGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewotICAgICAgICBjYWxsTGlua0luZm8uY2xl
YXJDb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlz
b24oKSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby5pbml0aWFsaXplRGlyZWN0Q2FsbCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29u
KCkpIHsKLSAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVS
ZWYpOwotCi0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKLSAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOwotICAgICAgICB9Ci0gICAgICAg
IGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxp
bmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCi0gICAgfQotICAg
IGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKLSAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7
Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU2xvd1N0dWIoKTsKLSAgICBpZiAoY2FsbExpbmtJbmZv
LmlzT25MaXN0KCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKLX0KLQotdm9pZCB1
bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0gICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJ
bmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKLSAgICAKLSAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
cmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwotfQotCiBzdGF0aWMgdm9pZCBsaW5r
VmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSgpOwpAQCAtMTU2NSw5ICsxNTg2LDggQEAgc3RhdGljIHZvaWQgbGlua1ZpcnR1
YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0kKICAgICBkYXRhTG9nTG5JZihzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJs
b2NrKSwKICAgICAgICAgIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2lu
KGNhbGxlckNvZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2
aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFs
Q2FsbChjYWxsTGlua0luZm8uY2FsbE1vZGUoKSk7CiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExp
bmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7CiAgICAgY2FsbExp
bmtJbmZvLnNldENsZWFyZWRCeVZpcnR1YWwoKTsKIH0KIApAQCAtMTgwMyw4ICsxODIzLDEwIEBA
IHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgY2FsbHNbY2FzZUluZGV4XS5jb2RlUHRyID0gY29kZVB0cjsKLSAgICAgICAgaWYgKG5lZWRz
RG9uZUp1bXApCisgICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKSB7CisgICAgICAgICAgICBBU1NF
UlQoIWlzRGF0YUlDKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsK
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKQEAg
LTE4MjgsMTUgKzE4NTAsMjggQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICB9CiAgICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBH
UFJJbmZvOjpyZWdUMyk7CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGlmIChpc0RhdGFJQyAm
JiAhY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAgICAvLyBXZSB3ZXJlIGNhbGxl
ZCBmcm9tIHRoZSBmYXN0IHBhdGgsIGdldCByaWQgb2YgYW55IHJlbW5hbnRzIG9mIHRoYXQKLSAg
ICAgICAgLy8gd2hpY2ggbWF5IGV4aXN0LiBUaGlzIHJlYWxseSBvbmx5IG1hdHRlcnMgZm9yIHg4
Niwgd2hpY2ggYWRqdXN0cwotICAgICAgICAvLyBTUCBmb3IgY2FsbHMuCi0gICAgICAgIHN0dWJK
aXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Q0KTsKKworICAg
IC8vIDEuIElmIGl0IGlzIG5vdCBEYXRhSUMsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRpbmcg
dGhlIGRvbmVMb2NhdGlvbi4KKyAgICAvLyAyLiBJZiBpdCBpcyB0YWlsLWNhbGwsIGxpbmtSZWdp
c3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbiBmb3Igc2xvdy1jYWxsIGNhc2Uu
IEJ1dCBzaW5jZSB3ZSBhcmUgbm90IGV4ZWN1dGluZyBwcmVwYXJlRm9yVGFpbENhbGwsIHdlIHN0
aWxsIHN0YWNrIGVudHJpZXMgZm9yIHRoZSBjYWxsZXIncyBmcmFtZS4KKyAgICAvLyAzLiBJZiB3
ZSdyZSBhIGRhdGEgSUMsIHRoZW4gdGhlIHJldHVybiBhZGRyZXNzIGlzIGFscmVhZHkgY29ycmVj
dAorICAgIC8vIFRodXMgd2UgbmVlZCB0byBwdXQgaXQgZm9yIHRoZSBzbG93LXBhdGggY2FsbC4K
KyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0
YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgc3R1YkppdC5yZXN0b3Jl
UmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGFyZSBub3QgZG9pbmcgYSByZWFsIHRhaWwtY2FsbCBpbiB0
aGlzIGNhc2UuIFdlIGxlYXZlIHN0YWNrIGVudHJpZXMgaW4gdGhlIGNhbGxlciwgYW5kIHdlIGFy
ZSBub3QgcnVubmluZyBwcmVwYXJlRm9yVGFpbENhbGwsIHRodXMsCisgICAgICAgIC8vIHdlIHdp
bGwgcmV0dXJuIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgdGhlIGNhbGxlZSBmaW5pc2hlcy4gV2Ugc2hv
dWxkIG1ha2UgaXQgYSByZWFsIHRhaWwtY2FsbCBmb3IgdGhpcyBzbG93IHBhdGggY2FzZS4KKyAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgICAgICAgICAgLy8gSXQgbmVlZHMgdG8gYmUgTExJbnQgb3IgQmFzZWxpbmUgc2luY2Ug
d2UgYXJlIHVzaW5nIHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvci4KKyAgICAgICAgICAgIGlm
ICghaXNXZWJBc3NlbWJseSkKKyAgICAgICAgICAgICAgICBBU1NFUlQoIUpJVDo6aXNPcHRpbWl6
aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSk7CisjZW5kaWYKKyAgICAgICAgICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihK
SVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJs
ZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgIHN0dWJKaXQucmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOworICAgICAgICB9CiAg
ICAgfQotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUklu
Zm86OnJlZ1Q0KTsKLSAgICAKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93
ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
c3R1YkppdCwgb3duZXIsIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwpAQCAtMTg1OCw4ICsxODkzLDEwIEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsCiAjZW5kaWYKICAgICB9CiAKLSAgICBpZiAoIWRvbmUuZW1wdHkoKSkKKyAgICBpZiAo
IWRvbmUuZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGF0YUlDKTsKICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkpOworICAgIH0K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRy
VGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpKSk7CiAgICAgCiAgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUoCkBAIC0yMDAxLDIzICsyMDM4LDYgQEAgdm9pZCByZXNldFNl
dFByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQogICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQotewotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKLSAgICBpZiAoIWNhbGxlZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
aWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
IChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24q
Pih2bSwgY2FsbGVlKSkKLSAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlw
b2ludCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVOVVNFRF9QQVJBTShr
aW5kKTsKLSAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKICNlbmRpZgotICAgIHJldHVybiBudWxs
cHRyOwotfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5oCmluZGV4IGVjZTM3N2VlMTBhMmVmODRhMjNkOWVjMmRkNDhjZjY4ZDc5Yzdk
ZTkuLjkzYTAzNjUzMjZhYmZiZWRlZTA1NzU4OWM0NTQwOWIyZWIzNjU4OTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpZiBFTkFCTEUoSklUKQotCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisKIGVudW0gY2xhc3MgR2V0QnlL
aW5kIHsKICAgICBCeUlkLAogICAgIEJ5VmFsLApAQCAtODcsNSArODcsMyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIoVk0mLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaQogCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaElubGlu
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaElubGluZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yZWZlN2IxYjMzNzY0YmRmNDJiMmU0ZjAyZDRkZjBjZDllODFjNDllCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoSW5saW5lcy5oCkBAIC0w
LDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZXBhdGNoLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVl
LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhudWxscHRyKTsKKworICAgIGlmIChjYWxsTGlu
a0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgIGF1
dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0YSh2bSwgY2FsbGVlKTsKKyAgICAgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6OkpTKTsKKworICAgICAgICBpZiAoY2FsbERh
dGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7CisgICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsZWVGcmFtZSk7CisgICAgICAgICAgICBjYWxs
ZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOworICAgICAgICAgICAgdm0uZW5j
b2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmpl
Y3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUpOworICAgICAgICAgICAg
RGlzYWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAg
ICAgICAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgICAgICAgICBMTEludDo6Z2V0SG9z
dENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
KyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNh
bGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1l
KSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0
YTo6VHlwZTo6Tm9uZSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgIH0KKwor
ICAgIEFTU0VSVChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JD
b25zdHJ1Y3QpOworCisgICAgYXV0byBjb25zdHJ1Y3REYXRhID0gZ2V0Q29uc3RydWN0RGF0YSh2
bSwgY2FsbGVlKTsKKyAgICBBU1NFUlQoY29uc3RydWN0RGF0YS50eXBlICE9IENhbGxEYXRhOjpU
eXBlOjpKUyk7CisKKyAgICBpZiAoY29uc3RydWN0RGF0YS50eXBlID09IENhbGxEYXRhOjpUeXBl
OjpOYXRpdmUpIHsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bGVlRnJhbWUpOworICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxl
ZSkpOworICAgICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNh
bGxlZUZyYW1lKTsKKyAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KAorICAgICAgICAgICAgICAgIHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5
cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CisgICAgfQorCisgICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlw
ZSA9PSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxs
ZWUpKTsKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICB2bS5nZXRDVElUaHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgU2xvd1BhdGhSZXR1cm5UeXBlIGxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pCit7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsZWVGcmFtZS0+Y2FsbGVyRnJh
bWUoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQgPSBjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBSRUxFQVNFX0FT
U0VSVCghY2FsbExpbmtJbmZvLT5pc0RpcmVjdCgpKTsKKworICAgIEpTVmFsdWUgY2FsbGVlQXNW
YWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOworICAgIEpTQ2Vs
bCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwor
ICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpIHsKKyAgICAgICAgaWYgKGF1dG8qIGludGVy
bmFsRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVl
QXNWYWx1ZSkpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2lu
ZCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghIWNvZGVQdHIpOworCisgICAgICAgICAg
ICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFNlZW4oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaW5r
TW9ub21vcnBoaWNDYWxsKHZtLCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgbnVsbHB0ciwg
aW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7CisKKyAgICAgICAgICAgIHZvaWQqIGxpbmtlZFRh
cmdldCA9IGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlu
a0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2Vl
cFRoZUZyYW1lKSk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxlZUFz
VmFsdWUsIGNhbGxMaW5rSW5mbykpOworICAgIH0KKworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTU2NvcGUq
IHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOworICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG51bGxwdHI7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAg
ICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBraW5kLCBjYWxsZWUpOworICAgICAg
ICBpZiAoIWNvZGVQdHIpCisgICAgICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKworICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhj
ZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0
Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxp
dHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0
cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKKyAgICAgICAgICAgIHJldHVybiBo
YW5kbGVUaHJvd0V4Y2VwdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgQ29kZUJsb2NrKiog
Y29kZUJsb2NrU2xvdCA9IGNhbGxlZUZyYW1lLT5hZGRyZXNzT2ZDb2RlQmxvY2soKTsKKyAgICAg
ICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0
YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsK
KworICAgICAgICBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKKyAgICAgICAgQVNTRVJUKGNv
ZGVCbG9jayk7CisKKyAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CisgICAgICAgIGlmIChj
YWxsZWVGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJh
cmdzKCkpCisgICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OworICAgICAgICBlbHNl
CisgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAgY29k
ZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7Cisg
ICAgfQorCisgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCisgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0U2VlbigpOworICAgIGVsc2UKKyAgICAgICAgbGlua01vbm9tb3JwaGljQ2Fs
bCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2Rl
UHRyKTsKKworICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0g
Q2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Cit9CisKK0FM
V0FZU19JTkxJTkUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQorewor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
ID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgSlNWYWx1ZSBjYWxsZWVBc1Zh
bHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7CisgICAgY2FsbGVl
QXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOworICAgIGlmIChV
TkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKSB7CisgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CisgICAgICAgICAgICBBU1NFUlQo
ISFjb2RlUHRyKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVj
dXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNh
bGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1l
KSk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhh
bmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxlZUFzVmFsdWUsIGNh
bGxMaW5rSW5mbykpOworICAgIH0KKworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0
PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgSlNTY29wZSogc2NvcGUg
PSBmdW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKFVOTElLRUxZKCFleGVjdXRh
YmxlLT5oYXNKSVRDb2RlRm9yKGtpbmQpKSkgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOworCisgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkg
eworICAgICAgICAgICAgdm9pZCogdGhyb3dUYXJnZXQgPSB2bS5nZXRDVElUaHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhyb3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9OworCisgICAgICAgIGlmICghaXNDYWxsKGtp
bmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVj
dEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkgeworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9i
YWxPYmplY3QsIGZ1bmN0aW9uKSk7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNl
cHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3Qg
PSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7CisgICAgICAgIGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBmdW5j
dGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpKTsKKyAgICB9CisgICAg
Ly8gRklYTUU6IFN1cHBvcnQgd2FzbSBJQy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzM5CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKAorICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJ
bmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBU
aGVGcmFtZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCAyOTcxNDdlMWM0YzA4ZGNjZDVmN2I3
ODY0MTFkODU1YjJhMWRlNDdjLi5kYmQ1YWJkMzc4OGQ3MWI4MDMwNWJiODUxZmJjYzI3MTNlODdi
MDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CkBAIC0zNDQsNDggKzM0NCwyNSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbChWTSYgdm0pCiAgICAgcmV0dXJu
IHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlJlZ3VsYXIsIENvZGVGb3JDYWxsKTsKIH0K
IAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRo
dW5rRm9yUmVndWxhckNvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAgcmV0dXJuIHZpcnR1YWxUaHVu
a0Zvcih2bSwgQ2FsbE1vZGU6OlJlZ3VsYXIsIENvZGVGb3JDb25zdHJ1Y3QpOwotfQotCiBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JU
YWlsQ2FsbChWTSYgdm0pCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1v
ZGU6OlRhaWwsIENvZGVGb3JDYWxsKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdChWTSYgdm0pCi17
Ci0gICAgcmV0dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OlRhaWwsIENvZGVGb3JD
b25zdHJ1Y3QpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiB2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsKFZNJiB2bSkKLXsKLSAgICByZXR1cm4g
dmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6Q29uc3RydWN0LCBDb2RlRm9yQ2FsbCk7Ci19
Ci0KIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxU
aHVua0ZvckNvbnN0cnVjdENvbnN0cnVjdChWTSYgdm0pCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxU
aHVua0Zvcih2bSwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNvbnN0cnVjdCk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5r
Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0sIENhbGxN
b2RlIGNhbGxNb2RlKQogewotICAgIGF1dG8gbW9kZSA9IGNhbGxMaW5rSW5mby5jYWxsTW9kZSgp
OwotICAgIGF1dG8ga2luZCA9IGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAg
ICBhdXRvIGdlbmVyYXRvciA9IFsmXSAoKSAtPiBUaHVua0dlbmVyYXRvciB7Ci0gICAgICAgIHN3
aXRjaCAobW9kZSkgeworICAgICAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7CiAgICAgICAgIGNhc2Ug
Q2FsbE1vZGU6OlJlZ3VsYXI6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7Ci0gICAg
ICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNvbnN0cnVjdDsKKyAgICAgICAg
ICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKICAgICAgICAgY2FzZSBDYWxs
TW9kZTo6VGFpbDoKLSAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAg
ICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsKLSAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0OworICAgICAgICAgICAgcmV0dXJuIHZp
cnR1YWxUaHVua0ZvclRhaWxDYWxsOwogICAgICAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6
Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbDsKICAgICAgICAgICAgIHJldHVybiB2
aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5oCmluZGV4IDBmOWY2ZTJkMzZmNmRkMjNlMTg3MjZhY2U2MzE0YTMwYTIw
MWRiY2UuLmFiN2NmNjZjNDIxNTFlZTAxOTU4YzFhYjIyZjI5ZmNkOGRkNzAxNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAtNDksNyArNDksNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSYp
OwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxU
aHVua0ZvcihWTSYsIENhbGxMaW5rSW5mbyYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mLCBDYWxsTW9kZSk7CiAKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSYp
OwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBuYXRpdmVDb25zdHJ1Y3RH
ZW5lcmF0b3IoVk0mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAK
aW5kZXggZThkYWZmN2Q4OGIzMGM2YmY4NDcyMzE0YmUyZjFjNzk2MGYyNDdmNS4uZDBiMzczODky
MWE0ZjAwMTUxMmU3ZGVlM2E4NDQzYzUxOTNiZDI2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RGF0YS5jcHAKQEAgLTU4LDYgKzU4LDcgQEAgZXh0ZXJuICJDIiB2b2lkIHdh
c21fZW50cnkodm9pZCosIHZvaWQqLCB2b2lkKik7CiBleHRlcm4gIkMiIHZvaWQgdm1FbnRyeVRv
SmF2YVNjcmlwdFRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0Vu
dHJ5VHJhbXBvbGluZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCB0YWlsQ2FsbEpTRW50cnlTbG93
UGF0aFRyYW1wb2xpbmUodm9pZCk7CitleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxXaXRob3V0VW50
YWdKU0VudHJ5VHJhbXBvbGluZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCBleGNlcHRpb25IYW5k
bGVyVHJhbXBvbGluZSh2b2lkKTsKIGV4dGVybiAiQyIgdm9pZCByZXR1cm5Gcm9tTExJbnRUcmFt
cG9saW5lKHZvaWQpOwogI2VuZGlmCkBAIC0xNTMsNyArMTU0LDcgQEAgdm9pZCBpbml0aWFsaXpl
KCkKICAgICB7CiAgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CiAgICAgICAgIGlmIChP
cHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0KGNyZWF0ZVRh
aWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnKSk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVj
dChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4oJnRhaWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0Nv
bmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpT
RW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
QEAgLTE2MSwxMSArMTYyLDE5IEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCi0g
ICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVNs
b3dQYXRoUHRyVGFnKSk7CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVhdGVUYWls
Q2FsbEdhdGUoSlNFbnRyeVB0clRhZywgdHJ1ZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0YWdD
b2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4oJnRh
aWxDYWxsSlNFbnRyeVNsb3dQYXRoVHJhbXBvbGluZSkpKSk7CiAgICAgICAgIGdfanNjQ29uZmln
LmxsaW50LmdhdGVNYXBbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdhdGU6OnRhaWxDYWxsSlNFbnRy
eVNsb3dQYXRoUHRyVGFnKV0gPSBjb2RlUmVmLmdldCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpOwogICAgIH0KKyAgICB7CisgICAgICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4+IGNvZGVSZWY7CisgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgICAgIGNvZGVSZWYuY29uc3RydWN0
KGNyZWF0ZVRhaWxDYWxsR2F0ZShKU0VudHJ5UHRyVGFnLCBmYWxzZSkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0
aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3MocmV0YWdDb2RlUHRyPHZvaWQqLCBDRnVuY3Rpb25QdHJUYWcsIE5hdGl2ZVRvSklUR2F0
ZVB0clRhZz4oJnRhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUpKSkpOworICAg
ICAgICBnX2pzY0NvbmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRl
Ojp0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlQdHJUYWcpXT0gY29kZVJlZi5nZXQoKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICB9CiAgICAgewogICAgICAgICBzdGF0aWMgTGF6
eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJU
YWc+PiBjb2RlUmVmOwogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCAxYTk1ZDFkZDBl
YTVlZjM0MzEwNjE1YjY5MWViYzlhMWVhYjgyYTZhLi5mOWQxZGI1YTQ2OTM0YzY2NzE2ZWY2NzU4
MGE1YzVhMjI4YzFkNGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU2hhZG93Q2hpY2tlbi5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1
ZGUgIlZNSW5saW5lcy5oIgpAQCAtNTgyLDYgKzU4MywxNyBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzdGFja19jaGVjaykKICAgICBMTElOVF9SRVRVUk5fVFdPKHBjLCBjYWxsRnJhbWUpOwogfQog
CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF9saW5rX2NhbGwoQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgSlNDZWxsKiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvLCBKU0NlbGwqKQoreworICAgIHJldHVybiBsaW5rRm9yKGNhbGxlZUZyYW1lLCBqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBjYWxsTGlua0luZm8pOworfQorCitl
eHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF92aXJ0dWFsX2NhbGwoQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgSlNDZWxsKiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvLCBKU0NlbGwqKQoreworICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25v
cmVkOworICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGpzQ2FzdDxKU0dsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCksIGNhbGxlZUZyYW1lLCBjYWxsTGlua0luZm8sIGNhbGxlZUFz
RnVuY3Rpb25DZWxsSWdub3JlZCk7Cit9CisKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9uZXdfb2JqZWN0KQogewogICAgIExMSU5UX0JFR0lOKCk7CkBAIC0xODE5LDcgKzE4MzEsOCBA
QCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLAogICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENh
bGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJl
dHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmds
b2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKICAgICAgICAgICAgIERpc2FsbG93R0MgZGlz
YWxsb3dHQzsKLSAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2Fs
bGVlRnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgIGF1dG8q
IGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3Rl
cnM7CisgICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlclNQ
LCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIHNsb3dQYXRoTG9nKCJDYWxsIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjogIiwgY2FsbGVl
LCAiXG4iKTsKQEAgLTE4MzgsNyArMTg1MSw4IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUg
aGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBjYWxsZWUsCiAg
ICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAg
IHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUpOwog
ICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7Ci0gICAgICAgIExMSU5UX0NBTExfUkVUVVJO
KGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVl
RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsK
KyAgICAgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6
OnNpemVJblJlZ2lzdGVyczsKKyAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0
LCBjYWxsZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgIH0KICAgICAKICAg
ICBzbG93UGF0aExvZygiQ29uc3RydWN0b3IgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAiLCBj
YWxsZWUsICJcbiIpOwpAQCAtMTg0Nyw3ICsxODYxLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJu
VHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxl
ZSwKICAgICBMTElOVF9DQUxMX1RIUk9XKGdsb2JhbE9iamVjdCwgY3JlYXRlTm90QUNvbnN0cnVj
dG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsKIH0KIAotaW5saW5lIFNsb3dQYXRoUmV0
dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kLCBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUsIExMSW50Q2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBudWxscHRyKQoraW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENh
bGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBK
U1ZhbHVlIGNhbGxlZUFzVmFsdWUpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxs
ZWVGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CkBAIC0xODU5LDE3ICsxODczLDEyIEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVT
cGVjaWFsaXphdGlvbktpCiAgICAgCiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9
IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCkgewotICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgeworICAgICAgICBpZiAo
Y2FsbGVlQXNWYWx1ZS5pbmhlcml0czxJbnRlcm5hbEZ1bmN0aW9uPih2bSkpIHsKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyID0gdm0uZ2V0
Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7CiAgICAgICAgICAgICBBU1NF
UlQoISFjb2RlUHRyKTsKLQotICAgICAgICAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NM
T1cgJiYgY2FsbExpbmtJbmZvKSB7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjYWxsZXJDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5saW5rKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGludGVybmFsRnVuY3Rpb24sIGNvZGVQ
dHIpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNF
bnRyeVB0clRhZz4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIExM
SU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBjYWxsZXJT
UCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAg
ICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoY2FsbGVlRnJh
bWUsIGNhbGxlZUFzVmFsdWUsIGtpbmQpKTsKICAgICB9CkBAIC0xOTA0LDc0ICsxOTEzLDkgQEAg
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2kKICAgICB9CiAKICAgICBBU1NFUlQoISFjb2RlUHRyKTsK
LSAgICAKLSAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8p
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjYWxsZXJDb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBj
YWxsZWUsIGNvZGVQdHIpOwotICAgICAgICBpZiAoY29kZUJsb2NrKQotICAgICAgICAgICAgY29k
ZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKLSAgICB9
Ci0KICAgICBhc3NlcnRJc1RhZ2dlZFdpdGg8SlNFbnRyeVB0clRhZz4oY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpKTsKLSAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxl
ZUZyYW1lLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJp
Y0NhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lLCBPcCYmIGJ5
dGVjb2RlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIHVuc2lnbmVkIGNoZWNrcG9pbnRJ
bmRleCA9IDApCi17Ci0gICAgLy8gVGhpcyBuZWVkcyB0bzoKLSAgICAvLyAtIFNldCB1cCBhIGNh
bGwgZnJhbWUuCi0gICAgLy8gLSBGaWd1cmUgb3V0IHdoYXQgdG8gY2FsbCBhbmQgY29tcGlsZSBp
dCBpZiBuZWNlc3NhcnkuCi0gICAgLy8gLSBJZiBwb3NzaWJsZSwgbGluayB0aGUgY2FsbCdzIGlu
bGluZSBjYWNoZS4KLSAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRy
ZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KLSAgICAKLSAgICBKU1ZhbHVlIGNh
bGxlZUFzVmFsdWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgY2FsbGVlRm9yKGJ5dGVjb2RlLCBj
aGVja3BvaW50SW5kZXgpKTsKLSAgICAKLSAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2Fs
bEZyYW1lIC0gc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9p
bnRJbmRleCk7Ci0gICAgCi0gICAgY2FsbGVlRnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50
SW5kZXgpKTsKLSAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSkgPSBjYWxsZWVBc1ZhbHVlOwotICAgIGNhbGxlZUZyYW1lLT5z
ZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwotICAgIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICByZXR1cm4gc2V0VXBDYWxsKGNhbGxlZUZy
YW1lLCBraW5kLCBjYWxsZWVBc1ZhbHVlLCAmY2FsbExpbmtJbmZvRm9yKG1ldGFkYXRhLCBjaGVj
a3BvaW50SW5kZXgpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGwp
Ci17Ci0gICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxs
KGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwot
fQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsKQotewotICAgIExM
SU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwot
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ss
IGNhbGxGcmFtZSwgcGMtPmFzPE9wVGFpbENhbGw+KCksIENvZGVGb3JDYWxsKSk7Ci19Ci0KLUxM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3QpCi17Ci0gICAgTExJTlRfQkVH
SU5fTk9fU0VUX1BDKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZy
YW1lLCBwYy0+YXM8T3BDb25zdHJ1Y3Q+KCksIENvZGVGb3JDb25zdHJ1Y3QpKTsKLX0KLQotTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCkKLXsKLSAgICBM
TElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZy
YW1lLCBwYy0+YXM8T3BJdGVyYXRvck9wZW4+KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yT3Bl
bjo6c3ltYm9sQ2FsbCkpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaXRl
cmF0b3JfbmV4dF9jYWxsKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGdsb2JhbE9iamVjdCk7Ci0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2Vu
ZXJpY0NhbGwoY29kZUJsb2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcEl0ZXJhdG9yTmV4dD4oKSwg
Q29kZUZvckNhbGwsIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dCkpOworICAgIGF1dG8qIGNh
bGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnM7
CisgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZXJTUCwgY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MpCkBAIC0yMDQzLDggKzE5ODcs
OCBAQCBlbnVtIGNsYXNzIFNldEFyZ3VtZW50c1dpdGggewogICAgIEN1cnJlbnRBcmd1bWVudHMK
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2
YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKiBwYywg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBTZXRBcmd1bWVudHNXaXRoIHNldCkKK3RlbXBs
YXRlPHR5cGVuYW1lIE9wLCBTZXRBcmd1bWVudHNXaXRoIHNldD4KK2lubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbiogcGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpCiB7CiAgICAgTExJTlRfQkVHSU5fTk9f
U0VUX1BDKCk7CiAKQEAgLTIwNTMsMTEgKzE5OTcsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSB2YXJhcmdzU2V0dXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9u
KgogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3MgdG8gY2Fs
bCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7
CiAgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fY2FsbGVlKTsKIAogICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSB2bS5uZXdDYWxs
RnJhbWVSZXR1cm5WYWx1ZTsKLQotICAgIGlmIChzZXQgPT0gU2V0QXJndW1lbnRzV2l0aDo6T2Jq
ZWN0KSB7CisgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2bS52YXJh
cmdzTGVuZ3RoICsgMTsKKyAgICBpZiBjb25zdGV4cHIgKHNldCA9PSBTZXRBcmd1bWVudHNXaXRo
OjpPYmplY3QpIHsKICAgICAgICAgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fYXJndW1l
bnRzKSwgYnl0ZWNvZGUubV9maXJzdFZhckFyZywgdm0udmFyYXJnc0xlbmd0aCk7CiAgICAgICAg
IExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGdsb2JhbE9iamVjdCk7CiAgICAgfSBlbHNlCkBA
IC0yMDY3LDI3ICsyMDEyLDMwIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmFyYXJnc1Nl
dHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBjYWxsZWVG
cmFtZS0+dW5jaGVja2VkUihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkg
PSBjYWxsZWVBc1ZhbHVlOwogICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7CiAKLSAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBr
aW5kLCBjYWxsZWVBc1ZhbHVlKSk7CisgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8udXBkYXRl
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OworCisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6
OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9SRVRVUk5fVFdPKHBjLCBjYWxsZXJTUCk7CiB9
CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpCiB7Ci0gICAg
cmV0dXJuIHZhcmFyZ3NTZXR1cDxPcENhbGxWYXJhcmdzPihjYWxsRnJhbWUsIHBjLCBDb2RlRm9y
Q2FsbCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVw
PE9wQ2FsbFZhcmFyZ3MsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywg
Q29kZUZvckNhbGwpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9j
YWxsX3ZhcmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsVmFyYXJn
cz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7
CisgICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsVmFyYXJncywgU2V0QXJndW1lbnRz
V2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiB7Ci0g
ICAgcmV0dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oY2FsbEZy
YW1lLCBwYywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6OkN1cnJlbnRBcmd1bWVudHMp
OworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIFNl
dEFyZ3VtZW50c1dpdGg6OkN1cnJlbnRBcmd1bWVudHM+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JD
YWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF92YXJh
cmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDb25zdHJ1Y3RWYXJhcmdzPihjYWxs
RnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0LCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOwor
ICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDb25zdHJ1Y3RWYXJhcmdzLCBTZXRBcmd1bWVudHNX
aXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCiBpbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiByZXR1cm5Qb2ludCkKQEAgLTIxMTAsNyArMjA1OCw4IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3Ry
dWN0aW9uCiAgICAgCiAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVl
OjplbmNvZGUoZXZhbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBieXRlY29kZS5tX2VjbWFN
b2RlKSk7CiAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgIExMSU5UX0NBTExfUkVUVVJO
KGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVl
RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsK
KyAgICBhdXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6
ZUluUmVnaXN0ZXJzOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVy
U1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKIH0KICAgICAKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5oCmluZGV4IGUyMGEwZGZjNmI4N2FjZDYyMjY4ZTg4YWE2YWE5NjRm
YjZlMDliNjYuLmQ0MzhmY2IzMzlkYWZlMzdhM2MxNDFkYmUyNGE2YWQyMTEyOWJiOGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCkBAIC0zOCw2ICsz
OCw4IEBAIG5hbWVzcGFjZSBMTEludCB7CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBl
IGxsaW50X3RyYWNlX29wZXJhbmQoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQg
ZnJvbVdoZXJlLCBpbnQgb3BlcmFuZCkgUkVGRVJFTkNFRF9GUk9NX0FTTTsKIGV4dGVybiAiQyIg
U2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX3ZhbHVlKENhbGxGcmFtZSosIGNvbnN0IElu
c3RydWN0aW9uKiwgaW50IGZyb21XaGVyZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIFJFRkVS
RU5DRURfRlJPTV9BU007CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF9saW5r
X2NhbGwoQ2FsbEZyYW1lKiwgSlNDZWxsKiwgQ2FsbExpbmtJbmZvKiwgSlNDZWxsKik7CitleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF92aXJ0dWFsX2NhbGwoQ2FsbEZyYW1lKiwg
SlNDZWxsKiwgQ2FsbExpbmtJbmZvKiwgSlNDZWxsKik7CiBleHRlcm4gIkMiIHZvaWQgbGxpbnRf
d3JpdGVfYmFycmllcl9zbG93KENhbGxGcmFtZSosIEpTQ2VsbCopIFJFRkVSRU5DRURfRlJPTV9B
U00gV1RGX0lOVEVSTkFMOwogCiAjZGVmaW5lIExMSU5UX1NMT1dfUEFUSF9ERUNMKG5hbWUpIFwK
QEAgLTExOSw5ICsxMjEsNiBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuYyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX25ld19hc3luY19mdW5jX2V4cCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3NldF9mdW5jdGlvbl9uYW1lKTsKLUxMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfY2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3RhaWxfY2FsbCk7Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2NvbnN0cnVjdCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3NpemVf
ZnJhbWVfZm9yX3ZhcmFyZ3MpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJkX2FyZ3VtZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYXJncyk7CkBAIC0xMzEsOCArMTMwLDYgQEAgTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncyk7CiBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbCk7CiBMTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbF93aWRlMTYpOwogTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTMyKTsKLUxMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsKTsKLUxM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsKTsK
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdGVhcl9vZmZfYXJndW1lbnRz
KTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3RyY2F0KTsKIExMSU5U
X1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCmluZGV4IDQ2MmNiZmJlNGUzNDU2
ODQ1ZTA1YWE4YmMwYzQ4MTE1M2NiYjhkMGEuLjE2MDNjMmM3ODU0Yzk5OWJlOWU2YzU3MDUzMzZj
ZmY3NDI3MjkwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFRodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtz
LmNwcApAQCAtMzQ2LDkgKzM0Niw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+IGNyZWF0ZUpTR2F0ZVRodW5rKHZvaWQqIHBvaW50ZXIsIFB0CiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QzLCB0YWcpOwot
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5m
bzo6cmVnVDMpOwotICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QzLCBPcGVyYXRpb25QdHJU
YWcpOworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1Q1LCB0YWcpOworICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgR1BSSW5mbzo6cmVnVDUpOworICAg
IGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1Q1LCBPcGVyYXRpb25QdHJUYWcpOwogCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50ICVzIGNhbGwgZ2F0ZSB0aHVuayIsIG5hbWUp
OwpAQCAtMzY2LDEzICszNjYsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz4gY3JlYXRlV2FzbUdhdGVUaHVuayh2b2lkKiBwb2ludGVyLAogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTElu
dCAlcyB3YXNtIGNhbGwgZ2F0ZSB0aHVuayIsIG5hbWUpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRh
ZykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRh
aWxDYWxsR2F0ZShQdHJUYWcgdGFnLCBib29sIHVudGFnKQogewogICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKLSAgICBqaXQudW50YWdQdHIoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBBUk02NFJlZ2lz
dGVyczo6bHIpOwotICAgIGppdC52YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjps
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdU
MCwgdGFnKTsKKyAgICBpZiAodW50YWcpIHsKKyAgICAgICAgaml0LnVudGFnUHRyKEdQUkluZm86
OmFyZ3VtZW50R1BSMiwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICAgICAgaml0LnZhbGlkYXRl
VW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwor
ICAgIH0KKyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjphcmd1bWVudEdQUjcsIHRhZyk7CiAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpMTEludFRodW5rKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAiTExJbnQgdGFpbCBjYWxsIGdhdGUgdGh1bmsi
KTsKQEAgLTU3Myw4ICs1NzUsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gcmV0dXJuTG9jYXRpb25UaHVuayhPcGNvZGVJRCBvcGNvZGVJRCwgT3BjbwogICAgIExMSU5U
X1JFVFVSTl9MT0NBVElPTihvcF9pdGVyYXRvcl9vcGVuKQogICAgIExMSU5UX1JFVFVSTl9MT0NB
VElPTihvcF9pdGVyYXRvcl9uZXh0KQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25z
dHJ1Y3QpCi0gICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2NhbGxfdmFyYXJnc19zbG93KQot
ICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93KQorICAg
IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3MpCisgICAgTExJTlRfUkVUVVJO
X0xPQ0FUSU9OKG9wX2NvbnN0cnVjdF92YXJhcmdzKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElP
TihvcF9nZXRfYnlfaWQpCiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX2dldF9ieV92YWwp
CiAgICAgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG9wX3B1dF9ieV9pZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKaW5kZXggYjg3YzQyMGNiZTQwMmExZjBjZjA4Njgx
MDdiNWFmZDZkYmNmNTRhYy4uMDVlYzYwMWMwMTY0Y2I5NTRiNzNhMjFjNzM1MWZmMDEwZmVhNzEw
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmgKQEAgLTg4LDcg
Kzg4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gaml0
Q2FnZVB0clRodW5rKCk7CiAjaWYgQ1BVKEFSTTY0RSkKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZUpTR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNv
bnN0IGNoYXIqKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCosIFB0clRhZywgY29uc3QgY2hhciopOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRl
KFB0clRhZyk7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBj
cmVhdGVUYWlsQ2FsbEdhdGUoUHRyVGFnLCBib29sKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxO
YXRpdmVUb0pJVEdhdGVQdHJUYWc+IGxvb3BPU1JFbnRyeUdhdGVUaHVuaygpOwogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gZW50cnlPU1JFbnRyeUdhdGVUaHVu
aygpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gd2FzbU9T
UkVudHJ5R2F0ZVRodW5rKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggYmI4OGI2ZmRiMDk5YjQ5OWFlNmZmNGU4MTAx
MDE1MDRkYWE2ZDRlMy4uZDM1YzIyNGZiOTEzM2ViNjFkZTdiZWMyZTcxNzBiNmJjOTljYTNhYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQpAQCAtNTUxLDYgKzU1MSw3IEBAIGNvbnN0IFN5bWJvbFR5cGUgPSBjb25zdGV4cHIg
U3ltYm9sVHlwZQogY29uc3QgT2JqZWN0VHlwZSA9IGNvbnN0ZXhwciBPYmplY3RUeXBlCiBjb25z
dCBGaW5hbE9iamVjdFR5cGUgPSBjb25zdGV4cHIgRmluYWxPYmplY3RUeXBlCiBjb25zdCBKU0Z1
bmN0aW9uVHlwZSA9IGNvbnN0ZXhwciBKU0Z1bmN0aW9uVHlwZQorY29uc3QgSW50ZXJuYWxGdW5j
dGlvblR5cGUgPSBjb25zdGV4cHIgSW50ZXJuYWxGdW5jdGlvblR5cGUKIGNvbnN0IEFycmF5VHlw
ZSA9IGNvbnN0ZXhwciBBcnJheVR5cGUKIGNvbnN0IERlcml2ZWRBcnJheVR5cGUgPSBjb25zdGV4
cHIgRGVyaXZlZEFycmF5VHlwZQogY29uc3QgUHJveHlPYmplY3RUeXBlID0gY29uc3RleHByIFBy
b3h5T2JqZWN0VHlwZQpAQCAtMTE1MSwyNyArMTE1MiwyNyBAQCBtYWNybyBjYWxsVGFyZ2V0RnVu
Y3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBk
c3RWaQogICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGNhbGxlZQogICAgIGVsc2lmIEFSTTY0
RQogICAgICAgICBtYWNybyBjYWxsTmFycm93KCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmln
ICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBH
YXRlOjolb3Bjb2RlTmFtZSUpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgICAgIGptcCBbYTJdLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCisgICAgICAgICAgICBsZWFwIEpTQ0Nv
bmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4
cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBqbXAgW2E3
XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAgX2pzX3Ry
YW1wb2xpbmVfJW9wY29kZU5hbWUlOgotICAgICAgICAgICAgY2FsbCB0MywgY2FsbFB0clRhZwor
ICAgICAgICAgICAgY2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAogICAgICAgICBt
YWNybyBjYWxsV2lkZTE2KCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHBy
IEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjolb3Bjb2Rl
TmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZl
VG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBKU0NDb25maWcg
KyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdh
dGU6OiVvcGNvZGVOYW1lJV93aWRlMTYpICogUHRyU2l6ZSwgYTcKKyAgICAgICAgICAgIGptcCBb
YTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAgICAgICBfanNf
dHJhbXBvbGluZV8lb3Bjb2RlTmFtZSVfd2lkZTE2OgotICAgICAgICAgICAgY2FsbCB0MywgY2Fs
bFB0clRhZworICAgICAgICAgICAgY2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAgICBlbmQKIAog
ICAgICAgICBtYWNybyBjYWxsV2lkZTMyKCkKLSAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsg
Y29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRl
Ojolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2Ey
XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBK
U0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29u
c3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJV93aWRlMzIpICogUHRyU2l6ZSwgYTcKKyAgICAgICAg
ICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBjYWxsUHRyVGFnCiAgICAgICAg
ICAgICBfanNfdHJhbXBvbGluZV8lb3Bjb2RlTmFtZSVfd2lkZTMyOgotICAgICAgICAgICAgY2Fs
bCB0MywgY2FsbFB0clRhZworICAgICAgICAgICAgY2FsbCB0NSwgY2FsbFB0clRhZwogICAgICAg
ICBlbmQKIAotICAgICAgICBtb3ZlIGNhbGxlZSwgdDMKKyAgICAgICAgbW92ZSBjYWxsZWUsIHQ1
CiAgICAgICAgIHNpemUoY2FsbE5hcnJvdywgY2FsbFdpZGUxNiwgY2FsbFdpZGUzMiwgbWFjcm8g
KGdlbikgZ2VuKCkgZW5kKQogICAgIGVsc2UKICAgICAgICAgY2FsbCBjYWxsZWUsIGNhbGxQdHJU
YWcKQEAgLTEyMDksMTIgKzEyMTAsMjMgQEAgbWFjcm8gY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmkKICAgICBl
bmQKIGVuZAogCi1tYWNybyBwcmVwYXJlRm9yUmVndWxhckNhbGwoY2FsbGVlLCB0ZW1wMSwgdGVt
cDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKLSAgICBhZGRwIENhbGxlckZyYW1lQW5kUENT
aXplLCBzcAorbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMs
IHRlbXA0KQogZW5kCiAKLSMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUKLW1hY3JvIHByZXBh
cmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRy
VGFnKQorbWFjcm8gaW52b2tlRm9yUmVndWxhckNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBj
YWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFnKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbihv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgY2FsbFB0clRhZykKK2VuZAorCisjIHQ1IGlz
IG1ldGFkYXRhCittYWNybyBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbChvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIGNhbGxQdHJUYWcpCitlbmQKKworbWFjcm8gcHJlcGFyZUZvclNsb3dS
ZWd1bGFyQ2FsbCgpCitlbmQKKworIyBzcCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZSArIENhbGxl
ckZyYW1lQW5kUENTaXplCisjIFdlIGxlYXZlIGNmciB0ZW1wNCB0byB1c2UgaXQgZm9yIHVudGFn
Z2luZy4KK21hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbCh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1w
NCkKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCiAKICAgICBsb2FkaSBQYXls
b2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbY2ZyXSwgdGVtcDIKQEAgLTEy
MzIsMTggKzEyNDQsMTcgQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEs
IHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCiAgICAgbW92ZSBjZnIsIHRlbXAxCiAg
ICAgYWRkcCB0ZW1wMiwgdGVtcDEKIAotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpc1tzcF0sIHRlbXAyCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCAr
IEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gQ2FsbGVyRnJhbWVBbmRQQ1NpemVbc3BdLCB0
ZW1wMgogICAgICMgV2UgYXNzdW1lIDwgMl4yOCBhcmd1bWVudHMKICAgICBtdWxpIFNsb3RTaXpl
LCB0ZW1wMgogICAgIGFkZGkgU3RhY2tBbGlnbm1lbnQgLSAxICsgQ2FsbEZyYW1lSGVhZGVyU2l6
ZSwgdGVtcDIKICAgICBhbmRpIH5TdGFja0FsaWdubWVudE1hc2ssIHRlbXAyCiAKICAgICBpZiBB
Uk12NyBvciBBUk02NCBvciBBUk02NEUgb3IgQ19MT09QIG9yIENfTE9PUF9XSU4gb3IgTUlQUyBv
ciBSSVNDVjY0Ci0gICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiAgICAgICAg
IHN1YmkgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHRlbXAyCiAgICAgICAgIGxvYWRwIENhbGxlckZy
YW1lQW5kUEM6OnJldHVyblBDW2Nmcl0sIGxyCiAgICAgZWxzZQotICAgICAgICBhZGRwIFB0clNp
emUsIHNwCisgICAgICAgIHN1YnAgUHRyU2l6ZSwgc3AKICAgICAgICAgc3ViaSBQdHJTaXplLCB0
ZW1wMgogICAgICAgICBsb2FkcCBQdHJTaXplW2Nmcl0sIHRlbXAzCiAgICAgICAgIHN0b3JlcCB0
ZW1wMywgW3NwXQpAQCAtMTI3MCw5ICsxMjgxLDEyIEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2Fs
bChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIGVu
ZAogCiAgICAgbW92ZSB0ZW1wMSwgc3AKK2VuZAorCittYWNybyBpbnZva2VGb3JUYWlsQ2FsbChv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgbWF5YmVPbGRDRlIsIGNhbGxQdHJUYWcpCiAg
ICAgaWYgQVJNNjRFCi0gICAgICAgIG1vdmUgdGVtcDQsIGEyCi0gICAgICAgIG1vdmUgY2FsbGVl
LCBhMAorICAgICAgICBtb3ZlIG1heWJlT2xkQ0ZSLCBhMgorICAgICAgICBtb3ZlIGNhbGxlZSwg
YTcKICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0Nv
bmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnRhaWxDYWxsJWNhbGxQdHJUYWclKSAqIFB0
clNpemUsIGExCiAgICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyAlY2Fs
bFB0clRhZyUKICAgICBlbHNlCkBAIC0xMjgwLDYgKzEyOTQsMjIgQEAgbWFjcm8gcHJlcGFyZUZv
clRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcp
CiAgICAgZW5kCiBlbmQKIAorIyB0NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHlt
b3JwaGljVGFpbENhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorICAgIGlm
IEFSTTY0RQorICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExp
bmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCBhNworICAg
ICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0
ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6dGFpbENhbGxXaXRob3V0VW50YWclY2FsbFB0clRhZyUp
ICogUHRyU2l6ZSwgYTEKKyAgICAgICAgam1wIFthMV0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAj
ICVjYWxsUHRyVGFnJQorICAgIGVsc2UKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0
aW9uW3Q1XSwgYTEKKyAgICAgICAgam1wIGExLCBjYWxsUHRyVGFnCisgICAgZW5kCitlbmQKKwor
bWFjcm8gcHJlcGFyZUZvclNsb3dUYWlsQ2FsbCgpCisgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNl
ZEJ5TExJbnQoKQorZW5kCisKIG1hY3JvIHNsb3dQYXRoRm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1l
LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAg
ICAgc2xvd1BhdGhGb3JDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgbV9wcm9m
aWxlLCBtX2RzdCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKIGVuZApAQCAtMTI4
NywxMSArMTMxNywxMSBAQCBlbmQKIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBz
aXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3Rlciwg
ZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBjYWxsQ2FsbFNsb3dQYXRoKAog
ICAgICAgICBzbG93UGF0aCwKLSAgICAgICAgIyBUaG9zZSBhcmUgcjAgYW5kIHIxCisgICAgICAg
ICMgVGhvc2UgcGFyYW1ldGVycyBhcmUgcjAgYW5kIHIxCiAgICAgICAgIG1hY3JvIChjYWxsZWUs
IGNhbGxlZUZyYW1lUHRyKQogICAgICAgICAgICAgYnRweiBjYWxsZWVGcmFtZVB0ciwgLmRvbnRV
cGRhdGVTUAogICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKLSAgICAgICAgICAg
IHByZXBhcmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlTbG93UGF0aFB0clRh
ZykKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQxKQogICAgICAgICAuZG9u
dFVwZGF0ZVNQOgogICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKCVvcGNvZGVOYW1lJV9z
bG93LCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIGNhbGxlZSwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKQogICAgICAgICBl
bmQpCkBAIC0xODIwLDEyICsxODUwLDE2IEBAIGlmIEFSTTY0RQogICAgIGdsb2JhbCBfdGFpbENh
bGxKU0VudHJ5VHJhbXBvbGluZQogICAgIF90YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lOgogICAg
ICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBKU0VudHJ5UHRyVGFn
CisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwogCiAgICAgZ2xvYmFsIF90YWlsQ2FsbEpT
RW50cnlTbG93UGF0aFRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5U2xvd1BhdGhUcmFt
cG9saW5lOgogICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgYTIKLSAgICAgICAgam1wIGEwLCBK
U0VudHJ5U2xvd1BhdGhQdHJUYWcKKyAgICAgICAgam1wIGE3LCBKU0VudHJ5UHRyVGFnCisKKyAg
ICBnbG9iYWwgX3RhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUKKyAgICBfdGFp
bENhbGxXaXRob3V0VW50YWdKU0VudHJ5VHJhbXBvbGluZToKKyAgICAgICAgam1wIGE3LCBKU0Vu
dHJ5UHRyVGFnCiAKICAgICBnbG9iYWwgX2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lCiAgICAg
X2V4Y2VwdGlvbkhhbmRsZXJUcmFtcG9saW5lOgpAQCAtMjMyNSwxNyArMjM1OSwxNyBAQCBlbmQp
CiAKIAogIyB3ZSBjYW4ndCB1c2UgY2FsbE9wIGJlY2F1c2Ugd2UgY2FuJ3QgcGFzcyBgY2FsbGAg
YXMgdGhlIG9wY29kZSBuYW1lLCBzaW5jZSBpdCdzIGFuIGluc3RydWN0aW9uIG5hbWUKLWNvbW1v
bkNhbGxPcChvcF9jYWxsLCBfbGxpbnRfc2xvd19wYXRoX2NhbGwsIE9wQ2FsbCwgcHJlcGFyZUZv
clJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCitjb21tb25DYWxsT3Aob3BfY2Fs
bCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwg
aW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBw
cmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAgICAgYXJy
YXlQcm9maWxlRm9yQ2FsbChPcENhbGwsIGdldHUpCiBlbmQpCiAKIAotbWFjcm8gY2FsbE9wKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGZuKQotICAgIGNvbW1vbkNhbGxP
cChvcF8lb3Bjb2RlTmFtZSUsIF9sbGludF9zbG93X3BhdGhfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKK21hY3JvIGNhbGxPcChvcGNvZGVOYW1lLCBvcGNvZGVT
dHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBh
cmVTbG93Q2FsbCwgZm4pCisgICAgY29tbW9uQ2FsbE9wKG9wXyVvcGNvZGVOYW1lJSwgX2xsaW50
X3Nsb3dfcGF0aF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9r
ZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBmbikKIGVuZAogCiAK
LWNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFjcm8g
KGdldHUsIG1ldGFkYXRhKQorY2FsbE9wKHRhaWxfY2FsbCwgT3BUYWlsQ2FsbCwgcHJlcGFyZUZv
clRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENh
bGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKICAgICBh
cnJheVByb2ZpbGVGb3JDYWxsKE9wVGFpbENhbGwsIGdldHUpCiAgICAgY2hlY2tTd2l0Y2hUb0pJ
VEZvckVwaWxvZ3VlKCkKICAgICAjIHJlbG9hZCBtZXRhZGF0YSBzaW5jZSBjaGVja1N3aXRjaFRv
SklURm9yRXBpbG9ndWUoKSBtaWdodCBoYXZlIHRyYXNoZWQgdDUKQEAgLTIzNDMsNyArMjM3Nyw3
IEBAIGNhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBhcmVGb3JUYWlsQ2FsbCwgbWFj
cm8gKGdldHUsIG1ldGFkYXRhKQogZW5kKQogCiAKLWNhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3Ry
dWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIG1hY3JvIChnZXR1LCBtZXRhZGF0YSkgZW5kKQor
Y2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52
b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVw
YXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVuZCkKIAogCiBt
YWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCkBAIC0yMzU0LDQ3ICsyMzg4
LDI5IEBAIG1hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGV4Y2VwdGlvblRhcmdldCkKIC5ub0V4Y2Vw
dGlvbjogICAgCiBlbmQKIAotbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBv
cGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNh
bGwpCi0gICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCi0gICAgYnJhbmNoSWZFeGNlcHRp
b24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCi0gICAgIyBjYWxsZWVG
cmFtZSBpbiByMQotICAgIGlmIEpTVkFMVUU2NAotICAgICAgICBtb3ZlIHIxLCBzcAotICAgIGVs
c2UKLSAgICAgICAgIyBUaGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUg
ZG93biBieSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGlnbgotICAgICAgICBpZiBBUk12Nwot
ICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCi0gICAgICAgICAg
ICBtb3ZlIHQyLCBzcAotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSwgc3AKLSAgICAgICAgZW5kCi0gICAgZW5kCi0gICAgc2xvd1BhdGhGb3JD
b21tb25DYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgZGlzcGF0Y2gsIHNsb3dQ
YXRoLCBwcmVwYXJlQ2FsbCkKLWVuZAotCiAKLWxsaW50T3Aob3BfY2FsbF92YXJhcmdzLCBPcENh
bGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBkb0NhbGxWYXJhcmdz
KG9wX2NhbGxfdmFyYXJncywgc2l6ZSwgT3BDYWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9z
bG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF9jYWxsX3Zh
cmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfY2Fs
bF92YXJhcmdzLCBPcENhbGxWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKKyAgICBkb0NhbGxWYXJhcmdzKG9wX2NhbGxfdmFyYXJncywgc2l6ZSwg
Z2V0LCBPcENhbGxWYXJhcmdzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0
aF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNh
bGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3Vs
YXJDYWxsKQogZW5kKQogCi1sbGludE9wKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxs
VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRh
KG9wX3RhaWxfY2FsbF92YXJhcmdzLCBPcFRhaWxDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVw
aWxvZ3VlKCkKICAgICAjIFdlIGxpZSBhbmQgcGVyZm9ybSB0aGUgdGFpbCBjYWxsIGluc3RlYWQg
b2YgcHJlcGFyaW5nIGl0IHNpbmNlIHdlIGNhbid0CiAgICAgIyBwcmVwYXJlIHRoZSBmcmFtZSBm
b3IgYSBjYWxsIG9wY29kZQotICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3ZhcmFyZ3Ms
IHNpemUsIE9wVGFpbENhbGxWYXJhcmdzLCBkaXNwYXRjaCwgX2xsaW50X3Nsb3dfcGF0aF9zaXpl
X2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzLCBw
cmVwYXJlRm9yVGFpbENhbGwpCisgICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfdmFyYXJn
cywgc2l6ZSwgZ2V0LCBPcFRhaWxDYWxsVmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9s
bGludF9zbG93X3BhdGhfdGFpbF9jYWxsX3ZhcmFyZ3MsIHByZXBhcmVGb3JUYWlsQ2FsbCwgaW52
b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1RhaWxDYWxsLCBwcmVwYXJlRm9y
U2xvd1RhaWxDYWxsKQogZW5kKQogCiAKLWxsaW50T3Aob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzLCBPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gpCitsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cywgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCiAg
ICAgIyBXZSBsaWUgYW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIHByZXBhcmlu
ZyBpdCBzaW5jZSB3ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJhbWUgZm9yIGEgY2FsbCBv
cGNvZGUKLSAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywg
c2l6ZSwgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19w
YXRoX3NpemVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzLCBfbGxpbnRfc2xvd19wYXRoX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZvclRhaWxDYWxsKQorICAgIGRvQ2Fs
bFZhcmFyZ3Mob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBzaXplLCBnZXQsIE9wVGFp
bENhbGxGb3J3YXJkQXJndW1lbnRzLCBtX3Byb2ZpbGUsIG1fZHN0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMsIF9s
bGludF9zbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBwcmVwYXJlRm9yVGFp
bENhbGwsIGludm9rZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwg
cHJlcGFyZUZvclNsb3dUYWlsQ2FsbCkKIGVuZCkKIAogCi1sbGludE9wKG9wX2NvbnN0cnVjdF92
YXJhcmdzLCBPcENvbnN0cnVjdFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQot
ICAgIGRvQ2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0X3ZhcmFyZ3MsIHNpemUsIE9wQ29uc3RydWN0
VmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJn
cywgX2xsaW50X3Nsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncywgcHJlcGFyZUZvclJlZ3VsYXJD
YWxsKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9jb25zdHJ1Y3RfdmFyYXJncywgT3BDb25zdHJ1
Y3RWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
KyAgICBkb0NhbGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBnZXQsIE9wQ29u
c3RydWN0VmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBfbGxp
bnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29u
c3RydWN0X3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNh
bGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3Vs
YXJDYWxsKQogZW5kKQogCiAKQEAgLTI1MTAsNiArMjUyNiw5MCBAQCBvcChsbGludF9pbnRlcm5h
bF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFjcm8gKCkKICAgICBpbnRlcm5hbEZ1
bmN0aW9uQ2FsbFRyYW1wb2xpbmUoSW50ZXJuYWxGdW5jdGlvbjo6bV9mdW5jdGlvbkZvckNvbnN0
cnVjdCkKIGVuZCkKIAorIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlz
IENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK21hY3JvIGxp
bmtTbG93UGF0aEZvcihmdW5jdGlvbikKKyAgICBmdW5jdGlvblByb2xvZ3VlKCkKKyAgICBsb2Fk
cCBKU0dsb2JhbE9iamVjdDo6bV92bVt0M10sIHQxCisgICAgc3RvcmVwIGNmciwgVk06OnRvcENh
bGxGcmFtZVt0MV0KKyAgICBtb3ZlIHQyLCBhMgorICAgIG1vdmUgdDMsIGExCisgICAgbW92ZSBj
ZnIsIGEwCisgICAgY0NhbGw0KGZ1bmN0aW9uKQorICAgIGZ1bmN0aW9uRXBpbG9ndWUoKQorICAg
IHVudGFnUmV0dXJuQWRkcmVzcyBzcAorICAgIGJ0cHogcjEsIC5kb05vdFRyYXNoCisgICAgcHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHQxKQorICAgIHByZXBhcmVGb3JUYWlsQ2FsbCh0
MSwgdDIsIHQzLCB0NCkKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MgdDQKKy5kb05vdFRyYXNoOgor
ICAgIGptcCB0MCwgSlNFbnRyeVB0clRhZworZW5kCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEp
IGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xv
YmFsT2JqZWN0CittYWNybyB2aXJ0dWFsVGh1bmtGb3Iob2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5
Q2hlY2ssIGludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lLCBwcmVwYXJlQ2FsbCwgc2xvd0Nhc2Up
CisgICAgYWRkaSAxLCBDYWxsTGlua0luZm86Om1fc2xvd1BhdGhDb3VudFt0Ml0KKyAgICBpZiBK
U1ZBTFVFNjQKKyAgICAgICAgYnRxbnogdDAsIE5vdENlbGxNYXNrLCBzbG93Q2FzZQorICAgIGVs
c2UKKyAgICAgICAgYmluZXEgdDEsIENlbGxUYWcsIHNsb3dDYXNlCisgICAgZW5kCisgICAgYmJu
ZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBKU0Z1bmN0aW9uVHlwZSwgLm5vdEpTRnVuY3Rpb24KKyAg
ICBsb2FkcCBKU0Z1bmN0aW9uOjptX2V4ZWN1dGFibGVPclJhcmVEYXRhW3QwXSwgdDEKKyAgICBi
dHB6IHQxLCAoY29uc3RleHByIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgLmlzRXhlY3V0YWJs
ZQorICAgIGxvYWRwIChGdW5jdGlvblJhcmVEYXRhOjptX2V4ZWN1dGFibGUgLSAoY29uc3RleHBy
IEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSlbdDFdLCB0MQorLmlzRXhlY3V0YWJsZToKKyAgICBs
b2FkcCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja1t0MV0sIHQxCisgICAgYnRweiB0MSwg
c2xvd0Nhc2UKKy5jYWxsQ29kZToKKyAgICBwcmVwYXJlQ2FsbCh0NSwgdDIsIHQzLCB0NCkKKyAg
ICBqbXAgdDEsIEpTRW50cnlQdHJUYWcKKy5ub3RKU0Z1bmN0aW9uOgorICAgIGJibmVxIEpTQ2Vs
bDo6bV90eXBlW3QwXSwgSW50ZXJuYWxGdW5jdGlvblR5cGUsIHNsb3dDYXNlCisgICAgcHJlcGFy
ZUNhbGwodDUsIHQyLCB0MywgdDQpCisgICAgam1wIGludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
CitlbmQKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxM
aW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X2xpbmtf
Y2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfbGlu
a19jYWxsKQorZW5kKQorCisjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyMgdDIg
aXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorb3AobGxp
bnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9y
KEV4ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGludF9p
bnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRl
bXAzLCB0ZW1wNCkgZW5kLCAuc2xvd0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRo
Rm9yKF9sbGludF92aXJ0dWFsX2NhbGwpCitlbmQpCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEp
IGlzIGNhbGxlZQorIyB0MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xv
YmFsT2JqZWN0CitvcChsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAo
KQorICAgIHZpcnR1YWxUaHVua0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJh
bXBvbGluZSwgbWFjcm8gKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0KSBlbmQsIC5zbG93Q2Fz
ZSkKKy5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkK
K2VuZCkKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisjIHQyIGlzIENhbGxM
aW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29wKGxsaW50X3ZpcnR1
YWxfdGFpbF9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICgpCisgICAgdmlydHVhbFRodW5rRm9yKEV4
ZWN1dGFibGVCYXNlOjptX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssIF9sbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAz
LCB0ZW1wNCkKKyAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHRlbXAxKQor
ICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywgdGVtcDQpCisg
ICAgICAgIHVudGFnUmV0dXJuQWRkcmVzcyB0ZW1wNAorICAgIGVuZCwgLnNsb3dDYXNlKQorLnNs
b3dDYXNlOgorICAgIGxpbmtTbG93UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQog
CiBpZiBKSVQKICAgICBtYWNybyBsb2FkQmFzZWxpbmVKSVRDb25zdGFudFBvb2woKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCmlu
ZGV4IGMwNGZmZDZiMGJjM2YyNmUxOTJmMDZmMmJiZjc0YjA2NGRjYjI3OWEuLjk4NzZlZjZlZjc0
MmFjZWVkYWUyNjlhMmFiNDU0YzViNjJjZDUxNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKQEAgLTEyOSw2ICsxMjksOCBA
QCB1c2luZyBXZWJDb25maWc6OmdfY29uZmlnOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
Q2FsbExpbmtJbmZvOworCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIENMb29wUmVnaXN0ZXIg
aXMgdGhlIHN0b3JhZ2UgZm9yIGFuIGVtdWxhdGVkIENQVSByZWdpc3Rlci4KIC8vIEl0IGRlZmlu
ZXMgdGhlIHBvbGljeSBvZiBob3cgaW50cyBzbWFsbGVyIHRoYW4gaW50cHRyX3QgYXJlIHBhY2tl
ZCBpbnRvIHRoZQpAQCAtMTY2LDYgKzE2OCw3IEBAIGNsYXNzIENMb29wUmVnaXN0ZXIgewogICAg
IG9wZXJhdG9yIFByb3RvQ2FsbEZyYW1lKigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxQcm90b0Nh
bGxGcmFtZSo+KG1fdmFsdWUpOyB9CiAgICAgb3BlcmF0b3IgUmVnaXN0ZXIqKCkgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PFJlZ2lzdGVyKj4obV92YWx1ZSk7IH0KICAgICBvcGVyYXRvciBWTSooKSB7
IHJldHVybiBiaXR3aXNlX2Nhc3Q8Vk0qPihtX3ZhbHVlKTsgfQorICAgIG9wZXJhdG9yIENhbGxM
aW5rSW5mbyooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Q2FsbExpbmtJbmZvKj4obV92YWx1ZSk7
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZf
dDxzaXplb2YoVCkgPT0gc2l6ZW9mKHVpbnRwdHJfdCk+PgogICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBvcGVyYXRvcj0oVCB2YWx1ZSkgeyBtX3ZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
dmFsdWUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDkwM2U1YTQ1YjFiNjY4MmZkMjg3OGI5Nzk0
ODUyYWVmZDY3NTFkNWUuLmU4MmE1YThkMmE1ZTJhNmJkYmU2MzdjOGQ4NThmOWFkZDNmMTgwNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCkBAIC0xMTgsNyArMTE4LDkgQEAgbWFjcm8gY0NhbGwyVm9pZChm
dW5jdGlvbikKIGVuZAogCiBtYWNybyBjQ2FsbDQoZnVuY3Rpb24pCi0gICAgaWYgQVJNdjcgb3Ig
TUlQUworICAgIGlmIENfTE9PUCBvciBDX0xPT1BfV0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQ
YXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMKKyAgICBlbHNpZiBBUk12NyBvciBNSVBTCiAg
ICAgICAgIGNhbGwgZnVuY3Rpb24KICAgICBlbHNpZiBYODYgb3IgWDg2X1dJTgogICAgICAgICBw
dXNoIGEzCkBAIC0yMTUxLDM1ICsyMTUzLDYwIEBAIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwo
b3Bjb2RlU3RydWN0LCBnZXR1KQogICAgIGJpbmVxIFRoaXNBcmd1bWVudE9mZnNldCArIFRhZ09m
ZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICBsb2FkaSBUaGlzQXJndW1lbnRP
ZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGxvYWRpIEpTQ2VsbDo6
bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJ
RFt0NV0KKyAgICBzdG9yZWkgdDAsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVBy
b2ZpbGUubV9sYXN0U2VlblN0cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBlbmQKIAotbWFjcm8gY2Fs
bEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0
YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpCi0gICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGdldENhbGxlZSh0MCkKKyMgdDUg
aG9sZHMgbWV0YWRhdGEuCittYWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBv
cGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFy
ZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBz
aXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgZ2V0Q2FsbGVlKHQzKQogCi0gICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yTGFz
dFNlZW5DYWxsZWVXaXRoTGlua0JpdFt0NV0sIHQyCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQzLCAub3BDYWxsU2xvdykKLSAgICBiaW5lcSB0
MywgdDIsIC5vcENhbGxTbG93CisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0Mywg
dDEsIHQwKQorCisgICAgIyBBbGlnbmVkIHRvIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUKICAgICBn
ZXRBcmd1bWVudFN0YXJ0KHQzKQogICAgIGxzaGlmdGkgMywgdDMKICAgICBuZWdpIHQzCiAgICAg
YWRkcCBjZnIsIHQzICAjIHQzIGNvbnRhaW5zIHRoZSBuZXcgdmFsdWUgb2YgY2ZyCi0gICAgc3Rv
cmVpIHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgIGdldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKHQyKSAgICAKLSAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KKyAgICBnZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyh0MikKICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9h
ZE9mZnNldFt0M10KLSAgICBzdG9yZWkgQ2VsbFRhZywgQ2FsbGVlICsgVGFnT2Zmc2V0W3QzXQor
CisgICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3VyZSBz
cC4KKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0
W2Nmcl0KKyAgICBzdG9yZWkgdDAsIENhbGxlZSArIFBheWxvYWRPZmZzZXRbdDNdCisgICAgc3Rv
cmVpIHQxLCBDYWxsZWUgKyBUYWdPZmZzZXRbdDNdCiAgICAgbW92ZSB0Mywgc3AKLSAgICBwcmVw
YXJlQ2FsbCglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGlu
ZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICBjYWxs
VGFyZ2V0RnVuY3Rpb24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRy
VGFnKQorICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCisKKyAgICBiaW5lcSB0MSwg
Q2VsbFRhZywgLm9wQ2FsbFNsb3cKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MworICAgIGJ0cHogdDMs
IChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9s
eW1vcnBoaWMKKyAgICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVy
biBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2Vw
YXJhdGVseS4KKyAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3Jw
aGljIGNhbGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMg
dGh1bmsgc2lkZS4KKyAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNo
LCBKU0VudHJ5UHRyVGFnKQorICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisubm90UG9seW1vcnBo
aWM6CisgICAgYnBuZXEgdDAsIHQzLCAub3BDYWxsU2xvdworICAgIHByZXBhcmVDYWxsKHQyLCB0
MywgdDQsIHQxKQorCisuZ29Qb2x5bW9ycGhpYzoKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGlu
YXRpb25bdDVdLCB0NQorICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwg
dDEsIEpTRW50cnlQdHJUYWcpCiAKIC5vcENhbGxTbG93OgotICAgIHNsb3dQYXRoRm9yQ2FsbChv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1
YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKKyAgICAjIDY0Yml0
OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAjIHQyIGlzIENhbGxMaW5rSW5mbyoKKyAg
ICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgYWRkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQy
CisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX3Ns
b3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICBwcmVw
YXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKIGVuZAogICAgICAgICAKLW1hY3JvIGNvbW1v
bkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwg
cHJvbG9ndWUpCittYWNybyBjb21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29k
ZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJl
cGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIApAQCAtMjE4OCw3ICsyMjE1LDcgQEAg
bWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHBy
ZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgZW5kLCBtZXRhZGF0YSkKIAogICAgICAgICBt
YWNybyBnZXRDYWxsZWUoZHN0KQotICAgICAgICAgICBnZXQobV9jYWxsZWUsIHQwKQorICAgICAg
ICAgICBnZXQobV9jYWxsZWUsIGRzdCkKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0
QXJndW1lbnRTdGFydChkc3QpCkBAIC0yMTk5LDEwICsyMjI2LDY4IEBAIG1hY3JvIGNvbW1vbkNh
bGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJv
bG9ndWUpCiAgICAgICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3Qp
CiAgICAgICAgIGVuZAogICAgICAgICAKLSAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBz
bG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgc2l6
ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFy
Z3VtZW50Q291bnQpCisgICAgICAgICMgdDUgaG9sZHMgbWV0YWRhdGEKKyAgICAgICAgY2FsbEhl
bHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0
LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xv
d0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0
YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVuZCkKIGVuZAogCittYWNybyBkb0NhbGxWYXJh
cmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZnJhbWVTbG93UGF0aCwg
c2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHBy
ZXBhcmVTbG93Q2FsbCkKKyAgICBjYWxsU2xvd1BhdGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFu
Y2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAg
ICAjIGNhbGxlZUZyYW1lIGluIHIxCisgICAgaWYgSlNWQUxVRTY0CisgICAgICAgIG1vdmUgcjEs
IHNwCisgICAgZWxzZQorICAgICAgICAjIFRoZSBjYWxsZWVGcmFtZSBpcyBub3Qgc3RhY2sgYWxp
Z25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZyYW1lQW5kUENTaXplIHRvIGFsaWduCisgICAgICAg
IGlmIEFSTXY3CisgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgdDIK
KyAgICAgICAgICAgIG1vdmUgdDIsIHNwCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1YnAg
cjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBj
YWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBzbG93UGF0aCwKKyAgICAgICAgIyBUaG9zZSBwYXJh
bWV0ZXJzIGFyZSByMCBhbmQgcjEKKyAgICAgICAgbWFjcm8gKHJlc3RvcmVkUENPclRocm93LCBj
YWxsZWVGcmFtZVB0cikKKyAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250VXBk
YXRlU1AKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQorICAgICAgICAgICAg
bW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDIpCisg
ICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MSwgdDApCisgICAg
ICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCisKKyAgICAgICAgICAgIGJpbmVxIHQxLCBDZWxsVGFn
LCAub3BDYWxsU2xvdworICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDMKKyAgICAgICAgICAg
IGJ0cHogdDMsIChjb25zdGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2sp
LCAubm90UG9seW1vcnBoaWMKKyAgICAgICAgICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9l
cyBub3QgdW50YWcgcmV0dXJuIGFkZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0
aGUgdHJhbXBvbGluZSBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgIyBCdXQgd2Ugc2hvdWxkIG5v
dCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJl
IGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRodW5rIHNpZGUuCisgICAgICAgICAgICBwcmVwYXJl
UG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAgICAg
ICAgICAgam1wIC5nb1BvbHltb3JwaGljCisKKyAgICAgICAgLm5vdFBvbHltb3JwaGljOgorICAg
ICAgICAgICAgYnBuZXEgdDAsIHQzLCAub3BDYWxsU2xvdworICAgICAgICAgICAgcHJlcGFyZUNh
bGwodDIsIHQzLCB0NCwgdDEpCisKKyAgICAgICAgLmdvUG9seW1vcnBoaWM6CisgICAgICAgICAg
ICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlD
Lm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAgICAgaW52b2tl
Q2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRz
dFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworICAg
ICAgICAub3BDYWxsU2xvdzoKKyAgICAgICAgICAgICMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlz
IGNhbGxlZQorICAgICAgICAgICAgIyB0MiBpcyBDYWxsTGlua0luZm8qCisgICAgICAgICAgICAj
IHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgICAgICAgICBhZGRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8sIHQ1LCB0MiAjIENhbGxMaW5rSW5mbyog
aW4gdDIKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxs
TGlua0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDMKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9n
bG9iYWxPYmplY3RbdDNdLCB0MworICAgICAgICAgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICAg
ICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0
NSwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgLmRvbnRVcGRhdGVTUDoKKyAgICAgICAgICAgIGpt
cCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQorICAgICAgICBlbmQpCitl
bmQKKwogbGxpbnRPcChvcF9yZXQsIE9wUmV0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkK
ICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQogICAgIGdldChtX3ZhbHVlLCB0MikK
QEAgLTI4NjYsNyArMjk1MSw4IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jfb3Bl
biwgT3BJdGVyYXRvck9wZW4sIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgICAgIG1v
dmUgMSwgZHN0CiAgICAgZW5kCiAKLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9s
bGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVy
YXRvclByb2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290
b0dldEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1
ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRh
dGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3df
cGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmls
ZSwgbV9pdGVyYXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2Fs
bCwgcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxh
ckNhbGwsIHNpemUsIGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwg
Z2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0Nv
dW50KQogCiAuZ2V0QnlJZFN0YXJ0OgogICAgIG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNoKHZh
bHVlVGFnLCB2YWx1ZVBheWxvYWQpCkBAIC0yOTI3LDcgKzMwMTMsOCBAQCBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JOZXh0LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92YWx1ZSBzbG90IGFzIGEgdG1wIHNp
bmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRlci4KLSAgICBjYWxsSGVscGVyKG9w
X2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9jYWxsLCBPcEl0
ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92YWx1ZSwgcHJlcGFyZUZvclJlZ3Vs
YXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUs
IGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXND
b3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9u
ZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQs
IG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52
b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVw
YXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQsIG1ldGFk
YXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVu
dEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldERvbmVTdGFydDoKICAgICBtYWNybyBzdG9yZURv
bmVBbmRKbXBUb0dldFZhbHVlKGRvbmVWYWx1ZVRhZywgZG9uZVZhbHVlUGF5bG9hZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KaW5kZXggYTkxMzE0ZmNlOWVlNDRjYTZlMGJhYzc4MmQ5YmUyZjU5YzBhODM3MC4uY2RmZDZl
MjE4Yzk1NmI0MzEwNmEyNzQ4NGZkZWM0NjQyYWUwNjhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTE0Myw3
ICsxNDMsOSBAQCBlbmQKICMgVGhpcyBiYXJlbHkgd29ya3MuIGFyZzMgYW5kIGFyZzQgc2hvdWxk
IHByb2JhYmx5IGJlIGltbWVkaWF0ZXMuCiBtYWNybyBjQ2FsbDQoZnVuY3Rpb24pCiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQodDQsIDB4YmFkMGMwMDQpCi0gICAgaWYgWDg2XzY0IG9y
IEFSTTY0IG9yIEFSTTY0RSBvciBSSVNDVjY0CisgICAgaWYgQ19MT09QIG9yIENfTE9PUF9XSU4K
KyAgICAgICAgY2xvb3BDYWxsU2xvd1BhdGg0IGZ1bmN0aW9uLCBhMCwgYTEsIGEyLCBhMworICAg
IGVsc2lmIFg4Nl82NCBvciBBUk02NCBvciBBUk02NEUgb3IgUklTQ1Y2NAogICAgICAgICBjYWxs
IGZ1bmN0aW9uCiAgICAgZWxzaWYgWDg2XzY0X1dJTgogICAgICAgICAjIE9uIFdpbjY0LCByY3gs
IHJkeCwgcjgsIGFuZCByOSBhcmUgdXNlZCBmb3IgcGFzc2luZyB0aGUgZmlyc3QgZm91ciBwYXJh
bWV0ZXJzLgpAQCAtMzA5LDEyICszMTEsMTIgQEAgbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVu
dHJ5LCBwcm90b0NhbGxGcmFtZSwgdGVtcDEsIHRlbXAyKQogICAgIGlmIENfTE9PUCBvciBDX0xP
T1BfV0lOCiAgICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50cnkKICAgICBlbHNpZiBBUk02
NEUKLSAgICAgICAgbW92ZSBlbnRyeSwgdDMKLSAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25z
dGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnZt
RW50cnlUb0phdmFTY3JpcHQpICogUHRyU2l6ZSwgYTIKLSAgICAgICAgam1wIFthMl0sIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKKyAgICAgICAgbW92ZSBlbnRyeSwgdDUK
KyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZp
Z0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnZtRW50cnlUb0phdmFTY3JpcHQpICogUHRyU2l6
ZSwgYTcKKyAgICAgICAgam1wIFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQ
dHJUYWcKICAgICAgICAgZ2xvYmFsIF92bUVudHJ5VG9KYXZhU2NyaXB0VHJhbXBvbGluZQogICAg
ICAgICBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmU6Ci0gICAgICAgIGNhbGwgdDMsIEpT
RW50cnlQdHJUYWcKKyAgICAgICAgY2FsbCB0NSwgSlNFbnRyeVB0clRhZwogICAgIGVsc2UKICAg
ICAgICAgY2FsbCBlbnRyeSwgSlNFbnRyeVB0clRhZwogICAgIGVuZApAQCAtMjM2MCw0MSArMjM2
Miw1OCBAQCBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAg
ICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgYnRxbnogdDAs
IG5vdENlbGxNYXNrLCAuZG9uZQogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0s
IHQzCi0gICAgc3RvcmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJ
bmZvLm1fYXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkg
dDMsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9sYXN0U2VlblN0
cnVjdHVyZUlEW3Q1XQogLmRvbmU6CiBlbmQKIAotbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1l
LCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIHByZXBhcmVDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwg
Z2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCi0gICAgbWV0
YWRhdGEodDUsIHQwKQotICAgIGdldENhbGxlZSh0MCkKKyMgdDUgaG9sZHMgbWV0YWRhdGEuCitt
YWNybyBjYWxsSGVscGVyKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHZhbHVl
UHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGws
IHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0
YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpCisgICAgZ2V0Q2FsbGVlKHQxKQogCi0gICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlu
a0JpdFt0NV0sIHQyCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCi0g
ICAgYnFuZXEgdDMsIHQyLCAub3BDYWxsU2xvdworICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDEsIHQwKQogCisgICAgIyBBbGlnbmVkIHRvIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUK
ICAgICBnZXRBcmd1bWVudFN0YXJ0KHQzKQogICAgIGxzaGlmdGkgMywgdDMKICAgICBuZWdwIHQz
CiAgICAgYWRkcCBjZnIsIHQzCi0gICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgZ2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXModDIpCi0gICAgc3RvcmVQQygpCiAgICAgc3RvcmVpIHQy
LCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFBheWxvYWRPZmZzZXRbdDNdCisKKyAgICAj
IFN0b3JlIGxvY2F0aW9uIGJpdHMgYW5kIHxjYWxsZWV8LCBhbmQgY29uZmlndXJlIHNwLgorICAg
IHN0b3JlUEMoKQorICAgIHN0b3JlcSB0MCwgQ2FsbGVlW3QzXQogICAgIG1vdmUgdDMsIHNwCi0g
ICAgaWYgQVJNNjRFCi0gICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQwCi0gICAgICAgIHByZXBhcmVD
YWxsKHQwLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0
W3Q1XSwgdDAKLSAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgdDAsIEpTRW50cnlQdHJUYWcpCi0gICAgZWxzZQotICAgICAgICBwcmVwYXJlQ2FsbCglb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRb
dDVdLCB0MiwgdDMsIHQ0LCB0MSwgSlNFbnRyeVB0clRhZykKLSAgICAgICAgY2FsbFRhcmdldEZ1
bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwg
ZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNFbnRyeVB0clRhZykKLSAg
ICBlbmQKLS5vcENhbGxTbG93OgotICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlz
cGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKLWVuZAorICAgIGFkZHAgQ2FsbGVyRnJhbWVB
bmRQQ1NpemUsIHNwCisKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2Fs
bExpbmtJbmZvLm1fY2FsbGVlT3JDb2RlQmxvY2tbdDVdLCB0MQorICAgIGJ0cHogdDEsIChjb25z
dGV4cHIgQ2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBo
aWMKKyAgICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRy
ZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVs
eS4KKyAgICAjIEJ1dCB3ZSBzaG91bGQgbm90IHVudGFnIHRoYXQgZm9yIHBvbHltb3JwaGljIGNh
bGwgY2FzZSBzaW5jZSBpdCBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcG9seW1vcnBoaWMgdGh1bmsg
c2lkZS4KKyAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3Ry
dWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBKU0Vu
dHJ5UHRyVGFnKQorICAgIGptcCAuZ29Qb2x5bW9ycGhpYwogCi1tYWNybyBjb21tb25DYWxsT3Ao
b3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIHByb2xvZ3Vl
KQorLm5vdFBvbHltb3JwaGljOgorICAgIGJxbmVxIHQwLCB0MSwgLm9wQ2FsbFNsb3cKKyAgICBw
cmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKKworLmdvUG9seW1vcnBoaWM6CisgICAgbG9hZHAg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9t
b3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUs
IHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVy
LCBkaXNwYXRjaCwgdDUsIHQxLCBKU0VudHJ5UHRyVGFnKQorCisub3BDYWxsU2xvdzoKKyAgICAj
IDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAjIHQyIGlzIENhbGxMaW5rSW5m
byoKKyAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CisgICAgYWRkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8q
IGluIHQyCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5m
by5tX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgdDMKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAg
ICBwcmVwYXJlU2xvd0NhbGwoKQorICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFtZSVf
c2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVn
aXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKK2VuZAorCittYWNybyBjb21tb25D
YWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGwsIGlu
dm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBwcm9sb2d1ZSkK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRh
KHQ1LCB0MCkKIApAQCAtMjQwMyw3ICsyNDIyLDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29k
ZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAg
ICAgICAgZW5kLCBtZXRhZGF0YSkKIAogICAgICAgICBtYWNybyBnZXRDYWxsZWUoZHN0KQotICAg
ICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgICAgIGdldChtX2NhbGxlZSwgZHN0
KQogICAgICAgICBlbmQKIAogICAgICAgICBtYWNybyBnZXRBcmd1bWVudFN0YXJ0KGRzdCkKQEAg
LTI0MTQsMTAgKzI0MzMsNjcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQ
YXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgICAgIGdl
dHUoc2l6ZSwgb3Bjb2RlU3RydWN0LCBtX2FyZ2MsIGRzdCkKICAgICAgICAgZW5kCiAKLSAgICAg
ICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBtX3Byb2Zp
bGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnQpCisgICAgICAgICMgdDUgaG9s
ZHMgbWV0YWRhdGEKKyAgICAgICAgY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bj
b2RlU3RydWN0LCBtX3Byb2ZpbGUsIG1fZHN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJl
cGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQogICAgIGVu
ZCkKIGVuZAogCittYWNybyBkb0NhbGxWYXJhcmdzKG9wY29kZU5hbWUsIHNpemUsIGdldCwgb3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBhcmVDYWxsLCBpbnZva2VD
YWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCkKKyAgICBjYWxsU2xvd1Bh
dGgoZnJhbWVTbG93UGF0aCkKKyAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJv
bV9zbG93X3BhdGhfdHJhbXBvbGluZSkKKyAgICAjIGNhbGxlZUZyYW1lIGluIHIxCisgICAgaWYg
SlNWQUxVRTY0CisgICAgICAgIG1vdmUgcjEsIHNwCisgICAgZWxzZQorICAgICAgICAjIFRoZSBj
YWxsZWVGcmFtZSBpcyBub3Qgc3RhY2sgYWxpZ25lZCwgbW92ZSBkb3duIGJ5IENhbGxlckZyYW1l
QW5kUENTaXplIHRvIGFsaWduCisgICAgICAgIGlmIEFSTXY3CisgICAgICAgICAgICBzdWJwIHIx
LCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgdDIKKyAgICAgICAgICAgIG1vdmUgdDIsIHNwCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAor
ICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBjYWxsQ2FsbFNsb3dQYXRoKAorICAgICAgICBzbG93
UGF0aCwKKyAgICAgICAgIyBUaG9zZSBwYXJhbWV0ZXJzIGFyZSByMCBhbmQgcjEKKyAgICAgICAg
bWFjcm8gKHJlc3RvcmVkUENPclRocm93LCBjYWxsZWVGcmFtZVB0cikKKyAgICAgICAgICAgIGJ0
cHogY2FsbGVlRnJhbWVQdHIsIC5kb250VXBkYXRlU1AKKyAgICAgICAgICAgIHJlc3RvcmVTdGF0
ZUFmdGVyQ0NhbGwoKQorICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0ciwgc3AKKyAgICAg
ICAgICAgIGdldChtX2NhbGxlZSwgdDEpCisgICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQxLCB0MCkKKyAgICAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKKworICAgICAg
ICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2Nh
bGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDEKKyAgICAgICAgICAgIGJ0cHogdDEsIChjb25zdGV4cHIg
Q2FsbExpbmtJbmZvOjpwb2x5bW9ycGhpY0NhbGxlZU1hc2spLCAubm90UG9seW1vcnBoaWMKKyAg
ICAgICAgICAgICMgcHJlcGFyZUNhbGwgaW4gTExJbnQgZG9lcyBub3QgdW50YWcgcmV0dXJuIGFk
ZHJlc3MuIFNvIHdlIG5lZWQgdG8gdW50YWcgdGhhdCBpbiB0aGUgdHJhbXBvbGluZSBzZXBhcmF0
ZWx5LgorICAgICAgICAgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5
bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3Jw
aGljIHRodW5rIHNpZGUuCisgICAgICAgICAgICBwcmVwYXJlUG9seW1vcnBoaWMob3Bjb2RlTmFt
ZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0
ZXIsIGRpc3BhdGNoLCBKU0VudHJ5UHRyVGFnKQorICAgICAgICAgICAgam1wIC5nb1BvbHltb3Jw
aGljCisKKyAgICAgICAgLm5vdFBvbHltb3JwaGljOgorICAgICAgICAgICAgYnFuZXEgdDAsIHQx
LCAub3BDYWxsU2xvdworICAgICAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisK
KyAgICAgICAgLmdvUG9seW1vcnBoaWM6CisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLnUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVz
dGluYXRpb25bdDVdLCB0NQorICAgICAgICAgICAgaW52b2tlQ2FsbChvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlz
cGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworICAgICAgICAub3BDYWxsU2xvdzoKKyAg
ICAgICAgICAgICMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorICAgICAgICAgICAg
IyB0MiBpcyBDYWxsTGlua0luZm8qCisgICAgICAgICAgICAjIHQzIGlzIGNhbGxlcidzIEpTR2xv
YmFsT2JqZWN0CisgICAgICAgICAgICBhZGRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8sIHQ1LCB0MiAjIENhbGxMaW5rSW5mbyogaW4gdDIKKyAgICAgICAgICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9zbG93UGF0aENh
bGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDMKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDNdLCB0Mwor
ICAgICAgICAgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICAgICAgICAgIGNhbGxUYXJnZXRGdW5j
dGlvbiglb3Bjb2RlTmFtZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgSlNFbnRyeVB0clRhZykKKyAg
ICAgICAgLmRvbnRVcGRhdGVTUDoKKyAgICAgICAgICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9z
bG93X3BhdGhfdHJhbXBvbGluZQorICAgICAgICBlbmQpCitlbmQKKwogbGxpbnRPcChvcF9yZXQs
IE9wUmV0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKICAgICBjaGVja1N3aXRjaFRvSklU
Rm9yRXBpbG9ndWUoKQogICAgIGdldChtX3ZhbHVlLCB0MikKQEAgLTMwNDYsOCArMzEyMiw4IEBA
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jfb3BlbiwgT3BJdGVyYXRvck9wZW4sIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoCiAgICAgICAgIG1vdmUgMSwgZHN0CiAgICAgZW5kCiAK
LQotICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVy
YXRvcl9vcGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVy
YXRvciwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQs
IG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRB
cmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2Fs
bEhlbHBlcihvcF9pdGVyYXRvcl9vcGVuLCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5f
Y2FsbCwgT3BJdGVyYXRvck9wZW4sIG1faXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVw
YXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1v
cnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dl
dEJ5SWRDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGlu
Z1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXRCeUlkU3Rh
cnQ6CiAgICAgbWFjcm8gc3RvcmVOZXh0QW5kRGlzcGF0Y2godmFsdWUpCkBAIC0zMTA0LDcgKzMx
ODAsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wSXRlcmF0b3JO
ZXh0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgIGVuZAogCiAgICAgIyBVc2UgbV92
YWx1ZSBzbG90IGFzIGEgdG1wIHNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSB0byBpdCBsYXRl
ci4KLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX25leHQsIF9sbGludF9zbG93X3BhdGhfaXRl
cmF0b3JfbmV4dF9jYWxsLCBPcEl0ZXJhdG9yTmV4dCwgbV9uZXh0UmVzdWx0UHJvZmlsZSwgbV92
YWx1ZSwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0RG9uZUNoZWNrcG9pbnQs
IG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRB
cmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKKyAgICBtZXRhZGF0YSh0NSwgdDApCisgICAgY2Fs
bEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRf
Y2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxhckNhbGwsIHByZXBhcmVGb3JQb2x5bW9y
cGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1JlZ3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0
RG9uZUNoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5n
VGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNDb3VudCkKIAogLmdldERvbmVTdGFy
dDoKICAgICBtYWNybyBzdG9yZURvbmVBbmRKbXBUb0dldFZhbHVlKGRvbmVWYWx1ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIKaW5kZXggY2FkMjE1YWUzNDNjYzg2
YjNhMTBhNWZhZjY2Mjg0MjRhOWMwMmYyOC4uYzcwMTY2NGFiMmJmZmYyMDdkMTJlNWUyMjJmOTY0
Y2ZhOTEyYTJmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20v
Y2xvb3AucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIK
QEAgLTU3Miw2ICs1NzIsMTQgQEAgZGVmIGNsb29wRW1pdENhbGxTbG93UGF0aFZvaWQob3BlcmFu
ZHMpCiAgICAgJGFzbS5wdXRjICIje29wZXJhbmRzWzBdLmNMYWJlbH0oI3tvcGVyYW5kc1sxXS5j
bER1bXB9LCAje29wZXJhbmRzWzJdLmNsRHVtcH0pOyIKIGVuZAogCitkZWYgY2xvb3BFbWl0Q2Fs
bFNsb3dQYXRoNChvcGVyYW5kcykKKyAgICAkYXNtLnB1dGMgInsiCisgICAgJGFzbS5wdXRjICIg
ICAgY2xvb3BTdGFjay5zZXRDdXJyZW50U3RhY2tQb2ludGVyKHNwLnZwKCkpOyIKKyAgICAkYXNt
LnB1dGMgIiAgICBTbG93UGF0aFJldHVyblR5cGUgcmVzdWx0ID0gI3tvcGVyYW5kc1swXS5jTGFi
ZWx9KCN7b3BlcmFuZHNbMV0uY2xEdW1wfSwgI3tvcGVyYW5kc1syXS5jbER1bXB9LCAje29wZXJh
bmRzWzNdLmNsRHVtcH0sICN7b3BlcmFuZHNbNF0uY2xEdW1wfSk7IgorICAgICRhc20ucHV0YyAi
ICAgIGRlY29kZVJlc3VsdChyZXN1bHQsIHQwLCB0MSk7IgorICAgICRhc20ucHV0YyAifSIKK2Vu
ZAorCiBjbGFzcyBJbnN0cnVjdGlvbgogICAgIGRlZiBsb3dlckNfTE9PUAogICAgICAgICBjYXNl
IG9wY29kZQpAQCAtMTE3NSw2ICsxMTgzLDkgQEAgZGVmIGxvd2VyQ19MT09QCiAgICAgICAgIHdo
ZW4gImNsb29wQ2FsbFNsb3dQYXRoVm9pZCIKICAgICAgICAgICAgIGNsb29wRW1pdENhbGxTbG93
UGF0aFZvaWQob3BlcmFuZHMpCiAKKyAgICAgICAgd2hlbiAiY2xvb3BDYWxsU2xvd1BhdGg0Igor
ICAgICAgICAgICAgY2xvb3BFbWl0Q2FsbFNsb3dQYXRoNChvcGVyYW5kcykKKwogICAgICAgICAj
IEZvciBkZWJ1Z2dpbmcgb25seS4gVGhpcyBpcyB1c2VkIHRvIGluc2VydCBpbnN0cnVtZW50YXRp
b24gaW50byB0aGUKICAgICAgICAgIyBnZW5lcmF0ZWQgTExJbnRBc3NlbWJseS5oIGR1cmluZyBs
bGludCBkZXZlbG9wbWVudCBvbmx5LiBEbyBub3QgdXNlCiAgICAgICAgICMgZm9yIHByb2R1Y3Rp
b24gY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2lu
c3RydWN0aW9ucy5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0
aW9ucy5yYgppbmRleCA5Y2JhNWQ2OGYzY2FkMzFjZmEyZDk2ZWE0YzliYmE4ZGZlOWRhOWIyLi5j
MDBiNTE2YjMzZWM1YWQxMjlkNTZjM2ZmZDIzZTlmNWVjMjA1ZjdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCkBAIC00NTksNiArNDU5
LDcgQEAKICAgICAgImNsb29wQ2FsbE5hdGl2ZSIsICAgICAgICAgIyBvcGVyYW5kczogY2FsbGVl
CiAgICAgICJjbG9vcENhbGxTbG93UGF0aCIsICAgICAgICMgb3BlcmFuZHM6IGNhbGxUYXJnZXQs
IGN1cnJlbnRGcmFtZSwgY3VycmVudFBDCiAgICAgICJjbG9vcENhbGxTbG93UGF0aFZvaWQiLCAg
ICMgb3BlcmFuZHM6IGNhbGxUYXJnZXQsIGN1cnJlbnRGcmFtZSwgY3VycmVudFBDCisgICAgICJj
bG9vcENhbGxTbG93UGF0aDQiLCAgICAgICMgb3BlcmFuZHM6IGNhbGxUYXJnZXQsIGEwLCBhMSwg
YTIsIGEzCiAKICAgICAgIyBGb3IgZGVidWdnaW5nIG9ubHk6CiAgICAgICMgVGFrZXMgbm8gb3Bl
cmFuZHMgYnV0IHNpbXBseSBlbWl0cyB3aGF0ZXZlciBmb2xsb3dzIGluIC8vIGNvbW1lbnRzIGFz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFz
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAppbmRl
eCA5NTgxMDVkMzI2NmRkZmY4NWJlNWQ3NmQ4N2NkZTVjYjMzMTMxNGMzLi40OGZkOTJmOGI2YThl
ZDI5NDRhNzI0OGIxNTdkMmFmNzI3NzNjNWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKQEAgLTU3LDYgKzU3LDcgQEAgaW5saW5lIGJvb2wg
aXNDYWxsKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIAogY2xhc3MgRXhlY3V0YWJsZUJh
c2UgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsKIAog
cHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAppbmRleCBjOWQwMGY2OGE2YzJlM2QxZTUzYzhjZGQyNWZlOWVhMzAzYTFk
MzJlLi42NjIwN2U1YTFlMmRkNjA0MTBmOWZjNGY2MGNmZjZiZWIzYTQxMmYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAt
MjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGFibGUuaCIKICNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0JveC5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCmluZGV4IGY2YTA1YjA2NWUzMmQ4YWVj
ZDU2N2JmNmFiNzRhYWU2Mzg5OTc3NzguLmU0Nzc5MmI4NzY0ZTkxZDUwNjEwZTRjZGRhZTMyMzFj
MTQ1OWUyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HYXRlLmgKQEAgLTMzLDYgKzMz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihqaXRDYWdlUHRyLCBOb1B0clRhZykgXAogICAg
IHYodGFpbENhbGxKU0VudHJ5UHRyVGFnLCBOb1B0clRhZykgXAogICAgIHYodGFpbENhbGxKU0Vu
dHJ5U2xvd1BhdGhQdHJUYWcsIE5vUHRyVGFnKSBcCisgICAgdih0YWlsQ2FsbFdpdGhvdXRVbnRh
Z0pTRW50cnlQdHJUYWcsIE5vUHRyVGFnKSBcCiAgICAgdihsb29wT1NSRW50cnksIE5vUHRyVGFn
KSBcCiAgICAgdihlbnRyeU9TUkVudHJ5LCBOb1B0clRhZykgXAogICAgIHYod2FzbU9TUkVudHJ5
LCBOb1B0clRhZykgXApAQCAtNDYsMjAgKzQ3LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVm
aW5lIEpTQ19KU19HQVRFX09QQ09ERVModikgXAogICAgIHYob3BfY2FsbCwgSlNFbnRyeVB0clRh
ZykgXAotICAgIHYob3BfdGFpbF9jYWxsLCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9jb25z
dHJ1Y3QsIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2l0ZXJhdG9yX25leHQsIEpTRW50cnlQ
dHJUYWcpIFwKICAgICB2KG9wX2l0ZXJhdG9yX29wZW4sIEpTRW50cnlQdHJUYWcpIFwKLSAgICB2
KG9wX2NhbGxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2Nh
bGxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jb25zdHJ1Y3Rfc2xv
dywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdywg
SlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfdmFyYXJnc19zbG93
LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50c19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2NvbnN0cnVj
dF92YXJhcmdzX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAorICAgIHYob3BfY2FsbF92
YXJhcmdzLCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9jb25zdHJ1Y3RfdmFyYXJncywgSlNF
bnRyeVB0clRhZykgXAorICAgIHYob3BfY2FsbF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAg
dihvcF90YWlsX2NhbGxfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0
X3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9yX25leHRfc2xvdywgSlNF
bnRyeVB0clRhZykgXAorICAgIHYob3BfaXRlcmF0b3Jfb3Blbl9zbG93LCBKU0VudHJ5UHRyVGFn
KSBcCisgICAgdihvcF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYo
b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvdywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9w
X2NvbnN0cnVjdF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKICAgICB2KG9wX2NhbGxf
ZXZhbF9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKLSAgICB2KG9wX2l0ZXJhdG9yX25l
eHRfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9pdGVyYXRvcl9vcGVu
X3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggOWNmNWZlYTAxOTg0OWRi
NmU2NjA5MTBiYjk0NTFjZDI3YzI1ZmJjNS4uZWM0ODIyZjVhOTAzZDRmYjg1Y2I0ODQxYTRjZDY4
ZjBjMTBiZmJmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMTM4LDYg
KzEzOCw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgogI2luY2x1ZGUgIkpTV2l0
aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCisjaW5jbHVkZSAiTExJbnRFeGNlcHRp
b25zLmgiCiAjaW5jbHVkZSAiTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCIKICNpbmNsdWRlICJN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuaCIKQEAgLTkxMCw2ICs5MTEsNDEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2QKICAgICBy
ZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxpbnRfaW50ZXJuYWxfZnVu
Y3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUxpbmtDYWxsKCkKK3sKKyNpZiBFTkFCTEUoSklUKQor
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIGdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsK
KyNlbmRpZgorICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxKU0VudHJ5UHRyVGFnPihsbGlu
dF9saW5rX2NhbGxfdHJhbXBvbGluZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkKK3sK
KyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgcmV0
dXJuIGdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS50
ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOworI2VuZGlmCisgICAgcmV0dXJuIExM
SW50OjpjYWxsVG9UaHJvdygqdGhpcykudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4o
KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBWTTo6
Z2V0Q1RJVmlydHVhbENhbGwoQ2FsbE1vZGUgY2FsbE1vZGUpCit7CisjaWYgRU5BQkxFKEpJVCkK
KyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtG
b3IoKnRoaXMsIGNhbGxNb2RlKTsKKyNlbmRpZgorICAgIHN3aXRjaCAoY2FsbE1vZGUpIHsKKyAg
ICBjYXNlIENhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lKTsK
KyAgICBjYXNlIENhbGxNb2RlOjpUYWlsOgorICAgICAgICByZXR1cm4gTExJbnQ6OmdldENvZGVS
ZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGxsaW50X3ZpcnR1YWxfdGFpbF9jYWxsX3RyYW1wb2xp
bmUpOworICAgIGNhc2UgQ2FsbE1vZGU6OkNvbnN0cnVjdDoKKyAgICAgICAgcmV0dXJuIExMSW50
OjpnZXRDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX2NvbnN0cnVj
dF90cmFtcG9saW5lKTsKKyAgICB9CisgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGluZSk7Cit9CisKIFZN
OjpDbGllbnREYXRhOjp+Q2xpZW50RGF0YSgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAppbmRleCA5ZWYzODJjNjBlZTgzNGZjYmIxZDkwODFjNzgxOGZkNzg2N2ZhNDA4Li4zYWJm
NzExYTY1NTJiZTRiMzFhZmU0N2UwNTlmMzMxZTA4OTkxOTFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKQEAgLTEwNiw2ICsxMDYsOCBAQCBjbGFzcyBCYXNpY0Jsb2NrTG9jYXRpb247
CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CiBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lz
dHJ5OwogY2xhc3MgQ2FsbEZyYW1lOworY2xhc3MgQ2FsbExpbmtJbmZvOworZW51bSBjbGFzcyBD
YWxsTW9kZTsKIHN0cnVjdCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZTsKIGNsYXNzIENvZGVC
bG9jazsKIGNsYXNzIENvZGVDYWNoZTsKQEAgLTkwMiw2ICs5MDQsOSBAQCBjbGFzcyBWTSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9k
ZTxWTT4gewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pT
RnVuY3Rpb24sIGJvb2wgY2FuQ29uc3RydWN0KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0
clRhZz4gZ2V0Q1RJTGlua0NhbGwoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCk7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBnZXRDVElWaXJ0dWFsQ2Fs
bChDYWxsTW9kZSk7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGV4Y2VwdGlvbk9mZnNldCgpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCA4NmI4YzUwYWMwNzIzZDc5YjcxODEzMzEyNzc5NzZiMjZjMzlhYzZkLi41MzU2MmQ0OGFm
MTYyZDE1MmI1ODUzZDk4NzllZWJjZTAyMGM2MTA3IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5n
ZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIxLTExLTE0
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gVXNl
IENhbGxMaW5rSW5mbyBpbiBMTEludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjMyNzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGku
CisKKyAgICAgICAgKiBzdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRzLXRvLWJlLWF3YXJl
LW9mLXByb3h5LmpzOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5h
bWUtc2VjdGlvbi5qczoKKyAgICAgICAgKHBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVy
LnZtLmlzV2FzbVN1cHBvcnRlZCk6CisgICAgICAgICogc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
LXdhc20uanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlci52bS5p
c1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1w
bGluZ1Byb2ZpbGVyLmpzOgorICAgICAgICAoZG9lc1RyZWVIYXZlU3RhY2tUcmFjZSk6CisgICAg
ICAgIChydW5UZXN0KToKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9u
LmpzOgorCiAyMDIxLTExLTE0ICBNaWtoYWlsIFIuIEdhZGVsaGEgIDxtaWtoYWlsQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUHJldmVudCBmdXNlZCBtdWx0aXBseSBhZGQgZHVyaW5nIFBhcnNlSW50
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwtbmVlZHMtdG8t
YmUtYXdhcmUtb2YtcHJveHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxsYWJsZS1pbi1mdGwt
bmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMKaW5kZXggNTBjYWVlZDExNDg0MjlmZDFiNWNl
MGIwZmVhZTZiZGRkZTY3MTBiOC4uOTRkYWI0NmQyZDcxODRmMzVkNDNlMmRiNGEyZGQ1NjQxOThi
ZWZmNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRz
LXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxl
LWluLWZ0bC1uZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcwpAQCAtMSw0ICsxLDQgQEAKLS8v
QCBydW5EZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIC0tdXNlQ29uY3VycmVudEpJVD1m
YWxzZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVFNvb249
MTAiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9sZEZvck9w
dGltaXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdX
YXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRocmVzaG9s
ZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZUTE9wdGlt
aXplU29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10cnVlIikK
Ky8vQCBydW5EZWZhdWx0KCItLXZhbGlkYXRlT3B0aW9ucz10cnVlIiwgIi0tdXNlQ29uY3VycmVu
dEpJVD1mYWxzZSIsICItLXVzZUNvbmN1cnJlbnRHQz1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJ
VFNvb249MTAiLCAiLS10aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcD0xMCIsICItLXRocmVzaG9s
ZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXA9MTAwIiwgIi0tdGhyZXNob2xkRm9yT3B0aW1pemVTb29uPTEwMCIsICItLXRo
cmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXA9MTAwMCIsICItLXRocmVzaG9sZEZvckZU
TE9wdGltaXplU29vbj0xMDAwIiwgIi0tdmFsaWRhdGVCQ0U9dHJ1ZSIsICItLXVzZUZUTEpJVD10
cnVlIikKIAogZnVuY3Rpb24gbWFpbigpIHsKICAgICBsZXQgdjE2MjsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzIGIvSlNU
ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKaW5kZXgg
Njg5YTAwNWFiNTU1YTFmYzYwMWE1NGU0ZWJmOTRlOTlhNjY4Zjc3ZS4uNWMyMjBmZDc2Y2RjNWM0
MGU1OWNjNjZlNTczNDJjNzJkOGM3ZjNhYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
c2FtcGxpbmctcHJvZmlsZXItd2FzbS1uYW1lLXNlY3Rpb24uanMKQEAgLTY5LDUgKzY5LDUgQEAK
ICAgICB2YXIgd2FzbUVudHJ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBpbnN0YW5j
ZS5leHBvcnRzLl9wYXJyb3QoMSk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRyeSwgWyJf
c2lsbHkiLCAiKHVua25vd24pIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8Pz4ud2Fz
bS1mdW5jdGlvbltfYmFjb25dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8Pz4ud2Fz
bS1mdW5jdGlvbltfcGFycm90XSIsICJ3YXNtLXN0dWIiLCAiMjQiLCAid2FzbUVudHJ5Il0pOwor
ICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIl9zaWxseSIsICIodW5rbm93bikiLCAiPD8+Lndhc20t
ZnVuY3Rpb25bX2VnZ3NdIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl0iLCAiPD8+Lndhc20t
ZnVuY3Rpb25bX3NwYW1dIiwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3RdIiwgIih1bmtub3du
KSIsICJ3YXNtRW50cnkiXSk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGlu
Zy1wcm9maWxlci13YXNtLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2Fz
bS5qcwppbmRleCBjZDIxZjI4OGMxNDhhNGI3NDA1YmY4NjhkZWY5YjU0NTczNDA1MDQ1Li4wNmRm
MDEyNDk1OTY5ZTI4NDIxODc3ODY5MDEzNWJmMDkwMTBlYzZkIDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3Nh
bXBsaW5nLXByb2ZpbGVyLXdhc20uanMKQEAgLTgsNSArOCw1IEBACiAgICAgdmFyIHdhc21FbnRy
eSA9IGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gaW5zdGFuY2UuZXhwb3J0cy5sb29wKDEw
MDAwMDAwKTsKICAgICB9OwotICAgIHJ1blRlc3Qod2FzbUVudHJ5LCBbIjw/Pi53YXNtLWZ1bmN0
aW9uWzBdIiwgIndhc20tc3R1YiIsICIwIiwgIndhc21FbnRyeSJdKTsKKyAgICBydW5UZXN0KHdh
c21FbnRyeSwgWyI8Pz4ud2FzbS1mdW5jdGlvblswXSIsICIodW5rbm93bikiLCAid2FzbUVudHJ5
Il0pOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2Ft
cGxpbmdQcm9maWxlci5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBs
aW5nUHJvZmlsZXIuanMKaW5kZXggOTY0MmRkYzdjMWU2ZjA2ZTNiMTMyNzljMGU0YTAyNWI1NGRj
YWJmMS4uMWI5MmU5NDg1NGFmNjNmNjdkMDhmNTQ4ODdjNTIxNzkxNGVlMmJmNSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxlci5qcwor
KysgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9zYW1wbGluZ1Byb2ZpbGVyLmpz
CkBAIC03MCwxMSArNzAsMTMgQEAgZnVuY3Rpb24gY2hlY2sobm9kZSkgewogICAgIAogICAgIGxl
dCBub2RlID0gdHJlZTsKICAgICBmb3IgKGxldCBpID0gc3RhY2tUcmFjZS5sZW5ndGg7IGktLTsg
KSB7CisgICAgICAgIGxldCBwcmV2ID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGRy
ZW5bc3RhY2tUcmFjZVtpXV07CiAgICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICAgaWYg
KFZFUkJPU0UpIHsKICAgICAgICAgICAgICAgICBwcmludCgiZmFpbGluZyBvbiAiICsgaSArICIg
OiAiICsgc3RhY2tUcmFjZVtpXSk7CiAgICAgICAgICAgICAgICAgcHJpbnQoSlNPTi5zdHJpbmdp
ZnkodHJlZSkpOworICAgICAgICAgICAgICAgIHByaW50KE9iamVjdC5rZXlzKHByZXYuY2hpbGRy
ZW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQpAQCAtMTA4LDcgKzExMCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoZnVuYywgc3RhY2tUcmFjZU9y
U3RyaW5nKSB7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRUaW1l
IDwgdGltZVRvRmFpbCk7CiAgICAgcHJpbnQoSlNPTi5zdHJpbmdpZnkocm9vdCwgdW5kZWZpbmVk
LCAyKSk7Ci0gICAgZG9lc1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNlLCB0cnVl
LCB0cnVlKTsKKyAgICBkb2VzVHJlZUhhdmVTdGFja1RyYWNlKHJvb3QsIHN0YWNrVHJhY2VPclN0
cmluZywgdHJ1ZSwgdHJ1ZSk7CiAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhY2sgdHJhY2Ui
KTsKIH0KIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0
aW9uLmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL25hbWVTZWN0aW9uLmpzCmluZGV4
IDY4MDVlNjg5ZjVjODc5ZTJjYTUwOWM4OGQzZTdiMzc2ZGUwOWZhYWEuLjMzYzg2YmYxY2RlOWE4
ZGFiMTE4ZTBlNGNiMGJhY2Q1OWI3NDkxZTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9mdW5j
dGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qcworKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVz
dHMvbmFtZVNlY3Rpb24uanMKQEAgLTY5LDQgKzY5LDQgQEAKIGFzc2VydC5lcShzdGFja3RyYWNl
WzNdLCAiPD8+Lndhc20tZnVuY3Rpb25bX2JhY29uXUBbd2FzbSBjb2RlXSIpOwogYXNzZXJ0LmVx
KHN0YWNrdHJhY2VbNF0sICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV1AW3dhc20gY29kZV0iKTsK
IGFzc2VydC5lcShzdGFja3RyYWNlWzVdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3BhcnJvdF1AW3dh
c20gY29kZV0iKTsKLWFzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNv
ZGVdIik7IC8vIHdhc20gZW50cnkKK2Fzc2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHVi
QFtuYXRpdmUgY29kZV0iKTsgLy8gd2FzbSBlbnRyeQo=
</data>
<flag name="commit-queue"
          id="469130"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444181</attachid>
            <date>2021-11-14 11:27:35 -0800</date>
            <delta_ts>2021-11-14 18:44:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232746-20211114112734.patch</filename>
            <type>text/plain</type>
            <size>227865</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MGM4YzUwNTI5Y2RlNTU0ZDVkMTg3Njk5YzQ1ZDFiNGUyNmQ3Nzg0Li44YWE1YjhlYjM5N2E4NGU0
NGIzNWI2YTAwM2UwMmVkMTI0NGVmNTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODAgQEAKKzIwMjEtMTEtMTQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJbmZvIGluIExMSW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3NDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIHBhdGNoIGludGVncmF0ZXMg
bm9ybWFsIENhbGxMaW5rSW5mbyBpbnRvIExMSW50IGFuZCByZW1vdmUgYWRob2MgTExJbnRDYWxs
TGlua0luZm8uCisgICAgICAgIFNvIHRoYXQgd2UgY2FuIHNpbXBsaWZ5IG91ciBJQyBzb2Z0d2Fy
ZSBzdGFjaywgYW5kIHVuaWZ5aW5nIGNhbGwgSUMgbWVjaGFuaXNtIGludG8gb25lIENhbGxMaW5r
SW5mby4KKworICAgICAgICAxLiBMTEludCBjYW4gZnVsbHkgdXNlIG91ciBwb2x5bW9ycGhpYyBj
YWxsIElDLCBhbmQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gcmVzZXQgY2FsbCBJQyB3aGVuCisgICAg
ICAgICAgIHRpZXJpbmcgdXAgZnJvbSBMTEludCB0byBCYXNlbGluZSBKSVQgc2luY2UgYm90aCBu
b3cgdXNlcyB0aGUgc2FtZSBDYWxsTGlua0luZm8gZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAgICAg
IERGRyBhbmQgRlRMIGNhbiBhbHNvIHJldHJpZXZlIGNhbGwgaW5mb3JtYXRpb24gZnJvbSB0aGlz
IENhbGxMaW5rSW5mby4KKyAgICAgICAgMi4gTExJbnQgdmFyYXJncyBjYWxscyBnZXQgdGhlIHNh
bWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uIHRvIEJhc2VsaW5lLiBQcmV2aW91c2x5IGl0IGRvZXMg
bm90IGhhdmUKKyAgICAgICAgICAgY2FsbCBJQy4KKyAgICAgICAgMy4gV2hlbiBKSVQgaXMgZGlz
YWJsZWQsIHdlIGRpc2FibGUgcG9seW1vcnBoaWMgY2FsbCBJQyBzaW5jZSBpdCByZXF1aXJlcyBk
eW5hbWljIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgSW4gdGhhdCBjYXNlLCB3ZSBvbmx5
IHVzZSBtb25vbW9ycGhpYyBvbmUsIHdoaWNoIGlzIHRoZSBzYW1lIHRvIHRoZSBvbGQgTExJbnRD
YWxsTGlua0luZm8uCisgICAgICAgIDQuIENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uIGlzIHNl
dCB1cCBvbmx5IGFmdGVyIEJhc2VsaW5lIEpJVC4gV2UgYWRqdXN0IGNhbGwgSUMgY29kZSBzbyB0
aGF0CisgICAgICAgICAgIHdlIG5vIGxvbmdlciByZWx5IG9uIGRvbmVMb2NhdGlvbiB3aGVuIHVz
aW5nIERhdGFJQy4gVGhpcyBhbGxvd3MgdXMgdG8gc21vb3RobHkgdGllcmluZyB1cAorICAgICAg
ICAgICBmcm9tIExMSW50IHRvIEJhc2VsaW5lIEpJVCB3aGlsZSB1c2luZyB0aGUgc2FtZSBDYWxs
TGlua0luZm8uCisgICAgICAgICAgIFdlIHNldCB1cCBkb25lTG9jYXRpb24gaW4gQmFzZWxpbmUg
SklUIGp1c3QgYmVjYXVzZSBERkcgT1NSIGV4aXQgcmVxdWlyZXMgd2hlbiBleGl0aW5nIHRvCisg
ICAgICAgICAgIEJhc2VsaW5lIEpJVCBjb2RlLgorICAgICAgICA1LiBXZSByZW1vdmUgQ2FsbExp
bmtJbmZvIGZyb20gSklUIGNvbnN0YW50IHBvb2wsIGFuZCB3ZSBzdG9yZSBDYWxsTGlua0luZm8g
aW4gbWV0YWRhdGEgc28gdGhhdAorICAgICAgICAgICBMTEludCBhbmQgQmFzZWxpbmUgSklUIHF1
aWNrbHkgYWNjZXNzIHRvIHRoYXQgYW5kIGtlZXBpbmcgdW5saW5rZWQgQmFzZWxpbmUgSklUIHdv
cmtpbmcuCisgICAgICAgIDYuIFdlIGltcGxlbWVudCBMTEludCB2ZXJzaW9uIG9mIGNhbGwgSUMg
dGh1bmtzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGV2ZW4gd2hlbiBKSVQgaXMgZGlzYWJsZWQu
CisKKyAgICAgICAgU3BlZWRvbWV0ZXIyIGlzIG5ldXRyYWwuIEpldFN0cmVhbTIgaXMgMC43JSBw
cm9ncmVzc2VkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIv
Q29kZUxvY2F0aW9uLmg6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAg
ICAgICAoSlNDOjpzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IpOiBEZWxldGVkLgorICAgICAgICAq
IGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5jcHA6CisgICAgICAgIChKU0M6OnNob3VsZER1bXBEaXNhc3NlbWJseUZvcik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmR1bXBXaXRoTmFtZSBjb25zdCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OmNhbGxMaW5rSW5mb0Zvcik6
CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtJbmZvOjpjbGVhclN0dWIpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldE1v
bm9tb3JwaGljQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhckNhbGxl
ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0lu
Zm86OmVtaXRTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6
ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxs
RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnJldmVydENhbGxUb1N0dWIp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmlzTGlua2VkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpz
dHViIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1cGRhdGVNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Zm9yRWFj
aERlcGVuZGVudENlbGwgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldFNs
b3dTdHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjpjbGVhclNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFz
ZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hl
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0aXNv
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByb2ZpbGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxp
bmVDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hMTEludENh
bGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0VmlydHVhbENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmg6CisgICAg
ICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKToKKyAgICAg
ICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjphZGRVbmxpbmtlZENhbGxMaW5rSW5mbyk6CisgICAgICAgIChK
U0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRD
YWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6
OkpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KToKKyAgICAgICAgKEpTQzo6aGFuZGxlSG9zdENhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlND
Ojp2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRj
aC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtTbG93UGF0aFRvKToKKyAgICAgICAgKEpTQzo6bGlu
a1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU93bmVyKToKKyAgICAgICAgKEpT
Qzo6bGlua01vbm9tb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAg
ICAgICAoSlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6anNUb1dhc21JQ0NvZGVQdHIp
OgorICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5
bW9ycGhpY0NhbGwpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogaml0L1Jl
cGF0Y2hJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpoYW5kbGVIb3N0Q2FsbCk6Cisg
ICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsRm9yV2l0aEZ1bmN0
aW9uKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yUmVndWxhckNv
bnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0ZvclRhaWxDb25z
dHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RD
YWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAg
ICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmluaXRpYWxpemUp
OgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OmxsaW50X2xpbmtfY2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF92aXJ0dWFs
X2NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlSG9zdENhbGwpOgorICAgICAgICAo
SlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1
cCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAg
IChKU0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZW5l
cmljQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVh
dGVKU0dhdGVUaHVuayk6CisgICAgICAgIChKU0M6OkxMSW50OjpjcmVhdGVUYWlsQ2FsbEdhdGUp
OgorICAgICAgICAoSlNDOjpMTEludDo6cmV0dXJuTG9jYXRpb25UaHVuayk6CisgICAgICAgICog
bGxpbnQvTExJbnRUaHVua3MuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3BlcmF0b3IgQ2FsbExpbmtJbmZvKik6CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIG9mZmxpbmVhc20vY2xvb3AucmI6Cisg
ICAgICAgICogb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmI6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlQmFzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6
CisgICAgICAgICogcnVudGltZS9HYXRlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpnZXRDVElMaW5rQ2FsbCk6CisgICAgICAgIChKU0M6OlZNOjpnZXRD
VElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0
Q1RJVmlydHVhbENhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMS0xMS0xNCAg
TWlraGFpbCBSLiBHYWRlbGhhICA8bWlraGFpbEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFByZXZl
bnQgZnVzZWQgbXVsdGlwbHkgYWRkIGR1cmluZyBQYXJzZUludApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IDEyYzRhNWM4Mjc3Y2E3NzAxZDg0OWVmZjY0NjdiZDg4Nzk1OTAw
MDguLmNjNDFmYzAzZDBhMDg2Y2M3N2NlNGU3ZDAwMmRlMTdjODY0MzIwMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY1OSw3ICs2NTksNiBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGJ5dGVjb2RlL0ludGVybmFsRnVu
Y3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFk
YXRhLmgKICAgICBieXRlY29kZS9KdW1wVGFibGUuaAotICAgIGJ5dGVjb2RlL0xMSW50Q2FsbExp
bmtJbmZvLmgKICAgICBieXRlY29kZS9MTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuaAogICAgIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgKICAg
ICBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNGRiYmVmNGRjYTIwMWJlNWJlMDBkMzA5NmE0YTlhZTg1YTYwNTI5ZC4uMmYxZDI5NWUy
ZjQxYWQxNWEyMTRlZGZjNzI5YjFkZTAzNGVkOTY2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCQkwRjBDQUVGQzFFQzREQTZCMDA5NzBEMTIgLyog
SlNIZWFwRmluYWxpemVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwQ0FFRkExRUM0REE2MjAwOTcwRDEyIC8qIEpTSGVhcEZpbmFsaXpl
clByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjBDQUVGRjFFQzREQTg4MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDQUVGRTFF
QzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJG
MUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdElu
ZGV4TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVG
MTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMEYxQTMxQzQyMEJGMDAwMUMwN0QyIC8qIEFp
ckN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxMEYxQTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovOyB9OwogCQkwRjEyREUx
MDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4
Y2VwdGlvbkZ1enouaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzZENEIxNzRBRDY5QjAwNzVC
MzU0IC8qIERlZmVyR0MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTg2LDcgKzE4NSw2IEBACiAJCTBGMjRFNTQ0MTdFQTlGNTkwMEFCQjIxNyAv
KiBHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIx
NyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjI0RTU0NjE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTRG
MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTQ4MTdFRTI3NDkwMEFCQjIxNyAvKiBU
ZW1wUmVnaXN0ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NEExN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guaCAqLzsgfTsKIAkJMEYyNEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8q
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NEIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0
MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3
ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdG
Mjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovOyB9OwpA
QCAtMTE2MSw2ICsxMTU5LDcgQEAKIAkJNjUxMTIzMDcxNDA0NkIwQTAwMkIxMDFEIC8qIHRlc3RS
ZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjUxMTIyRTUxNDA0NjlCQTAwMkIxMDFEIC8qIHRlc3RSZWdFeHAuY3BwICovOyB9OwogCQk2NTE0
RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTE0RjIxNzE4QjNFMTY3MDA5OEZGOEIgLyogQnl0
ZWNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzMDNENjMxNDQ3QjlFMTAwRDNG
OTA0IC8qIFBhcnNlclRva2Vucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTY1M0JDNDNGMjZEMDEzQTYwMEQ4QkUyMCAvKiBZYXJySklUUmVnaXN0
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTNC
QzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NTcwRjVBMUFBNEMzRUEwMDlC
M0MyMyAvKiBSZWdyZXNzMTQxMjc1Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU1NzBGNTkxQUE0QzAwQTAwOUIzQzIzIC8qIFJlZ3Jlc3MxNDEyNzUu
bW0gKi87IH07CiAJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3Q0Y0NTcxOUJGNjY2
MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNjU4ODI0QUYxRTVDRkRCMDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1ODgyNEFF
MUU1Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyODUsNyArMTI4NCw2IEBACiAJCTg2NzA0QjQz
MTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCNDExMkRCOEE4MTAwQTlGRTdCIC8q
IFlhcnJTeW50YXhDaGVja2VyLmggKi87IH07CiAJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2NzA0QjdFMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjcwNEI4
NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODAxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2NTNC
QzQzRjI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzQkM0M0UyNkQwMTNBNjAwRDhCRTIw
IC8qIFlhcnJKSVRSZWdpc3RlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODEx
MkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
clBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2NzA0QjgzMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2ODkxNkIwMTU1RjI4NjMwMENC
MkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODY4OTE2QTkxNTVGMjg1NDAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5MjAsNiAr
MTkxOCw4IEBACiAJCUUzNzUwQ0M4MjUwMkU4N0UwMDZBMEFBQiAvKiBJbnRsRGF0ZVRpbWVGb3Jt
YXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzc1MENDNzI1MDJFODdFMDA2QTBBQUIgLyogSW50bERhdGVUaW1lRm9ybWF0SW5saW5lcy5o
ICovOyB9OwogCQlFMzc4REM4RDI3Mjc2Mjk0MDA0MjdCMEIgLyogSW50bE51bWJlckZvcm1hdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUQ3OTJG
NjFCNDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1hdC5jcHAgKi87IH07CiAJCUUzNzk0
RTc2MUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM3OTRFNzQxQjc3RUI5NzAwNTU0M0FFIC8q
IE1vZHVsZUFuYWx5emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRTM3RTIwRTMyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzN0UyMEUwMjczRjU3NTMw
MEY3MDc1NyAvKiBSZXBhdGNoLmggKi87IH07CisJCUUzN0UyMEU1MjczRjU3NTMwMEY3MDc1NyAv
KiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTM3RTIwRTIyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2hJbmxpbmVzLmggKi87
IH07CiAJCUUzODM1MDBBMjM5MEQ5M0IwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzgzNTAwOTIzOTBEOTM3MDAz
NjMxNkQgLyogV2FzbUdsb2JhbC5oICovOyB9OwogCQlFMzg1MEIxNTIyNkVENjQxMDA5QUJGOUMg
LyogREZHTWluaWZpZWRJRElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzODUwQjE0MjI2RUQ2M0UwMDlBQkY5QyAvKiBERkdNaW5pZmllZElE
SW5saW5lcy5oICovOyB9OwogCQlFMzg2NTJFMzIzN0NBMEM5MDBFMUQ1RUUgLyogQmxvY2tEaXJl
Y3RvcnlCaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzg2NTJFMjIzN0NBMEM4MDBFMUQ1RUUgLyogQmxvY2tEaXJlY3RvcnlCaXRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzOTEsNyArMjM5
MSw2IEBACiAJCTBGMENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEZpbmFsaXplckNhbGxi
YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMy
RjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQg
LyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TExJbnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMEYx
QTIxQzQyMEJGMDAwMUMwN0QyIC8qIEFpckN1c3RvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJDdXN0b20uaDsgcGF0aCA9IGIzL2Fpci9BaXJDdXN0b20uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2Vw
dGlvbkZ1enouY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0
aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTJERTBFMTk3OUQ1
RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEV4Y2VwdGlvbkZ1enouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0
NTQsOCArMjQ1Myw2IEBACiAJCTBGMjRFNTQ1MTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRp
b25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE9wZXJhdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU0NjE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVRPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTQ4
MTdFRTI3NDkwMEFCQjIxNyAvKiBUZW1wUmVnaXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGVtcFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjRFNTUzMTdG
MEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lQ2FsbEZyYW1lU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxG
cmFtZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJh
bWVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQwMzUsNiArNDAzMiw3IEBA
CiAJCTY1MkEzQTIyMTY1MUM2OTcwMEE4MEFGRSAvKiBBNjRET3Bjb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEE2NERPcGNvZGUuY3BwOyBwYXRoID0gZGlzYXNz
ZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTJBM0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBNjRET3Bjb2RlLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvQVJN
NjQvQTY0RE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTMwM0Q2MzE0
NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhcnNlclRva2Vucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
NTNCQzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJlZ2lzdGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySklUUmVnaXN0ZXJzLmg7IHBhdGggPSB5YXJyL1lh
cnJKSVRSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0MDBDMTAw
QTY5QkFGMjAwNTA5ODg3IC8qIFByb3BlcnR5TmFtZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU5hbWVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NTQwQzc5QzFCODJEOTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJBdE9m
ZnNldExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQwQzc5RDFCODJE
OTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJBdE9mZnNldExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyOTUsNyArNDI5Myw2IEBACiAJCTg2NzA0QjdFMTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
WWFyckludGVycHJldGVyLmg7IHBhdGggPSB5YXJyL1lhcnJJbnRlcnByZXRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NjcwNEI3RjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJ
VC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBZYXJySklULmNwcDsg
cGF0aCA9IHlhcnIvWWFyckpJVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
NzA0QjgwMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFlhcnJKSVQuaDsgcGF0aCA9IHlhcnIvWWFyckpJVC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk2NTNCQzQzRTI2RDAxM0E2MDBEOEJFMjAgLyogWWFyckpJVFJl
Z2lzdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJySklUUmVnaXN0
ZXJzLmg7IHBhdGggPSB5YXJyL1lhcnJKSVRSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODY3MDRCODExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyclBhcnNlci5oOyBwYXRoID0geWFyci9Z
YXJyUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NzA0QjgyMTJEQkEz
MzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBZYXJyUGF0dGVybi5jcHA7IHBhdGggPSB5YXJyL1lhcnJQYXR0ZXJuLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY3MDRCODMxMkRCQTMzNzAwQTlGRTdCIC8q
IFlhcnJQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJQYXR0
ZXJuLmg7IHBhdGggPSB5YXJyL1lhcnJQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01MjQ2LDYgKzUyNDMsOSBAQAogCQlFMzc5NEU3MzFCNzdFQjk3MDA1NTQzQUUgLyog
TW9kdWxlQW5hbHl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TW9kdWxlQW5hbHl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc5NEU3
NDFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTW9kdWxlQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTM3Q0ZCMkQyMkYyN0M1NzAwOUE3QjM4IC8qIFdhc21Db21waWxhdGlvbk1vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNvbXBpbGF0aW9uTW9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzN0UyMEUwMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTM3RTIwRTEyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzN0UyMEUyMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBh
dGNoSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzgwQTc2QjFEQ0Q3MTk1MDAw
Rjg5RTYgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVySGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzgwRDY2QjFGMTkyNDlEMDBBNTkwOTUgLyogQnVpbHRpbk5hbWVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0aW5OYW1lcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNt
R2xvYmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21HbG9iYWwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjQ1OCw4ICs2NDU4LDkgQEAKIAkJCQk2MjNBMzdFQjFCODdB
N0JEMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAw
MzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIz
MiAvKiBSZWdpc3RlclNldC5oICovLAotCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBS
ZXBhdGNoLmNwcCAqLywKLQkJCQkwRjI0RTU0QTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5o
ICovLAorCQkJCUUzN0UyMEUxMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoLmNwcCAqLywKKwkJ
CQlFMzdFMjBFMDI3M0Y1NzUzMDBGNzA3NTcgLyogUmVwYXRjaC5oICovLAorCQkJCUUzN0UyMEUy
MjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoSW5saW5lcy5oICovLAogCQkJCTBGQTdBOEVEMThD
RTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovLAogCQkJCTBG
MjRFNTRCMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAqLywK
IAkJCQkwRkVFOTg0MjFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwICov
LApAQCAtODgxNSw3ICs4ODE2LDYgQEAKIAkJCQkwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQlFMzYzN0VFODIzNkU1NkIwMDA5NkJE
MEEgLyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8sCiAJCQkJRTM2MzdFRTcyMzZFNTZCMDAwOTZC
RDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLywKLQkJCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODEx
NTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLywKIAkJCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAq
LywKIAkJCQk1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi8sCiAJCQkJMTRGNzlGNkUyMTZFQUQ1MDAwMDQ2
RDM5IC8qIE1ldGFkYXRhVGFibGUuY3BwICovLApAQCAtMTA1MjUsNyArMTA1MjUsNiBAQAogCQkJ
CUUzNjM3RUU5MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0UyRUE2QjBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzBERTlBMDkxQkU3RDY5RTAwNUQ4OUQ5IC8qIExMSW50QXNzZW1i
bHkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTElu
dENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENBMTRCQkIxNkMw
MEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDMxNEJC
RDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDcyNSw3ICsx
MDcyNCw4IEBACiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90
ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTkyRjU2QjcxRTRFODRC
MjAwMzU5NTNCIC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICov
LAotCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFMzdFMjBFMzI3M0Y1NzUzMDBGNzA3NTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTM3RTIwRTUyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2hJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTlGM0ZCOTI2MTNDNzg5MDA2OUU4OUYgLyogUmVzb3VyY2VFeGhh
dXN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyog
UmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQjY0MkYyNUQ2RkI0RDAwMUFEREI0
IC8qIFJvb3RNYXJrUmVhc29uLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0NvZGVMb2NhdGlvbi5oCmluZGV4IGE2Y2E1YzgxYzUxMDk1ZjgxOThk
OWI4MmRiMTRhNTgxYTI1Y2U2MDkuLjA3NTA0YmEwNGU1OWI2ZDFkY2EyMzU4OGJlZmI1NGRmMTkx
ODVhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxv
Y2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Db2RlTG9jYXRp
b24uaApAQCAtMjcsOCArMjcsNiBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCiAKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQotCiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBj
bGFzcyBOZWFyQ2FsbE1vZGUgOiB1aW50OF90IHsgUmVndWxhciwgVGFpbCB9OwpAQCAtMjY5LDUg
KzI2NywzIEBAIGlubGluZSBDb2RlTG9jYXRpb25Db252ZXJ0aWJsZUxvYWQ8cmVzdWx0VGFnPiBD
b2RlTG9jYXRpb25Db21tb248dGFnPjo6Y29udmVydGliCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCmluZGV4IDA2MjQwZTg3NDM2Mzg3M2I5ZGYyY2M5
ZjM3ZjM4MjkxOGZlN2UyOWUuLmZmOTMwNTg5ZGIyNzExODBkMDk5ZTIzNTZjOTk3ZGM1OWIzNTZl
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
IkpJVENvZGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiV2FzbUNvbXBpbGF0
aW9uTW9kZS5oIgogCiAjaWYgT1MoTElOVVgpCiAjaW5jbHVkZSAiUGVyZkxvZy5oIgpAQCAtNDMs
MjkgKzQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBzaXplX3QgTGlua0J1ZmZlcjo6c19wcm9maWxl
Q3VtbXVsYXRpdmVMaW5rZWRTaXplc1tMaW5rQnVmZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIHNp
emVfdCBMaW5rQnVmZmVyOjpzX3Byb2ZpbGVDdW1tdWxhdGl2ZUxpbmtlZENvdW50c1tMaW5rQnVm
ZmVyOjpudW1iZXJPZlByb2ZpbGVzXTsKIAotYm9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgaWYgKGNvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpICYmIE9wdGlvbnM6OmR1bXBERkdE
aXNhc3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCk7Ci19Ci0KLWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKFdh
c206OkNvbXBpbGF0aW9uTW9kZSBtb2RlKQotewotICAgIGlmIChPcHRpb25zOjphc3luY0Rpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6ZHVtcFdh
c21EaXNhc3NlbWJseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZToKLSAgICAgICAgcmV0
dXJuIE9wdGlvbnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpOwotICAgIGNhc2UgV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdNb2RlOgotICAgIGNhc2UgV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGU6Ci0gICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1i
bHkoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiBMaW5rQnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpbmtCdWZm
ZXI6OmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseUltcGwoKQogewogICAgIHBlcmZvcm1G
aW5hbGl6YXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgKaW5kZXggNWEzZjAwZjA1YzY4NTgyOTU3NzI2NjdmYzIyMzU2N2Y2OGU5MmI4Ny4uMjg1
ZGYwZDFhMTgwOWRiMjBiNDc5NGNkMzEyMDU5ZWZjNmVlMDBlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKQEAgLTQzLDEyICs0Myw2IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1uYW1lc3BhY2UgV2FzbSB7Ci1lbnVtIGNsYXNzIENvbXBpbGF0aW9u
TW9kZSA6IHVpbnQ4X3Q7Ci19Ci0KLWNsYXNzIENvZGVCbG9jazsKLQogLy8gTGlua0J1ZmZlcjoK
IC8vCiAvLyBUaGlzIGNsYXNzIGFzc2lzdHMgaW4gbGlua2luZyBjb2RlIGdlbmVyYXRlZCBieSB0
aGUgbWFjcm8gYXNzZW1ibGVyLCBvbmNlIGNvZGUgZ2VuZXJhdGlvbgpAQCAtNDQ2LDggKzQ0MCw2
IEBAIGNsYXNzIExpbmtCdWZmZXIgewogICAgICAgICA6IChsaW5rQnVmZmVyUmVmZXJlbmNlKS5m
aW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHk8cmVzdWx0UHRyVGFnPigpKQogI2VuZGlmCiAK
LWJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwotCiAjZGVmaW5lIEZJ
TkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlclJlZmVyZW5jZSwgcmVzdWx0UHRy
VGFnLCAuLi4pICBcCiAgICAgRklOQUxJWkVfQ09ERV9JRigoc2hvdWxkRHVtcERpc2Fzc2VtYmx5
Rm9yKGNvZGVCbG9jaykgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpKSwgbGlua0J1ZmZl
clJlZmVyZW5jZSwgcmVzdWx0UHRyVGFnLCBfX1ZBX0FSR1NfXykKIApAQCAtNDc2LDggKzQ2OCw2
IEBAIGJvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKENvZGVCbG9jayopOwogI2RlZmluZSBG
SU5BTElaRV9SRUdFWFBfQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcsIGRh
dGFMb2dGQXJndW1lbnRzRm9ySGVhZGluZykgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKEpTQzo6
T3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpIHx8IEpTQzo6T3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCkgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCksIGxpbmtCdWZmZXJSZWZl
cmVuY2UsIHJlc3VsdFB0clRhZywgZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKQogCi1ib29s
IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOwotCiAjZGVm
aW5lIEZJTkFMSVpFX1dBU01fQ09ERShsaW5rQnVmZmVyUmVmZXJlbmNlLCByZXN1bHRQdHJUYWcs
IC4uLikgIFwKICAgICBGSU5BTElaRV9DT0RFX0lGKChKU0M6Ok9wdGlvbnM6OmFzeW5jRGlzYXNz
ZW1ibHkoKSB8fCBKU0M6Ok9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1
bXBXYXNtRGlzYXNzZW1ibHkoKSksIGxpbmtCdWZmZXJSZWZlcmVuY2UsIHJlc3VsdFB0clRhZywg
X19WQV9BUkdTX18pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmNwcAppbmRleCA1ZDU2NzQxZWZlNjY0MjZlZmNh
MjA1MmFjMjUwOTgzMjIwMjM3N2QwLi43MGRiMGQwMzllYTdlZDYxMWM4YTZlNWQ4MDg5MTNmMGFk
NWJkNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuY3BwCkBAIC0yNiw4ICsyNiwxMSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiSklU
Q29kZS5oIgogI2luY2x1ZGUgIkpTQ1B0clRhZy5oIgorI2luY2x1ZGUgIldhc21Db21waWxhdGlv
bk1vZGUuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC02Myw1ICs2NiwyOCBAQCBDU3RyaW5nIE1hY3JvQXNzZW1ibGVyQ29kZVJlZkJh
c2U6OmRpc2Fzc2VtYmx5KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseQogICAgIHJl
dHVybiBvdXQudG9DU3RyaW5nKCk7CiB9CiAKK2Jvb2wgc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChjb2RlQmxvY2sgJiYgSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSAmJiBPcHRpb25zOjpkdW1wREZH
RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpOworfQorCitib29sIHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihX
YXNtOjpDb21waWxhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAoT3B0aW9uczo6YXN5bmNEaXNh
c3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmR1bXBX
YXNtRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNoIChtb2Rl
KSB7CisgICAgY2FzZSBXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGU6CisgICAgICAgIHJl
dHVybiBPcHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHkoKTsKKyAgICBjYXNlIFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6T01HTW9kZToKKyAgICBjYXNlIFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01H
Rm9yT1NSRW50cnlNb2RlOgorICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2Vt
Ymx5KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IDkyNTU5
MThiMWJhMTc1YTFmNDlkYzMwMjVlYzZmY2E4ODkzOWQzNjQuLjFlYTMyNDU0MTVhYjA4YTQ1Yzdk
M2U1OTU5NjBjNDQ1YjE5ZmY3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaApAQCAtNTQsNiArNTQsMTEgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBXYXNtIHsKK2VudW0gY2xhc3MgQ29tcGls
YXRpb25Nb2RlIDogdWludDhfdDsKK30gLy8gbmFtZXNwYWNlIFdhc20KKworY2xhc3MgQ29kZUJs
b2NrOwogdGVtcGxhdGU8UHRyVGFnPiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiAKIGVu
dW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKQEAgLTM3Nyw3ICszODIsMTAgQEAgY2xhc3MgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlIHsKIAog
ICAgIHZvaWQgZHVtcFdpdGhOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJCYXNlOjpkdW1wV2l0
aE5hbWUoZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGF0YUxvY2F0aW9uKCksIG5hbWUsIG91dCk7Cisg
ICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyQmFz
ZTo6ZHVtcFdpdGhOYW1lKGV4ZWN1dGFibGVBZGRyZXNzKCksIGRhdGFMb2NhdGlvbigpLCBuYW1l
LCBvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHJC
YXNlOjpkdW1wV2l0aE5hbWUobnVsbHB0ciwgbnVsbHB0ciwgbmFtZSwgb3V0KTsKICAgICB9CiAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QgeyBkdW1wV2l0aE5hbWUoIkNv
ZGVQdHIiLCBvdXQpOyB9CkBAIC01MzcsNiArNTQ1LDkgQEAgaW5saW5lIEZ1bmN0aW9uUHRyPHRh
Zz46OkZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IHB0cikKIHsKIH0KIAor
Ym9vbCBzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoQ29kZUJsb2NrKik7Citib29sIHNob3VsZER1
bXBEaXNhc3NlbWJseUZvcihXYXNtOjpDb21waWxhdGlvbk1vZGUpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCBiZTJlOGM4MTFkNmRkZDBjMTg0YmE1ZWQ0ZDk1Nzkz
NmZkMjI1OGEyLi4wMTM4NjBiNjZjMmIxOWE4Y2JiNTk1M2E1ZDBlNDRkZDI3N2ZiZDlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI2
LDYgKzI2LDcgQEAKIAogICAgIDpCYXNpY0Jsb2NrTG9jYXRpb24sCiAgICAgOkJvdW5kTGFiZWws
CisgICAgOkNhbGxMaW5rSW5mbywKICAgICA6RGVidWdIb29rVHlwZSwKICAgICA6RUNNQU1vZGUs
CiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCkBAIC00NCw3ICs0NSw2IEBACiAgICAgOkpT
U2NvcGUsCiAgICAgOkpTVHlwZSwKICAgICA6SlNWYWx1ZSwKLSAgICA6TExJbnRDYWxsTGlua0lu
Zm8sCiAgICAgOlJlc3VsdFR5cGUsCiAgICAgOk9wZXJhbmRUeXBlcywKICAgICA6UHJpdmF0ZUZp
ZWxkUHV0S2luZCwKQEAgLTg0MCw3ICs4NDAsOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxs
TGlua0luZm8sCisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBh
cnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LAogICAgIH0KIApAQCAtODUyLDcgKzg1Myw4IEBACiAgICAgICAgIGFyZ3Y6IHVuc2lnbmVkLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxM
aW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CiAgICAgfQogCkBAIC04NjUsNyArODY3LDggQEAKICAgICAgICAgZWNtYU1vZGU6IEVDTUFNb2Rl
LAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENh
bGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAgICAg
IGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2Zp
bGUsCiAgICAgfQogCkBAIC04NzksNiArODgyLDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGlu
dCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExp
bmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MDAsNiArOTA0LDcgQEAKICAgICAgICAg
Zmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGNhbGxM
aW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmls
ZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0sCkBAIC05MjEsNiArOTI2
LDcgQEAKICAgICAgICAgZmlyc3RWYXJBcmc6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CisgICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAogICAgICAgICBhcnJheVByb2Zp
bGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0K
QEAgLTkzMyw3ICs5MzksOCBAQAogICAgICAgICBhcmd2OiB1bnNpZ25lZCwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7Ci0gICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCisg
ICAgICAgIGNhbGxMaW5rSW5mbzogQ2FsbExpbmtJbmZvLAorICAgICAgICBhcnJheVByb2ZpbGU6
IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgIH0KIApA
QCAtOTQ3LDYgKzk1NCw3IEBACiAgICAgICAgIGZpcnN0VmFyQXJnOiBpbnQsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogeworICAgICAgICBjYWxsTGlua0luZm86IENhbGxMaW5rSW5mbywKICAgICAg
ICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKICAgICB9LApAQCAtMTI0OSw3ICsxMjU3LDggQEAKICAgICBtZXRhZGF0YTogewogICAg
ICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9uTW9kZU1ldGFkYXRhLAogICAgICAgICBp
dGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKLSAgICAgICAgY2FsbExpbmtJbmZvOiBMTElu
dENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJbmZvOiBDYWxsTGlua0luZm8sCisgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBpdGVyYXRvclByb2ZpbGU6
IFZhbHVlUHJvZmlsZSwKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRh
LAogICAgICAgICBuZXh0UHJvZmlsZTogVmFsdWVQcm9maWxlLApAQCAtMTI3Miw3ICsxMjgxLDgg
QEAKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0aW9u
TW9kZU1ldGFkYXRhLAogICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAg
ICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKKyAgICAgICAgY2FsbExpbmtJ
bmZvOiBDYWxsTGlua0luZm8sCisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAog
ICAgICAgICBuZXh0UmVzdWx0UHJvZmlsZTogVmFsdWVQcm9maWxlLAogICAgICAgICBkb25lTW9k
ZU1ldGFkYXRhOiBHZXRCeUlkTW9kZU1ldGFkYXRhLAogICAgICAgICBkb25lUHJvZmlsZTogVmFs
dWVQcm9maWxlLApAQCAtMTM5Myw2ICsxNDAzLDkgQEAKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0
dXJuX2Zyb21fanNfNDQKIG9wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDUKIG9w
IDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDYKK29wIDpsbGludF9jbG9vcF9kaWRf
cmV0dXJuX2Zyb21fanNfNDcKK29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDgK
K29wIDpsbGludF9jbG9vcF9kaWRfcmV0dXJuX2Zyb21fanNfNDkKIAogZW5kX3NlY3Rpb24gOkNM
b29wSGVscGVycwogCkBAIC0xNDE1LDYgKzE0MjgsMTAgQEAKIG9wIDpsbGludF9uYXRpdmVfY29u
c3RydWN0X3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1w
b2xpbmUKIG9wIDpsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQor
b3AgOmxsaW50X2xpbmtfY2FsbF90cmFtcG9saW5lCitvcCA6bGxpbnRfdmlydHVhbF9jYWxsX3Ry
YW1wb2xpbmUKK29wIDpsbGludF92aXJ0dWFsX2NvbnN0cnVjdF90cmFtcG9saW5lCitvcCA6bGxp
bnRfdmlydHVhbF90YWlsX2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRf
ZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZQogb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJh
bXBvbGluZQogb3AgOm5vcm1hbF9vc3JfZXhpdF90cmFtcG9saW5lCkBAIC0xNDIzLDYgKzE0NDAs
OCBAQAogb3AgOmxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb24KIG9wIDpvcF9jYWxsX3Jl
dHVybl9sb2NhdGlvbgogb3AgOm9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb24KK29wIDpvcF9j
YWxsX3ZhcmFyZ3NfcmV0dXJuX2xvY2F0aW9uCitvcCA6b3BfY29uc3RydWN0X3ZhcmFyZ3NfcmV0
dXJuX2xvY2F0aW9uCiBvcCA6b3BfY2FsbF92YXJhcmdzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBv
cCA6b3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb24KIG9wIDpvcF9nZXRf
YnlfaWRfcmV0dXJuX2xvY2F0aW9uCkBAIC0xNDM4LDE1ICsxNDU3LDE1IEBACiBvcCA6b3BfY29u
c3RydWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfaXRlcmF0b3Jfb3Blbl9zbG93X3Jl
dHVybl9sb2NhdGlvbgogb3AgOm9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5fbG9jYXRpb24K
LW9wIDpvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3Nsb3df
cmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3df
cmV0dXJuX2xvY2F0aW9uCiBvcCA6b3BfdGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9j
YXRpb24KIG9wIDpvcF9jYWxsX2V2YWxfc2xvd19yZXR1cm5fbG9jYXRpb24KIAogb3AgOmpzX3Ry
YW1wb2xpbmVfb3BfY2FsbAotb3AgOmpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxsCiBvcCA6anNf
dHJhbXBvbGluZV9vcF9jb25zdHJ1Y3QKK29wIDpqc190cmFtcG9saW5lX29wX2NhbGxfdmFyYXJn
cworb3AgOmpzX3RyYW1wb2xpbmVfb3BfY29uc3RydWN0X3ZhcmFyZ3MKIG9wIDpqc190cmFtcG9s
aW5lX29wX2l0ZXJhdG9yX25leHQKIG9wIDpqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW4K
IG9wIDpqc190cmFtcG9saW5lX29wX2NhbGxfc2xvdwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQu
aAppbmRleCA0ZjQ3YzhiY2NmOGU1NzQ4YWE5YjBmMzZlNmYzNjMwNWFkYzMwMDExLi4yNzBjZDZm
MWQwMmY0NGQ1M2RiM2U2YWE2M2FmZmExNWUwYzA5MjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNr
cG9pbnQuaApAQCAtMTgwLDcgKzE4MCw3IEBAIHB0cmRpZmZfdCBzdGFja09mZnNldEluUmVnaXN0
ZXJzRm9yQ2FsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHVuc2lnbmVkIGNoZWNrCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+Ci1MTEludENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVj
a3BvaW50SW5kZXgpCitDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mb0ZvcihCeXRlY29kZU1ldGFk
YXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewogICAgIFVOVVNFRF9Q
QVJBTShjaGVja3BvaW50SW5kZXgpOwogICAgIHJldHVybiBtZXRhZGF0YS5tX2NhbGxMaW5rSW5m
bzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAK
aW5kZXggM2I4MDNiMzhhNzg2OWI0OTM4OWMwNzkwYWJjOGJlYjhkNDBhNTU4YS4uYmRhYjM5NjEw
NzA0MDZkYzk3ZjdiYjc5OWUwYTFjNDI5YWYwMzZjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNs
dWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAotI2lm
IEVOQUJMRShKSVQpCiBuYW1lc3BhY2UgSlNDIHsKIAogQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBD
YWxsTGlua0luZm86OmNhbGxUeXBlRm9yKE9wY29kZUlEIG9wY29kZUlEKQpAQCAtODIsMTEgKzgx
LDEzIEBAIENhbGxMaW5rSW5mbzo6fkNhbGxMaW5rSW5mbygpCiAKIHZvaWQgQ2FsbExpbmtJbmZv
OjpjbGVhclN0dWIoKQogeworI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCFzdHViKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fc3R1Yi0+Y2xlYXJDYWxsTm9kZXNGb3IodGhpcyk7CiAgICAg
bV9zdHViID0gbnVsbHB0cjsKKyNlbmRpZgogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5r
KFZNJiB2bSkKQEAgLTExMywxOSArMTE0LDIxIEBAIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZG9uZUxvY2F0aW9uKCkKICAgICByZXR1cm4gbV9kb25l
TG9jYXRpb247CiB9CiAKLXN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IHBvbHltb3JwaGljQ2Fs
bGVlTWFzayA9IDE7Ci0KIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNb25vbW9ycGhpY0NhbGxlZShW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0Rp
cmVjdCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNh
bGxlZSkgJiBwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICBtX2NhbGxlZU9yQ29kZUJsb2Nr
LnNldCh2bSwgb3duZXIsIGNhbGxlZSk7CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgCisgICAgaWYg
KGlzRGF0YUlDKCkpCiAgICAgICAgIHUuZGF0YUlDLm1fbW9ub21vcnBoaWNDYWxsRGVzdGluYXRp
b24gPSBjb2RlUHRyOwogICAgIGVsc2UgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwodS5jb2RlSUMubV9jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIpKTsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24sIGNhbGxlZSk7
CisjZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiAg
ICAgfQogfQogCkBAIC0xMzUsOCArMTM4LDEzIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpjbGVhckNh
bGxlZSgpCiAgICAgbV9jYWxsZWVPckNvZGVCbG9jay5jbGVhcigpOwogICAgIGlmIChpc0RhdGFJ
QygpKQogICAgICAgICB1LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uID0gbnVs
bHB0cjsKLSAgICBlbHNlIGlmICghY2xlYXJlZEJ5SmV0dGlzb24oKSkKKyAgICBlbHNlIGlmICgh
Y2xlYXJlZEJ5SmV0dGlzb24oKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uLCBudWxscHRy
KTsKKyNlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYK
KyAgICB9CiB9CiAKIEpTT2JqZWN0KiBDYWxsTGlua0luZm86OmNhbGxlZSgpCkBAIC0yMjQsNiAr
MjMyLDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiAgICAgCiAgICAg
aWYgKGlzTGlua2VkKCkpIHsKICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQp
CiAgICAgICAgICAgICBpZiAoIXN0dWIoKS0+dmlzaXRXZWFrKHZtKSkgewogICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp2ZXJib3NlT1NSKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coCkBAIC0yMzQsNiArMjQzLDkgQEAgdm9pZCBDYWxsTGlua0luZm86OnZp
c2l0V2VhayhWTSYgdm0pCiAgICAgICAgICAgICAgICAgdW5saW5rKHZtKTsKICAgICAgICAgICAg
ICAgICBtX2NsZWFyZWRCeUdDID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiAgICAgICAgIH0gZWxz
ZSBpZiAoIXZtLmhlYXAuaXNNYXJrZWQobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSkpIHsKICAg
ICAgICAgICAgIGlmIChpc0RpcmVjdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkpIHsKQEAgLTI4MCwxMyArMjkyLDE0IEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQp
CiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVT
aHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCiB7CiAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFr
ZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oc2h1ZmZsZURhdGEpOwogICAgIG1fZnJhbWVT
aHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFNjb3BlZExhbWJkYTx2
b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAKQEAgLTM0NSw3ICszNTgsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bAogICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxs
TGlua0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgU2NvcGVkTGFtYmRhPHZvaWQoKT4mJiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRh
SUM6Ok5vKTsKQEAgLTM1OCw3ICszNzEsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUgogICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFNjb3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsK
QEAgLTM2Niw3ICszNzksNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmCiAKIHZvaWQgQ2FsbExp
bmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKIHsKLSAgICBz
ZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5rQ2FsbCgpLmNvZGUoKSk7CiAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBv
ZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KQEAg
LTM3NiwyMSArMzg5LDMxIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgo
Vk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mCiAgICAgaml0Lm1vdmUo
Y2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KKyNlbmRpZgogCi12b2lkIENhbGxMaW5rSW5mbzo6
aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENh
bGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3Zv
aWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgQ2FsbFR5cGUgY2FsbFR5
cGUsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZy
YW1lU2h1ZmZsZURhdGEpCiB7Ci0gICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtl
ZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKLSAgICBzZXRVcENhbGwodW5saW5rZWRDYWxs
TGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7Ci0gICAgbV9kb25lTG9jYXRpb24gPSB1bmxp
bmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247Ci0gICAgaWYgKHVubGlua2VkQ2FsbExpbmtJ
bmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVTaHVmZmxlRGF0
YSk7CisgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KTsKKyAgICBt
X2NhbGxUeXBlID0gY2FsbFR5cGU7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBHUFJSZWcgY2FsbGVl
R1BSID0gR1BSSW5mbzo6cmVnVDA7CisgICAgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IEdQUklu
Zm86OnJlZ1QyOworICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOworICAgIGlmIChmcmFtZVNo
dWZmbGVEYXRhKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJl
IGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRh
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZv
LmZyYW1lU2h1ZmZsZURhdGEpOworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5p
cXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqZnJhbWVTaHVmZmxlRGF0YSk7CiAgICAgfQotICAg
IHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKICAgICB1LmRhdGFJQy5tX2NhbGxMaW5r
SW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlv
bih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpKTsKKyNlbmRpZgorICAgIHNldFVzZXNEYXRhSUNzKFVzZURh
dGFJQzo6WWVzKTsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElMaW5r
Q2FsbCgpLmNvZGUoKSk7CisgICAgLy8gSWYgSklUIGlzIGRpc2FibGVkLCB3ZSBzaG91bGQgbm90
IHN1cHBvcnQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNhbGwgSUMuCisgICAgaWYgKCFPcHRpb25z
Ojp1c2VKSVQoKSkKKyAgICAgICAgZGlzYWxsb3dTdHVicygpOwogfQogCisjaWYgRU5BQkxFKEpJ
VCkKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CkBAIC00MDYsNyArNDI5
LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
IGppdCkKICAgICB9KTsKIH0KIAotdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKQordm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQ
YXRoKENDYWxsSGVscGVycyYgaml0LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JU
YWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwogCkBAIC00NjIs
NiArNDg1LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxv
Y2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gdGFyZ2V0KQogCiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbCh1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiwgdGFyZ2V0KTsKIH0KKyNl
bmRpZgogCiB2b2lkIENhbGxMaW5rSW5mbzo6c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCiB7CkBAIC00ODMsMTEg
KzUwNywxNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6cmV2ZXJ0Q2FsbFRvU3R1YigpCiAgICAgICAg
IG1fY2FsbGVlT3JDb2RlQmxvY2suY2xlYXIoKTsKICAgICAgICAgdS5kYXRhSUMubV9tb25vbW9y
cGhpY0NhbGxEZXN0aW5hdGlvbiA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUo
SklUKQogICAgICAgICBDQ2FsbEhlbHBlcnM6OnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNo
UHRyV2l0aFBhdGNoKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFydE9mQnJhbmNoUHRy
V2l0aFBhdGNoT25SZWdpc3Rlcih1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uKSwgY2FsbGVlR1BS
KCksIG51bGxwdHIpOworI2Vsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyNlbmRpZgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCiB2b2lkIENhbGxMaW5rSW5m
bzo6c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKIHsK
ICAgICBjbGVhclN0dWIoKTsKQEAgLTUwNCw3ICs1MzMsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6
c2V0U3R1YihSZWY8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+JiYgbmV3U3R1YikKICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0dWItPmNv
ZGUoKS5jb2RlKCkpKTsKICAgICB9CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0j
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCmluZGV4IGU1Zjc3Y2YzN2JmMjY2ZjRiOWM5M2M1MGNmOTk2ZDIxYzY2
OGNlNDUuLjE4NDcxODcwM2VlMGMwYmUyOTUzNWIyMTY2MTU5YWYzMjg3MGNkYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTI4LDI1ICsy
OCwyOSBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCiAjaW5jbHVkZSAiQ2Fs
bE1vZGUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIlBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2lu
Y2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNp
ZiBFTkFCTEUoSklUKQotCiBjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBFeGVjdXRhYmxlQmFz
ZTsKIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgSlNGdW5jdGlvbjsKK2NsYXNzIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCitz
dHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiBzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87
CiAKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiB7CiBwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKKwogICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAg
ICAgICAgQ2FsbCwKQEAgLTU5LDYgKzYzLDggQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGlj
IFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICAgICAgRGlyZWN0Q29u
c3RydWN0LAogICAgICAgICBEaXJlY3RUYWlsQ2FsbAogICAgIH07CisKKyAgICBzdGF0aWMgY29u
c3RleHByIHVpbnRwdHJfdCBwb2x5bW9ycGhpY0NhbGxlZU1hc2sgPSAxOwogICAgIAogICAgIHN0
YXRpYyBDYWxsVHlwZSBjYWxsVHlwZUZvcihPcGNvZGVJRCBvcGNvZGVJRCk7CiAKQEAgLTE3NCwz
NSArMTgwLDQzIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5l
bE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBpc1ZhcmFyZ3NDYWxsVHlwZShz
dGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSkpOwogICAgIH0KIAotICAgIGJvb2wgaXNM
aW5rZWQoKSBjb25zdCB7IHJldHVybiBtX3N0dWIgfHwgbV9jYWxsZWVPckNvZGVCbG9jazsgfQor
ICAgIGJvb2wgaXNMaW5rZWQoKSBjb25zdCB7IHJldHVybiBzdHViKCkgfHwgbV9jYWxsZWVPckNv
ZGVCbG9jazsgfQogICAgIHZvaWQgdW5saW5rKFZNJik7CiAKKyNpZiBFTkFCTEUoSklUKQogICAg
IHZvaWQgc2V0VXBDYWxsKENhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlR1BSKQogICAg
IHsKICAgICAgICAgbV9jYWxsVHlwZSA9IGNhbGxUeXBlOwogICAgICAgICBtX2NhbGxlZUdQUiA9
IGNhbGxlZUdQUjsKICAgICB9CiAKLSAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpOwotCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BS
OyB9CisjZW5kaWYKKworICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIENhbGxUeXBlLCBC
eXRlY29kZUluZGV4LCBDYWxsRnJhbWVTaHVmZmxlRGF0YSopOwogICAgIAogICAgIGVudW0gY2xh
c3MgVXNlRGF0YUlDIDogdWludDhfdCB7CiAgICAgICAgIFllcywKICAgICAgICAgTm8KICAgICB9
OwogCisjaWYgRU5BQkxFKEpJVCkKIHByaXZhdGU6Ci0gICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9v
bCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBX
QVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxs
LCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOwogcHVibGljOgogICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1p
dERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFNj
b3BlZExhbWJkYTx2b2lkKCk+JiYgcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBTY29wZWRMYW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYpOwotICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7Cisg
ICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBTY29wZWRM
YW1iZGE8dm9pZCgpPiYmIHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1Bh
dGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKICAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1Bh
dGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKworICAgIHZv
aWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyAgICB2b2lkIHNldERpcmVjdENhbGxUYXJnZXQo
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOworI2VuZGlmCisKICAgICB2b2lkIHJl
dmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpA
QCAtMjE3LDcgKzIzMSw2IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdT
ZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIG1fZG9uZUxvY2F0aW9uID0gZG9u
ZUxvY2F0aW9uOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKIAog
ICAgIGJvb2wgYWxsb3dTdHVicygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdHViczsgfQogCkBA
IC0yMzcsNyArMjUwLDYgQEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKICAgICB2b2lkIHNldENvZGVCbG9jayhWTSYsIEpT
Q2VsbCosIEZ1bmN0aW9uQ29kZUJsb2NrKik7CiAgICAgdm9pZCBjbGVhckNvZGVCbG9jaygpOwog
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2soKTsKLSAgICB2b2lkIHNldERpcmVjdENh
bGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4pOwogCiAgICAgdm9pZCBz
ZXRMYXN0U2VlbkNhbGxlZShWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBjYWxs
ZWUpOwogICAgIHZvaWQgY2xlYXJMYXN0U2VlbkNhbGxlZSgpOwpAQCAtMjQ3LDIyICsyNTksMTgg
QEAgY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxs
TGlua0luZm8+IHsKICAgICB2b2lkIHNldEV4ZWN1dGFibGVEdXJpbmdDb21waWxhdGlvbihFeGVj
dXRhYmxlQmFzZSopOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCk7CiAgICAgCisj
aWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHNldFN0dWIoUmVmPFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lPiYmKTsKKyNlbmRpZgogICAgIHZvaWQgY2xlYXJTdHViKCk7CiAKICAgICBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZSogc3R1YigpIGNvbnN0CiAgICAgeworI2lmIEVOQUJMRShKSVQp
CiAgICAgICAgIHJldHVybiBtX3N0dWIuZ2V0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTbG93
U3R1YihSZWY8SklUU3R1YlJvdXRpbmU+JiYgbmV3U2xvd1N0dWIpCi0gICAgewotICAgICAgICBt
X3Nsb3dTdHViID0gV1RGTW92ZShuZXdTbG93U3R1Yik7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVh
clNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOworI2Vsc2UK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKICAgICB9CiAKICAgICBib29sIHNlZW5P
bmNlKCkKQEAgLTMzMCwxOSArMzM4LDE3IEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQ
YWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHVpbnQzMl90KiBhZGRyZXNz
T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCi0gICAgewotICAgICAgICByZXR1cm4g
Jm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7Ci0gICAgfQotI2VuZGlmCi0KICAgICB1
aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBzZXRNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCk7CisgICAgdm9p
ZCB1cGRhdGVNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyh1bnNpZ25lZCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykKKyAgICB7CisgICAgICAgIGlmIChtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCisgICAgICAgICAgICBt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoQ291bnQo
KQogICAgIHsKQEAgLTM2NCwxMCArMzcwLDEyIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKTsK
ICAgICB9CiAKKyNpZiBFTkFCTEUoSklUKQogICAgIEdQUlJlZyBjYWxsZWVHUFIoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fY2FsbGVlR1BSOwogICAgIH0KKyNlbmRpZgogCiAgICAgdWludDMy
X3Qgc2xvd1BhdGhDb3VudCgpCiAgICAgewpAQCAtMzgzLDkgKzM5MSwxMyBAQCBjbGFzcyBDYWxs
TGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewog
ICAgIHZvaWQgZm9yRWFjaERlcGVuZGVudENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKICAgICB7CiAgICAgICAgIGlmIChpc0xpbmtlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoc3R1
YigpKQorICAgICAgICAgICAgaWYgKHN0dWIoKSkgeworI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
ICAgICAgICAgc3R1YigpLT5mb3JFYWNoRGVwZW5kZW50Q2VsbChmdW5jdG9yKTsKLSAgICAgICAg
ICAgIGVsc2UgeworI2Vsc2UKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZ1
bmN0b3IobV9jYWxsZWVPckNvZGVCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlz
RGlyZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IobV9sYXN0U2VlbkNhbGxlZU9y
RXhlY3V0YWJsZS5nZXQoKSk7CkBAIC0zOTcsMjYgKzQwOSwzNSBAQCBjbGFzcyBDYWxsTGlua0lu
Zm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogCiAgICAg
dm9pZCB2aXNpdFdlYWsoVk0mKTsKIAorI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBzZXRGcmFt
ZVNodWZmbGVEYXRhKGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CiAKICAgICBjb25zdCBD
YWxsRnJhbWVTaHVmZmxlRGF0YSogZnJhbWVTaHVmZmxlRGF0YSgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9mcmFtZVNodWZmbGVEYXRhLmdldCgpOwogICAgIH0KKyNlbmRpZgogCiBwcml2YXRl
OgogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFy
dCgpOwogCisgICAgdWludDMyX3QgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyB7IDAg
fTsgLy8gRm9yIHZhcmFyZ3M6IHRoZSBwcm9maWxlZCBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVu
dHMuIEZvciBkaXJlY3Q6IHRoZSBudW1iZXIgb2Ygc3RhY2sgc2xvdHMgYWxsb2NhdGVkIGZvciBh
cmd1bWVudHMuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25l
TG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKICAgICAgICAgVW5p
b25UeXBlKCkgCisjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgICAgIDogZGF0YUlDIHsgbnVsbHB0
ciwgSW52YWxpZEdQUlJlZyB9CisjZWxzZQorICAgICAgICAgICAgOiBkYXRhSUMgeyBudWxscHRy
IH0KKyNlbmRpZgogICAgICAgICB7IH0KICAgICAgICAgc3RydWN0IERhdGFJQyB7CiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tb25vbW9ycGhpY0Nh
bGxEZXN0aW5hdGlvbjsKKyNpZiBFTkFCTEUoSklUKQogICAgICAgICAgICAgR1BSUmVnIG1fY2Fs
bExpbmtJbmZvR1BSOworI2VuZGlmCiAgICAgICAgIH0gZGF0YUlDOwogCiAgICAgICAgIHN0cnVj
dCB7CkBAIC00MjksOSArNDUwLDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAKICAgICBXcml0ZUJhcnJpZXI8SlND
ZWxsPiBtX2NhbGxlZU9yQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fbGFz
dFNlZW5DYWxsZWVPckV4ZWN1dGFibGU7CisjaWYgRU5BQkxFKEpJVCkKICAgICBSZWZQdHI8UG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+IG1fc3R1YjsKLSAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc2xvd1N0dWI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRh
PiBtX2ZyYW1lU2h1ZmZsZURhdGE7CisjZW5kaWYKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdp
bjsKICAgICBib29sIG1faGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgIGJvb2wgbV9oYXNT
ZWVuQ2xvc3VyZSA6IDE7CkBAIC00NDEsOSArNDYzLDEwIEBAIGNsYXNzIENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiAgICAgYm9vbCBt
X2NsZWFyZWRCeUpldHRpc29uIDogMTsKICAgICB1bnNpZ25lZCBtX2NhbGxUeXBlIDogNDsgLy8g
Q2FsbFR5cGUKICAgICB1bnNpZ25lZCBtX3VzZURhdGFJQyA6IDE7IC8vIFVzZURhdGFJQworI2lm
IEVOQUJMRShKSVQpCiAgICAgR1BSUmVnIG1fY2FsbGVlR1BSIHsgSW52YWxpZEdQUlJlZyB9Owor
I2VuZGlmCiAgICAgdWludDMyX3QgbV9zbG93UGF0aENvdW50IHsgMCB9OwotICAgIHVpbnQzMl90
IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgeyAwIH07IC8vIEZvciB2YXJhcmdzOiB0
aGUgcHJvZmlsZWQgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzLiBGb3IgZGlyZWN0OiB0aGUg
bnVtYmVyIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgYXJndW1lbnRzLgogfTsKIAogaW5s
aW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykKQEAgLTQ1MywxMSArNDc2LDcgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2Fs
bExpbmtJbmZvQ29kZU9yaWdpbihDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIAogc3RydWN0
IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFs
bHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCi0gICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxs
VHlwZTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRp
b247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZm
bGVEYXRhOwogfTsKIAotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3Rh
dHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5j
cHAKaW5kZXggZjdhZmIyYjBmMjhmZDllNWZmYzVjMzRiNmEzYTg1NmFlMzczMDJmNS4uZDU5MDRh
OGU5MGEyY2RhNDY5MzcxZjg3ZTk3N2JkMmM4ZDM5MzE3YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCkBAIC0zMCw3ICszMCw2IEBA
CiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCkBA
IC01Miw0NyArNTEsNiBAQCBDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0dXMoSlNWYWx1ZSB2
YWx1ZSkKICAgICBtX3ZhcmlhbnRzLmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkp
OwogfQogCi1DYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9j
ayk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIGlmIChwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5oYXNFeGl0U2l0
ZShERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkp
KSB7Ci0gICAgICAgIC8vIFdlIGNvdWxkIGZvcmNlIHRoaXMgdG8gYmUgYSBjbG9zdXJlIGNhbGws
IGJ1dCBpbnN0ZWFkIHdlJ2xsIGp1c3QgYXNzdW1lIHRoYXQgaXQKLSAgICAgICAgLy8gdGFrZXMg
c2xvdyBwYXRoLgotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgYXV0byBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgIE9wY29kZUlEIG9wID0gaW5zdHJ1Y3Rp
b24tPm9wY29kZUlEKCk7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwot
ICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5m
byA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLm1f
Y2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9wX2NvbnN0cnVjdDoKLSAg
ICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENvbnN0cnVjdD4oKS5tZXRh
ZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBvcF90YWlsX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+
YXM8T3BUYWlsQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOgotICAgICAgICBjYWxs
TGlua0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpLm1ldGFkYXRhKHBy
b2ZpbGVkQmxvY2spLm1fY2FsbExpbmtJbmZvOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIG9w
X2l0ZXJhdG9yX25leHQ6Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8
T3BJdGVyYXRvck5leHQ+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGxMaW5r
U3RhdHVzKCk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhj
YWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlKCkpOwotfQotCiBDYWxsTGlua1N0YXR1cyBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgY29uc3QgSUNTdGF0dXNNYXAmIG1hcCwKICAgICBF
eGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhKQpAQCAtMTA1LDEwICs2MywxOSBAQCBDYWxsTGlua1N0
YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKICAgICBVTlVTRURfUEFSQU0oZXhpdFNp
dGVEYXRhKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkuY2FsbExpbmtJbmZvOwot
ICAgIGlmICghY2FsbExpbmtJbmZvKSB7CisgICAgaWYgKCFjYWxsTGlua0luZm8pCisgICAgICAg
IHJldHVybiBDYWxsTGlua1N0YXR1cygpOworICAgIC8vIGRvbmVMb2NhdGlvbiBpcyBudWxscHRy
IHdoZW4gaXQgaXMgdGllZCB0byBMTEludCAobm90IEJhc2VsaW5lKS4KKyAgICBpZiAoIWNhbGxM
aW5rSW5mby0+ZG9uZUxvY2F0aW9uKCkpIHsKICAgICAgICAgaWYgKGV4aXRTaXRlRGF0YS50YWtl
c1Nsb3dQYXRoKQogICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKLSAgICAgICAg
cmV0dXJuIGNvbXB1dGVGcm9tTExJbnQobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUlu
ZGV4KTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCktPmhhc0V4aXRTaXRlKERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRl
Y29kZUluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkpIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdWxk
IGZvcmNlIHRoaXMgdG8gYmUgYSBjbG9zdXJlIGNhbGwsIGJ1dCBpbnN0ZWFkIHdlJ2xsIGp1c3Qg
YXNzdW1lIHRoYXQgaXQKKyAgICAgICAgICAgIC8vIHRha2VzIHNsb3cgcGF0aC4KKyAgICAgICAg
ICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KICAg
ICAKICAgICByZXR1cm4gY29tcHV0ZUZvcihsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxsTGlu
a0luZm8sIGV4aXRTaXRlRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5oCmluZGV4IDViNTM4MGY5MGM1NmZjMDU0ZTY5ZjM3ZDQzNzUyZTQz
Y2RjMDcwMmEuLmE5MmQ5MDAxYjk2YmU0OWQ5MDFiNGFiYTljZDUyOTEwMjEwMTAwZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCkBAIC0x
MTcsNyArMTE3LDYgQEAgY2xhc3MgQ2FsbExpbmtTdGF0dXMgZmluYWwgewogcHJpdmF0ZToKICAg
ICB2b2lkIG1ha2VDbG9zdXJlQ2FsbCgpOwogICAgIAotICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1
cyBjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayos
IEJ5dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RhdGljIENhbGxMaW5rU3Rh
dHVzIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKAogICAgICAgICBjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBDYWxsTGlua0luZm8mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKaW5kZXggNzdjYWE4ZTU3ZTk0YWQ3MzJhODcwM2I3MTBmZDQ4MGY3MTgx
M2FlNi4uYmZlMTg2NzhlNzVkNDEzMzM1MDkyODViMDQ4MDRjY2I2MmZmMDQ0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ0MSw2ICs0NDEs
MTcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLmluaXRpYWxpemVJbmRleGluZ01vZGUoYnl0ZWNvZGUubV9yZWNvbW1l
bmRlZEluZGV4aW5nVHlwZSk7CiAgICAgfTsKIAorICAgIGF1dG8gbGlua19jYWxsTGlua0luZm8g
PSBbJl0oY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24sIGF1dG8gYnl0ZWNvZGUsIGF1dG8mIG1ldGFk
YXRhKSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgaWYgY29uc3RleHByIChkZWNsdHlwZShi
eXRlY29kZSk6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbCkgeworICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGEgPSBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6Y3JlYXRl
Rm9yQmFzZWxpbmVPckxMSW50VGFpbENhbGwoYnl0ZWNvZGUsIG51bVBhcmFtZXRlcnMoKSk7Cisg
ICAgICAgICAgICBtZXRhZGF0YS5tX2NhbGxMaW5rSW5mby5pbml0aWFsaXplRGF0YUlDKHZtLCBD
YWxsTGlua0luZm86OmNhbGxUeXBlRm9yKGRlY2x0eXBlKGJ5dGVjb2RlKTo6b3Bjb2RlSUQpLCBp
bnN0cnVjdGlvbi5pbmRleCgpLCAmc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgbWV0YWRhdGEubV9jYWxsTGlua0luZm8uaW5pdGlh
bGl6ZURhdGFJQyh2bSwgQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihkZWNsdHlwZShieXRlY29k
ZSk6Om9wY29kZUlEKSwgaW5zdHJ1Y3Rpb24uaW5kZXgoKSwgbnVsbHB0cik7CisgICAgfTsKKwog
I2RlZmluZSBMSU5LX0ZJRUxEKF9fZmllbGQpIFwKICAgICBXVEZfTEFaWV9KT0lOKGxpbmtfLCBf
X2ZpZWxkKShpbnN0cnVjdGlvbiwgYnl0ZWNvZGUsIG1ldGFkYXRhKTsKIApAQCAtNDQ5LDE0ICs0
NjAsMTcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKHRoaXMpOyBcCiAgICAgbmV3ICgmbWV0YWRhdGEpIF9fb3A6Ok1ldGFk
YXRhIHsgYnl0ZWNvZGUgfTsgXAogCi0jZGVmaW5lIENBU0UoX19vcCkgY2FzZSBfX29wOjpvcGNv
ZGVJRAotCi0jZGVmaW5lIExJTksoLi4uKSBcCi0gICAgQ0FTRShXVEZfTEFaWV9GSVJTVChfX1ZB
X0FSR1NfXykpOiB7IFwKKyNkZWZpbmUgTElOS19JTVBMKC4uLikgXAogICAgICAgICBJTklUSUFM
SVpFX01FVEFEQVRBKFdURl9MQVpZX0ZJUlNUKF9fVkFfQVJHU19fKSkgXAogICAgICAgICBXVEZf
TEFaWV9IQVNfUkVTVChfX1ZBX0FSR1NfXykoeyBcCiAgICAgICAgICAgICBXVEZfTEFaWV9GT1Jf
RUFDSF9URVJNKExJTktfRklFTEQsICBXVEZfTEFaWV9SRVNUXyhfX1ZBX0FSR1NfXykpIFwKICAg
ICAgICAgfSkgXAorCisjZGVmaW5lIENBU0UoX19vcCkgY2FzZSBfX29wOjpvcGNvZGVJRAorCisj
ZGVmaW5lIExJTksoLi4uKSBcCisgICAgQ0FTRShXVEZfTEFaWV9GSVJTVChfX1ZBX0FSR1NfXykp
OiB7IFwKKyAgICAgICAgTElOS19JTVBMKF9fVkFfQVJHU19fKSBcCiAgICAgICAgIGJyZWFrOyBc
CiAgICAgfQogCkBAIC00NjUsMTAgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAg
ICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAgICAg
ICAgIG1fYnl0ZWNvZGVDb3N0ICs9IG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdOwogICAgICAgICBz
d2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIExJTksoT3BDYWxsVmFyYXJncywgcHJvZmlsZSkK
LSAgICAgICAgTElOSyhPcFRhaWxDYWxsVmFyYXJncywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhP
cFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENvbnN0
cnVjdFZhcmFyZ3MsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkK
ICAgICAgICAgTElOSyhPcEdldFByaXZhdGVOYW1lLCBwcm9maWxlKQogCkBAIC00OTgsMTEgKzUw
OCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHkpCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2Zp
bGUpCiAKLSAgICAgICAgTElOSyhPcENhbGwsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BUYWls
Q2FsbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcENhbGxFdmFsLCBwcm9maWxlKQotICAgICAg
ICBMSU5LKE9wQ29uc3RydWN0LCBwcm9maWxlKQotCiAgICAgICAgIExJTksoT3BJbkJ5VmFsKQog
ICAgICAgICBMSU5LKE9wUHV0QnlWYWwpCiAgICAgICAgIExJTksoT3BQdXRCeVZhbERpcmVjdCkK
QEAgLTUyNywxNSArNTMyLDE2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJ
TksoT3BDYXRjaCkKICAgICAgICAgTElOSyhPcFByb2ZpbGVDb250cm9sRmxvdykKIAotICAgICAg
ICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKLSAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoT3BJdGVyYXRvck9wZW4pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2Ugb3BfaXRlcmF0b3JfbmV4dDogewotICAgICAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShPcEl0ZXJhdG9yTmV4dCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAg
ICAgIExJTksoT3BDYWxsLCBjYWxsTGlua0luZm8sIHByb2ZpbGUpCisgICAgICAgIExJTksoT3BU
YWlsQ2FsbCwgY2FsbExpbmtJbmZvLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wQ2FsbEV2YWws
IGNhbGxMaW5rSW5mbywgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcENvbnN0cnVjdCwgY2FsbExp
bmtJbmZvLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wSXRlcmF0b3JPcGVuLCBjYWxsTGlua0lu
Zm8pCisgICAgICAgIExJTksoT3BJdGVyYXRvck5leHQsIGNhbGxMaW5rSW5mbykKKyAgICAgICAg
TElOSyhPcENhbGxWYXJhcmdzLCBjYWxsTGlua0luZm8sIHByb2ZpbGUpCisgICAgICAgIExJTkso
T3BUYWlsQ2FsbFZhcmFyZ3MsIGNhbGxMaW5rSW5mbywgcHJvZmlsZSkKKyAgICAgICAgTElOSyhP
cFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgY2FsbExpbmtJbmZvLCBwcm9maWxlKQorICAgICAg
ICBMSU5LKE9wQ29uc3RydWN0VmFyYXJncywgY2FsbExpbmtJbmZvLCBwcm9maWxlKQogCiAgICAg
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogewogICAgICAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShPcFJlc29sdmVTY29wZSkKQEAgLTc4MywyMSArNzg5LDE4IEBAIHZvaWQgQ29kZUJsb2Nr
OjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRD
b2RlKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlz
RW1wdHkoKSk7CiAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rv
cjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKICAgICAgICAgaml0RGF0
YS5tX3N0dWJJbmZvcyA9IEZpeGVkVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZvPihqaXRDb2RlLT5t
X3VubGlua2VkU3R1YkluZm9zLnNpemUoKSk7Ci0gICAgICAgIGppdERhdGEubV9jYWxsTGlua0lu
Zm9zID0gRml4ZWRWZWN0b3I8Q2FsbExpbmtJbmZvPihqaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMu
c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA6IGppdENv
ZGUtPm1fdW5saW5rZWRDYWxscykgeworICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGxvY2tlciwgdW5saW5rZWRD
YWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBBU1NFUlQoY2FsbExpbmtJ
bmZvKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q29kZUxvY2F0aW9ucyh7IH0sIHVu
bGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbik7CisgICAgICAgIH0KKwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQo
aSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUoKSkgewogICAgICAgICAgICAgY2Fz
ZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKICAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6Q2FsbExpbmtJbmZvOiB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wb2ludGVyKCkpOwotICAgICAgICAgICAgICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9IGppdENvZGUtPm1fdW5s
aW5rZWRDYWxsc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvc1tpbmRleF07Ci0gICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8s
IEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgaml0RGF0
YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9ICZjYWxsTGlua0luZm87Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBvaW50ZXIoKSk7CiAgICAgICAgICAg
ICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9IGppdENv
ZGUtPm1fdW5saW5rZWRTdHViSW5mb3NbaW5kZXhdOwpAQCAtMTU2NywxNSArMTU3MCw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCkKIAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfSk7Ci0KLSAgICBmb3JFYWNoTExJbnRDYWxsTGlua0luZm8oWyZdKExM
SW50Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pIHsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by5pc0xpbmtlZCgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxMaW5rSW5mby5jYWxsZWUoKSkp
IHsKLSAgICAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIkNsZWFy
aW5nIExMSW50IGNhbGwgZnJvbSAiLCAqdGhpcyk7Ci0gICAgICAgICAgICBjYWxsTGlua0luZm8u
dW5saW5rKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5sYXN0U2VlbkNh
bGxlZSgpICYmICF2bS5oZWFwLmlzTWFya2VkKGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZSgp
KSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckxhc3RTZWVuQ2FsbGVlKCk7Ci0gICAg
fSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTU5Myw4ICsxNTg3LDYgQEAgQ29kZUJsb2Nr
OjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewog
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgIGZvciAo
YXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBzdHVi
SW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CiAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXJCYXNlIGxvY2tlcihOb0xvY2tpbmdOZWNlc3NhcnkpOwogICAgICAgICAgICAgc3R1Yklu
Zm8udmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHRoaXMpOwpAQCAtMTYxMiwxOSArMTYwNCw2
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpCiAgICAgICAgIH0K
ICAgICB9CiAjZW5kaWYKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgaWYgKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewotICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVl
ZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCi0gICAgICAg
IGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJ
VENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlua0luZm9zKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7Ci0gICAgICAgICAgICBjYWxs
TGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
Ci0gICAgfQotI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTYzNCw4ICsxNjEzLDEzIEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShWTSYgdm0pCiAKICAgICB1cGRhdGVB
bGxQcmVkaWN0aW9ucygpOwogCi0gICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChq
aXRUeXBlKCkpKQorICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgp
KSkgewogICAgICAgICBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CisgICAgICAgIC8vIElm
IHRoZSBDb2RlQmxvY2sgaXMgREZHIG9yIEZUTCwgQ2FsbExpbmtJbmZvIGluIG1ldGFkYXRhIGlz
IG5vdCByZWxhdGVkLgorICAgICAgICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZv
KFsmXShDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykgeworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLnZpc2l0V2Vhayh2bSk7CisgICAgICAgIH0pOworICAgIH0KIAogI2lmIEVOQUJMRShKSVQp
CiAgICAgaWYgKCEhaml0Q29kZSgpKQpAQCAtMTY5OSwxMyArMTY4MywxNiBAQCB2b2lkIENvZGVC
bG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIHZvaWQgQ29kZUJsb2NrOjpnZXRJQ1N0YXR1
c01hcChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBJQ1N0YXR1c01hcCYgcmVzdWx0KQogewor
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkgeworICAgICAg
ICBmb3JFYWNoTExJbnRPckJhc2VsaW5lQ2FsbExpbmtJbmZvKFsmXShDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykgeworICAgICAgICAgICAgcmVzdWx0LmFkZChjYWxsTGlua0luZm8uY29kZU9y
aWdpbigpLCBJQ1N0YXR1cygpKS5pdGVyYXRvci0+dmFsdWUuY2FsbExpbmtJbmZvID0gJmNhbGxM
aW5rSW5mbzsKKyAgICAgICAgfSk7CisgICAgfQogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKEpJ
VENvZGU6OmlzSklUKGppdFR5cGUoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBt
X2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgc3R1YkluZm8gOiBqaXRE
YXRhLT5tX3N0dWJJbmZvcykKICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHN0dWJJbmZvLmNv
ZGVPcmlnaW4sIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52YWx1ZS5zdHViSW5mbyA9ICZzdHViSW5m
bzsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxs
TGlua0luZm9zKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoY2FsbExpbmtJbmZvLmNvZGVP
cmlnaW4oKSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZhbHVlLmNhbGxMaW5rSW5mbyA9ICZjYWxs
TGlua0luZm87CiAgICAgICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgaWYgKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CkBAIC0xNzYwLDE1ICsxNzQ3LDI0
IEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUNhbGxMaW5rSW5mbyogQ29k
ZUJsb2NrOjpnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggaW5k
ZXgpCitDYWxsTGlua0luZm8qIENvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJ
bmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4IGluZGV4KQogewot
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBpZiAoYXV0byogaml0
RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5m
byA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykgewotICAgICAgICAgICAgaWYgKGNhbGxMaW5r
SW5mby5jb2RlT3JpZ2luKCkgPT0gQ29kZU9yaWdpbihpbmRleCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuICZjYWxsTGlua0luZm87CisgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJbnRlcnByZXRl
ZChqaXRUeXBlKCkpKSB7CisgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
KCkuYXQoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7
CisjZGVmaW5lIENBU0UoT3ApIFwKKyAgICAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKKyAgICAg
ICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fY2Fs
bExpbmtJbmZvOyBcCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBGT1JfRUFDSF9PUENP
REVfV0lUSF9DQUxMX0xJTktfSU5GTyhDQVNFKQorCisjdW5kZWYgQ0FTRQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsK
ICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1v
bigpOwpAQCAtMjEzNSwxMyArMjEzMSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTaHJpbmtNb2RlIHNocmlua01vZGUpCiB9CiAKICNp
ZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKLXsKLSAgICBub3RpY2VJbmNv
bWluZ0NhbGwoY2FsbGVyRnJhbWUpOwotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9pbmNvbWluZ0NhbGxzLnB1c2goaW5j
b21pbmcpOwotfQotCiB2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxs
KENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQog
ewogICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7CkBAIC0yMTUyLDEwICsyMTQx
LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZy
YW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IAordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2Fs
bGVyRnJhbWUpOworICAgIG1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKK30KKwogdm9p
ZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogewotICAgIHdoaWxlIChtX2luY29t
aW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQotICAg
ICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51bmxpbmsoKTsKKyAgICB3aGlsZSAo
bV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQorICAgICAg
ICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogI2lmIEVOQUJMRShKSVQp
CiAgICAgSklURGF0YSogaml0RGF0YSA9IG51bGxwdHI7CiAgICAgewpAQCAtMjE2MywyMCArMjE1
OCwxMiBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgICAgIGpp
dERhdGEgPSBtX2ppdERhdGEuZ2V0KCk7CiAgICAgfQogICAgIGlmIChqaXREYXRhKSB7Ci0gICAg
ICAgIHdoaWxlIChqaXREYXRhLT5tX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRhLT5t
X2luY29taW5nQ2FsbHMuZW5kKCkpCi0gICAgICAgICAgICBqaXREYXRhLT5tX2luY29taW5nQ2Fs
bHMuYmVnaW4oKS0+dW5saW5rKHZtKCkpOwogICAgICAgICB3aGlsZSAoaml0RGF0YS0+bV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBqaXREYXRhLT5tX2luY29taW5nUG9seW1v
cnBoaWNDYWxscy5lbmQoKSkKICAgICAgICAgICAgIGppdERhdGEtPm1faW5jb21pbmdQb2x5bW9y
cGhpY0NhbGxzLmJlZ2luKCktPnVubGluayh2bSgpKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qIGluY29taW5nKQotewotICAgIG5vdGljZUlu
Y29taW5nQ2FsbChjYWxsZXJGcmFtZSk7Ci0gICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChp
bmNvbWluZyk7Ci19Ci0KIENvZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7
CiAgICAgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zv
cihzcGVjaWFsaXphdGlvbktpbmQoKSk7CkBAIC0yMzI5LDIyICsyMzE2LDIwIEBAIHZvaWQgQ29k
ZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGlt
aXphdGlvbk1vZGUgbW9kCiAgICAgaWYgKHZtLmhlYXAuY3VycmVudFRocmVhZElzRG9pbmdHQ1dv
cmsoKSAmJiAhdm0uaGVhcC5pc01hcmtlZChvd25lckV4ZWN1dGFibGUoKSkpCiAgICAgICAgIHJl
dHVybjsKIAotI2lmIEVOQUJMRShKSVQpCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGlmIChKSVREYXRhKiBqaXREYXRhID0gbV9qaXRE
YXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxMaW5rSW5mbyA6IGppdERh
dGEtPm1fY2FsbExpbmtJbmZvcykKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8uc2V0Q2xl
YXJlZEJ5SmV0dGlzb24oKTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShERkdfSklUKQogICAgICAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRD
b2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgICAgIGZvciAoYXV0byogY2FsbExpbmtJbmZvIDog
ZGZnQ29tbW9uLT5tX2NhbGxMaW5rSW5mb3MpCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRDbGVhcmVkQnlKZXR0aXNvbigpOwotICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGZvckVhY2hMTEludE9yQmFzZWxpbmVDYWxsTGlua0luZm8oWyZd
KENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLnNldENsZWFyZWRCeUpldHRpc29uKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQog
ICAgIH0KLSNlbmRpZgogCiAgICAgLy8gVGhpcyBhY2NvbXBsaXNoZXMgKDIpLgogICAgIG93bmVy
RXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh2bSwgYWx0ZXJuYXRpdmUoKSwgY29kZVR5cGUoKSwg
c3BlY2lhbGl6YXRpb25LaW5kKCkpOwpAQCAtMjg0NywxOSArMjgzMiwxMyBAQCBBcnJheVByb2Zp
bGUqIENvZGVCbG9jazo6Z2V0QXJyYXlQcm9maWxlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IEJ5dGVjb2RlSW5kZQogewogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5h
dChieXRlY29kZUluZGV4KTsKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7
Ci0jZGVmaW5lIENBU0UxKE9wKSBcCisjZGVmaW5lIENBU0UoT3ApIFwKICAgICBjYXNlIE9wOjpv
cGNvZGVJRDogXAogICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FycmF5UHJvZmlsZTsKIAotI2RlZmluZSBDQVNFMihPcCkgXAotICAgIGNhc2Ug
T3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1l
dGFkYXRhKHRoaXMpLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlOwotCi0gICAgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDQVNFMSkKLSAgICBGT1JfRUFDSF9PUENPREVf
V0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDQVNFMikKKyAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9BUlJBWV9QUk9GSUxFKENBU0UpCiAKLSN1bmRlZiBDQVNFMQotI3VuZGVmIENBU0UyCisjdW5k
ZWYgQ0FTRQogCiAgICAgY2FzZSBPcEdldEJ5SWQ6Om9wY29kZUlEOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwpAQCAtMzAyOSwxNyArMzAw
OCwxMiBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcm9maWxlUHJlZGljdGlvbnMo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZQogICAgICAgICB9CiAgICAgfSk7CiAKLSNk
ZWZpbmUgVklTSVQxKF9fb3ApIFwKKyNkZWZpbmUgVklTSVQoX19vcCkgXAogICAgIG1fbWV0YWRh
dGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBwcm9jZXNzKG1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlKTsgfSk7CiAKLSNkZWZpbmUgVklTSVQyKF9fb3ApIFwKLSAgICBtX21l
dGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgcHJvY2VzcyhtZXRh
ZGF0YS5tX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZSk7IH0pOwotCi0gICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShWSVNJVDEpCi0gICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oVklTSVQyKQorICAgIEZPUl9FQUNIX09QQ09ERV9XSVRI
X0FSUkFZX1BST0ZJTEUoVklTSVQpCiAKLSN1bmRlZiBWSVNJVDEKLSN1bmRlZiBWSVNJVDIKKyN1
bmRlZiBWSVNJVAogCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yTmV4dD4oWyZd
IChhdXRvJiBtZXRhZGF0YSkgewogICAgICAgICBwcm9jZXNzKG1ldGFkYXRhLm1faXRlcmFibGVQ
cm9maWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRl
eCA2NGY5ZjVhYmNmZTJhZTcwNWQxZGE2NWFhOWY4MzE5N2I5NmM2ZDMxLi5iN2FlYTI2NzdmNWU5
NDkwOGFiMzU1Zjk2YjBkMjNjMzc4MjQyMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiSlNDYXN0Lmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKLSNp
bmNsdWRlICJMTEludENhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkxhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmgiCiAjaW5jbHVkZSAiTWV0YWRhdGFUYWJsZS5oIgogI2luY2x1ZGUgIk1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmgiCkBAIC0yNjEsOCArMjYwLDYgQEAgY2xhc3MgQ29kZUJsb2NrIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKICAgICAgICAgRml4ZWRWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9z
OwotICAgICAgICBGaXhlZFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKLSAg
ICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5r
ZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9y
cGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAgICAgICAgIGJvb2wg
bV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwpAQCAtMjkxLDcgKzI4OCw3IEBAIGNsYXNz
IENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8vIFRoaXMgaXMgYSBzbG93IGZ1bmN0
aW9uIGNhbGwgdXNlZCBwcmltYXJpbHkgZm9yIGNvbXBpbGluZyBPU1IgZXhpdHMgaW4gdGhlIGNh
c2UKICAgICAvLyB0aGF0IHRoZXJlIGhhZCBiZWVuIGlubGluaW5nLiBDaGFuY2VzIGFyZSBpZiB5
b3Ugd2FudCB0byB1c2UgdGhpcywgeW91J3JlIHJlYWxseQogICAgIC8vIGxvb2tpbmcgZm9yIGEg
Q2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KLSAg
ICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJ
bmRleCk7CisgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIGNv
bnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKTsKIApAQCAtMzA5LDE0ICszMDYsMTEgQEAgY2xh
c3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAog
ICAgIHZvaWQgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0jaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIGxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZv
Kik7CisjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2Fs
bChDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKIAotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChDYWxsRnJhbWUqIGNh
bGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyopOwotCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IG91dE9mTGluZUp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKTsKICAgICBpbnQgb3V0
T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkKICAgICB7
CkBAIC00NTMsNyArNDQ3LDcgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNv
bnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVh
Y2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hPYmplY3RBbGxvY2F0aW9uUHJvZmlsZShjb25z
dCBGdW5jdG9yJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNo
TExJbnRDYWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExMSW50T3JCYXNlbGluZUNhbGxMaW5rSW5mbyhjb25zdCBG
dW5jdG9yJik7CiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGJpbmFyeUFyaXRoUHJvZmlsZUZv
ckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIHVu
YXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKQEAgLTk1OSw3
ICs5NTMsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBWTSogbV92
bTsKIAogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlciB7IG51bGxwdHIg
fTsKLSAgICBTZW50aW5lbExpbmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIFBhY2tlZFJhd1Nl
bnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdMTEludENhbGxzOworICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxD
YWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1h
cCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0
Q29kZTsKICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKaW5kZXggMWQ1OTRhYjgzNTI4OTdlYzhhNzQ1ZWEyNDkz
ZjhkMmRhMDE4Yjk2Mi4uMGJlYzZiMTJiY2I2OTc3NjliNzA3MzY0YzY5MjdlYzg5OTk1MDU3MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5l
cy5oCkBAIC04NiwxMyArODYsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZShjb25zdCBGdW5jdG9yJiBmdW5jKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbyhjb25z
dCBGdW5jdG9yJiBmdW5jKQordm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludE9yQmFzZWxpbmVD
YWxsTGlua0luZm8oY29uc3QgRnVuY3RvciYgZnVuYykKIHsKICAgICBpZiAobV9tZXRhZGF0YSkg
ewogI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihb
Jl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9jYWxsTGlua0luZm8pOyB9KTsK
IAotICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJ
VCkKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQ0FMTF9MSU5LX0lORk8oVklTSVQpCiAK
ICN1bmRlZiBWSVNJVAogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZh
MzJlOWI2NmJiN2M2MWZlYjMzOWY4MDUyOGMyZDM0NzFkODA2OGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJKU0NQdHJUYWcuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
Ci0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0jaW5jbHVkZSA8d3RmL1NlbnRp
bmVsTGlua2VkTGlzdC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IEluc3RydWN0aW9u
OwotCi1jbGFzcyBMTEludENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5v
ZGU8TExJbnRDYWxsTGlua0luZm8+IHsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgdW5saW5r
ZWRCaXQgPSAweDE7Ci0KLSAgICBMTEludENhbGxMaW5rSW5mbygpID0gZGVmYXVsdDsKLSAgICAK
LSAgICB+TExJbnRDYWxsTGlua0luZm8oKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkp
Ci0gICAgICAgICAgICByZW1vdmUoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0xpbmtlZCgp
IGNvbnN0IHsgcmV0dXJuICEobV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgJiB1
bmxpbmtlZEJpdCk7IH0KLSAgICAKLQotICAgIHZvaWQgbGluayhWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyKQotICAgIHsKLSAgICAgICAgaWYgKGlzT25MaXN0KCkpCi0gICAgICAgICAgICBy
ZW1vdmUoKTsKLSAgICAgICAgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsZWUpOwotICAgICAgICB2bS53cml0ZUJhcnJpZXIo
b3duZXIsIGNhbGxlZSk7Ci0gICAgICAgIG1fbWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwot
ICAgIH0KLQotICAgIHZvaWQgdW5saW5rKCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2UgbGluayBp
bnZhbGlkYXRlZC4gSXQgd29ya3MgYmVjYXVzZSBMTEludCB0ZXN0cyB0aGUgZ2l2ZW4gY2FsbGVl
IHdpdGggdGhpcyBwb2ludGVyLiBCdXQgaXQgaXMgc3RpbGwgdmFsaWQgYXMgbGFzdFNlZW5DYWxs
ZWUhCi0gICAgICAgIG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHw9IHVubGlu
a2VkQml0OwotICAgICAgICBtX21hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgIGlmIChpc09uTGlzdCgpKQotICAgICAgICAg
ICAgcmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGNhbGxlZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoIWlzTGlua2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+KG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0KTsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogbGFzdFNlZW5DYWxs
ZWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU09iamVjdCo+
KG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0ICYgfnVubGlua2VkQml0KTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNsZWFyTGFzdFNlZW5DYWxsZWUoKQotICAgIHsKLSAgICAgICAgbV9j
YWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgPSB1bmxpbmtlZEJpdDsKLSAgICB9Ci0K
LSAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxM
aW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludHB0cl90IG1f
Y2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9tYWNoaW5lQ29kZVRhcmdldDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
Y29kZS5oCmluZGV4IGNhOGJlZjMyOGI0YmZiMmIwZGZkYzhiMjg1MjQ5MjFhYzgzOWJkMzYuLjZj
MDczY2Y2NzZhYmQ2ODBiZjNjM2Y3NGMxZTFmMTA0NDg4OWQ3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTEyNiwxMSArMTI2LDE5IEBAIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNl
dENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BSc2hpZnQpIFwKICAgICBtYWNybyhPcEdldFByaXZh
dGVOYW1lKSBcCiAKLSNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRSht
YWNybykgXAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9DQUxMX0xJTktfSU5GTyhtYWNy
bykgXAorICAgIG1hY3JvKE9wQ2FsbCkgXAorICAgIG1hY3JvKE9wVGFpbENhbGwpIFwKKyAgICBt
YWNybyhPcENhbGxFdmFsKSBcCisgICAgbWFjcm8oT3BDb25zdHJ1Y3QpIFwKKyAgICBtYWNybyhP
cEl0ZXJhdG9yT3BlbikgXAorICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAgICAgbWFjcm8o
T3BDYWxsVmFyYXJncykgXAogICAgIG1hY3JvKE9wVGFpbENhbGxWYXJhcmdzKSBcCiAgICAgbWFj
cm8oT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBtYWNybyhPcENvbnN0cnVjdFZh
cmFyZ3MpIFwKKworI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKG1h
Y3JvKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9wSW5CeVZhbCkgXAog
ICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKQEAgLTEzOSw2ICsxNDcsNyBAQCBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRD
b25zdGV4cHIobQogICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8o
T3BFbnVtZXJhdG9ySW5CeVZhbCkgXAogICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3Bl
cnR5KSBcCisgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQ0FMTF9MSU5LX0lORk8obWFjcm8pIFwK
IAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUo
bWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCkBAIC0xNDgsMTQgKzE1Nyw2IEBAIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6
OmdldE1TQlNldENvbnN0ZXhwcihtCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX09CSkVD
VF9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld09iamVjdCkgXAog
Ci0jZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKG1hY3Jv
KSBcCi0gICAgbWFjcm8oT3BDYWxsKSBcCi0gICAgbWFjcm8oT3BUYWlsQ2FsbCkgXAotICAgIG1h
Y3JvKE9wQ2FsbEV2YWwpIFwKLSAgICBtYWNybyhPcENvbnN0cnVjdCkgXAotICAgIG1hY3JvKE9w
SXRlcmF0b3JPcGVuKSBcCi0gICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKLQogI2RlZmluZSBG
T1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAogICAgIG1h
Y3JvKE9wQWRkKSBcCiAgICAgbWFjcm8oT3BNdWwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDBkMTllMjc5MDU2
ZTVmMzdlNzcxYzVjNDlhMmRiMGU2YzJkODQ4ZDcuLmFjNTcxMjdiY2Y4OTA3MmJlMDM4NDE2ZGEx
MzliNDFmMTY0YWU2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtNDAzLDcgKzQwMyw2IEBAIHZvaWQgVW5saW5r
ZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJvZmlsZXModW5zaWduZWQgbnVtQmluYXJ5QXJp
dGhQcm9maWxlcywKIAogI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMg
Kz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENP
REVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5UKQotICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1i
ZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4
dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVu
dHJpZXM8T3BHZXRCeUlkPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCA0MDM5NGE5NDM5OTI5OTNmNTQ1YTJhYzYyY2Y2
ZWRjMDlkZjU1NWZhLi4xYzU5MDQyZTBkMGMzODExYjNjOWJlMjE1OGNkYzU0YzAxZGJiODFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaApAQCAtNzUsNyArNzUsNiBAQCBjbGFzcyBDYWNoZWRDb2RlQmxvY2s7CiAKIHR5cGVkZWYg
dW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25l
ZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwotdHlwZWRlZiB1bnNpZ25lZCBVbmxp
bmtlZExMSW50Q2FsbExpbmtJbmZvOwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUg
ewogICAgIHN0cnVjdCBPZmZzZXRMb2NhdGlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKaW5kZXggNWM3MjA1OGRjZjIxOTYwZGNmODUzZTBhOTJj
MjdlODlhMmQ1NmJlZS4uNWUzMmQyZDI0ZjFiM2VkODcwYzMzMGYyZWYyM2Q4NWU0ZWNlNDgzNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAt
MzE1LDYgKzMxNSwxMCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlE
IG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2UgbGxpbnRf
bmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVu
Y3Rpb25fY2FsbF90cmFtcG9saW5lOgogICAgIGNhc2UgbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25f
Y29uc3RydWN0X3RyYW1wb2xpbmU6CisgICAgY2FzZSBsbGludF9saW5rX2NhbGxfdHJhbXBvbGlu
ZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lOgorICAgIGNhc2UgbGxp
bnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBvbGluZToKKyAgICBjYXNlIGxsaW50X3ZpcnR1YWxf
dGFpbF9jYWxsX3RyYW1wb2xpbmU6CiAgICAgY2FzZSBsbGludF9nZXRfaG9zdF9jYWxsX3JldHVy
bl92YWx1ZToKICAgICBjYXNlIGxsaW50X2hhbmRsZV91bmNhdWdodF9leGNlcHRpb246CiAgICAg
Y2FzZSBjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xpbmU6CkBA
IC0zMjUsNiArMzI5LDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2l0
ZXJhdG9yX25leHRfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfY2FsbF9yZXR1cm5fbG9j
YXRpb246CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uOgorICAgIGNhc2Ug
b3BfY2FsbF92YXJhcmdzX3JldHVybl9sb2NhdGlvbjoKKyAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzX3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnc19zbG93X3Jl
dHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzX3Nsb3dfcmV0dXJu
X2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3JldHVybl9sb2NhdGlvbjoKQEAgLTMz
NSw3ICszNDEsNiBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfY29uc3Ry
dWN0X3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3Blbl9zbG93
X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2l0ZXJhdG9yX25leHRfc2xvd19yZXR1cm5f
bG9jYXRpb246Ci0gICAgY2FzZSBvcF90YWlsX2NhbGxfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNh
c2Ugb3BfdGFpbF9jYWxsX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzX3Nsb3dfcmV0dXJuX2xvY2F0aW9uOgogICAgIGNhc2Ugb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3Nfc2xvd19yZXR1cm5fbG9jYXRpb246CkBAIC0zNDMsOCArMzQ4LDkg
QEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIHdhc21fZnVuY3Rpb25fcHJvbG9n
dWU6CiAgICAgY2FzZSB3YXNtX2Z1bmN0aW9uX3Byb2xvZ3VlX25vX3RsczoKICAgICBjYXNlIGpz
X3RyYW1wb2xpbmVfb3BfY2FsbDoKLSAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfdGFpbF9jYWxs
OgogICAgIGNhc2UganNfdHJhbXBvbGluZV9vcF9jb25zdHJ1Y3Q6CisgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIGpzX3RyYW1wb2xpbmVfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX25leHQ6CiAg
ICAgY2FzZSBqc190cmFtcG9saW5lX29wX2l0ZXJhdG9yX29wZW46CiAgICAgY2FzZSBqc190cmFt
cG9saW5lX29wX2NhbGxfc2xvdzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCBiNDUxY2RiNjFmN2ExMWIzMzAy
YzE4NWM2NmJmZjE3YTlmZGJlMDlmLi5lNzIyZjllYmRhY2M4OTM2OTA2NTZkNWI2M2U5ZjYyNDQ0
NjE1ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0xNjYsMTAgKzE2NiwxMCBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayog
YmFzZWxpbmVDbwogICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElP
TihvcF9jb25zdHJ1Y3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKLSAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9S
RVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzX3Nsb3cpOworICAgICAgICAgICAganVtcFRh
cmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3MpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdz
OgotICAgICAgICAgICAganVtcFRhcmdldCA9IExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jb25z
dHJ1Y3RfdmFyYXJnc19zbG93KTsKKyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBMTElOVF9SRVRV
Uk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOiB7CiAgICAgICAgICAgICBp
ZiAoY2FsbEluc3RydWN0aW9uLm9wY29kZUlEKCkgPT0gb3BfZ2V0X2J5X2lkKQpAQCAtMjAxLDEw
ICsyMDEsMTIgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
YWxsZXJSZXR1cm5QQyhDb2RlQmxvY2sqIGJhc2VsaW5lQ28KICAgICAgICAgY2FzZSBJbmxpbmVD
YWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxW
YXJhcmdzOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczog
ewotICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQotICAgICAgICAgICAg
ICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29k
ZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2xvY2sp
OworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mbyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGxvY2tlciwgY2FsbEJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExp
bmtJbmZvKTsKLQogICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+ZG9uZUxv
Y2F0aW9uKCkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAppbmRleCA5NTZkNjk0MGU3ZDIwYjgyMDJmMjU1M2VjNWZlNzBiN2U4
ZTllNjBhLi5lNjFmODk0YmUxMDhjY2JmYTEyZGIyMDg5MjllY2RlMmMzZGYwZjI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKQEAgLTg0NywxMCArODQ3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmVtaXRTdG9yZUNhbGxT
aXRlSW5kZXgoY2FsbFNpdGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpbmZvLT5lbWl0
RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsKKyAgICAgICAgICAgIGluZm8tPmVt
aXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17
CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkpOwog
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd1BhdGggPSBtX2ppdC5sYWJlbCgp
OwogICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CkBA
IC04OTIsNyArODkyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZSkKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1Rh
aWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBzY29wZWRMYW1iZGE8
dm9pZCgpPihbJl17CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewog
ICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwog
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CkBAIC05MDAsNyArOTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgfQotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgIH0g
ZWxzZQogICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0RmFzdFBhdGgobV9qaXQsIGNhbGxl
ZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCmluZGV4IDBmZTdhNzkwOTE1YTcyNGY0ZTFmZmJkOTZiYTE0ZTdhODVjYjhjNzkuLjc3MDcz
ZjM0YWZiZmRmOTVmZTU4MjVhM2M4OTg5YzMyMjNkZGFhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtOTM4LDEwICs5Mzgs
MTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpMYWJlbCBtYWluUGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAg
ICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKIAotICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5lbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgWyZdIHsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpMYWJlbCBzbG93UGF0aCA9IG1faml0LmxhYmVsKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwpAQCAtOTgxLDcg
Kzk4MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAg
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgc2NvcGVkTGFtYmRhPHZv
aWQoKT4oWyZdewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkBAIC05ODksNyArOTg5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBtX2ppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOwogICAgICAgICAgICAgfQotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwog
ICAgIH0gZWxzZQogICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRGYXN0UGF0
aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6Tm8pOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggZTFjODJk
Zjg4MzQxNDkxOTg0YjA5ODM4MWI4MGQ1ZWEzNjcyZDZlYi4uMDE4YTJmODU4ZjQyMTFkMzg3YjQy
YjY5MmUyNWI1MTg2MWJlNGNkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcApAQCAtMTA0MDMsMTAgKzEwNDAzLDEwIEBAIElHTk9SRV9DTEFOR19X
QVJOSU5HU19FTkQKICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0
dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+ZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBbJl0geworICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKGppdCwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNo
dWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFp
bENhbGwpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTEwNTU5LDEwICsxMDU1OSwxMCBAQCBJ
R05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZENhbGxMaW5rSW5mbyhjb2Rl
T3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRv
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExh
bWJkYTx2b2lkKCk+KFsmXXsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSkpOwogCiAgICAgICAgICAgICAgICAg
c2xvd1BhdGgubGluaygmaml0KTsKICAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQg
PSBqaXQubGFiZWwoKTsKQEAgLTEwOTAyLDEwICsxMDkwMiwxMCBAQCBJR05PUkVfQ0xBTkdfV0FS
TklOR1NfRU5ECiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIHNjb3BlZExhbWJkYTx2b2lkKCk+KFsm
XXsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9
IGppdC5qdW1wKCk7CkBAIC0xMTE4MywxMCArMTExODMsMTAgQEAgSUdOT1JFX0NMQU5HX1dBUk5J
TkdTX0VORAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBzY29wZWRMYW1iZGE8dm9pZCgpPihbJl17
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBq
aXQuanVtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCmluZGV4IGM4Y2JiZWUwNmJmN2Q2NjYyYzE5YTRhNGE4YTE4YzIxY2VmZDNmNzIuLmU2NDU4
NTMxZWJjOTA0ZGU1ZGQwNGNlM2FiYTUzYzViZDNjNzBiMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTc0NSwxOCArNzQ1LDE4IEBAIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXJJbXBsKEdQCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogewogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwg
aW5mbyk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgR1BSSW5mbzo6
cmVnVDIsIGluZm8tPmNhbGxNb2RlKCkpOwogfQogCi12b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5m
byogaW5mbykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgQ2FsbE1vZGUg
Y2FsbE1vZGUpCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgbW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxs
IGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwogICAgICAgICBs
aW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9LCAmdm1dICgpIHsKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gdmly
dHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKHZtLCAqaW5mbyk7Ci0gICAgICAgICAgICBpbmZv
LT5zZXRTbG93U3R1YihHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRo
dW5rKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENUSVZpcnR1YWxDYWxsKGNhbGxNb2RlKTsKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4odmlydHVhbFRodW5rLmNvZGUo
KSkpOwogICAgICAgICB9KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCmluZGV4IDY1ZGQ4ZWRlZjc0Nzk5NmQ1ZjZkOGYxOTI0NmU2YWQ5MzM2
ZDQ3MzguLmE0NGFhNWNmOTU0ZjJjMTY1NDc5ZWMyZGNkOTIzZDVmZjRmM2QxZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMTc1Miw3ICsxNzUy
LDcgQEAgY2xhc3MgQXNzZW1ibHlIZWxwZXJzIDogcHVibGljIE1hY3JvQXNzZW1ibGVyIHsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCos
IENhbGxMaW5rSW5mbyopOwotICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0ds
b2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIENh
bGxNb2RlKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAg
IHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAppbmRleCAxNTg5NjAzZjE0OWMyNzZjMzU5ZTdiYjI2
ZDY0ZjRkODU3MjdmMTUwLi4zMDAzYjA3MzUwMTg4ZTVmNzNmY2M5NjcyMGQ2YTllNzQxZjhiY2I1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKQEAgLTYy
LDcgKzYyLDYgQEAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKIAogICAgIGVudW0gY2xhc3MgVHlw
ZSA6IHVpbnQ4X3QgewogICAgICAgICBHbG9iYWxPYmplY3QsCi0gICAgICAgIENhbGxMaW5rSW5m
bywKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCiAgICAgICAgIEZ1bmN0aW9uRGVjbCwKICAg
ICAgICAgRnVuY3Rpb25FeHByLApAQCAtOTMsNyArOTIsNiBAQCBjbGFzcyBCYXNlbGluZUpJVENv
ZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CiAgICAgfkJh
c2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOwogICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29k
ZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7
IH0KIAotICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CiAgICAgRml4
ZWRWZWN0b3I8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKICAgICBGaXhl
ZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOwog
ICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcApp
bmRleCBjZjE1Y2UxOTllZDM3NmFmMTUwZTg4N2YzZWVkMDJmYTE1ZGM3YjJhLi41MDJmOWEwNzIx
ZGYxZTMxMDc4ZjY5OWEzY2VlZGY1Mjk3ODkyMWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCiAKQEAg
LTgyLDYgKzgzLDM3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCoKICAgICB9CiB9CiAKK0NhbGxG
cmFtZVNodWZmbGVEYXRhIENhbGxGcmFtZVNodWZmbGVEYXRhOjpjcmVhdGVGb3JCYXNlbGluZU9y
TExJbnRUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgdW5zaWduZWQgbnVtUGFy
YW1ldGVycykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwIH07CisjZW5kaWYKKyAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxl
RGF0YTsKKyAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwor
ICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBudW1QYXJhbWV0ZXJzOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3RlcjsKKyNlbmRpZgorICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IGJ5
dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rl
cik7CisgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKKyAgICAgICAg
c2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFj
ZWRJbkpTU3RhY2soCisgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAorICAgICAgICAgICAgICAgIERhdGFG
b3JtYXRKUyk7CisgICAgfQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc2h1ZmZsZURhdGEuY2Fs
bGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgRGF0YUZv
cm1hdEpTKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc2h1ZmZsZURhdGEuY2FsbGVl
ID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBh
eWxvYWRHUFIoKSk7CisjZW5kaWYKKyAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKKyAgICBzaHVmZmxlRGF0YS5zaHJpbmtUb0ZpdCgpOworICAgIHJldHVybiBzaHVm
ZmxlRGF0YTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5o
CmluZGV4IDMzNjU3ZTMzYTY0ZjM3ODFmNDMwOTk4YzEzMzM3MWExYWE2NGI3NWEuLjBiYzE5Yjk5
ZDYxZTRiY2JiNzE5ZWE5ZmNjMWJjOGMzN2ZiZmVjNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKQEAgLTMyLDYgKzMyLDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBPcFRhaWxDYWxsOworCiBzdHJ1Y3QgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAt
NDAsNiArNDIsOCBAQCBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgewogICAgICAgICBhcmdz
LnNocmlua1RvRml0KCk7CiAgICAgfQogCisgICAgc3RhdGljIENhbGxGcmFtZVNodWZmbGVEYXRh
IGNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmLCB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzKTsKKwogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwog
ICAgIHVuc2lnbmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFz
c2VkQXJncyB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggOTI5
NDI0NjA3MzQwMDkxMWI2YzM1N2M3OGE0YTBjNmE3NGU5YWFkNC4uMjhhZTZmNzcwZGRhY2Q3MWM2
ZjE4MmM5ZDE3OWZkMWNjZWI4ZGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAt
MTAxLDEyICsxMDEsOSBAQCBzdGQ6OnR1cGxlPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50PiBKSVQ6OmFkZFVubGluawogICAgIHJldHVybiBzdGQ6
OnR1cGxlIHsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggfTsKIH0KIAotc3RkOjp0dXBsZTxVbmxp
bmtlZENhbGxMaW5rSW5mbyosIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+IEpJVDo6YWRkVW5s
aW5rZWRDYWxsTGlua0luZm8oKQorVW5saW5rZWRDYWxsTGlua0luZm8qIEpJVDo6YWRkVW5saW5r
ZWRDYWxsTGlua0luZm8oKQogewotICAgIHZvaWQqIHVubGlua2VkQ2FsbExpbmtJbmZvSW5kZXgg
PSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV91bmxpbmtlZENh
bGxzLnNpemUoKSkpOwotICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gJm1fdW5saW5r
ZWRDYWxscy5hbGxvYygpOwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvSW5kZXggPSBhZGRUb0NvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxM
aW5rSW5mbywgdW5saW5rZWRDYWxsTGlua0luZm9JbmRleCk7Ci0gICAgcmV0dXJuIHN0ZDo6dHVw
bGUgeyBpbmZvLCBjYWxsTGlua0luZm9JbmRleCB9OworICAgIHJldHVybiAmbV91bmxpbmtlZENh
bGxzLmFsbG9jKCk7CiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTEwMTAsNyArMTAwNyw2
IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IEZp
eGVkVmVjdG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPihtX3VubGlua2VkQ2FsbHMuc2l6ZSgpKTsK
ICAgICBpZiAobV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMuc2l6ZSgpKQogICAgICAgICBzdGQ6
Om1vdmUobV91bmxpbmtlZENhbGxzLmJlZ2luKCksIG1fdW5saW5rZWRDYWxscy5lbmQoKSwgbV9q
aXRDb2RlLT5tX3VubGlua2VkQ2FsbHMuYmVnaW4oKSk7Ci0gICAgbV9qaXRDb2RlLT5tX2V2YWxD
YWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKICAgICBtX2ppdENv
ZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBGaXhlZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPihtX3VubGlua2VkU3R1YkluZm9zLnNpemUoKSk7CiAgICAgaWYgKG1faml0Q29kZS0+
bV91bmxpbmtlZFN0dWJJbmZvcy5zaXplKCkpCiAgICAgICAgIHN0ZDo6bW92ZShtX3VubGlua2Vk
U3R1YkluZm9zLmJlZ2luKCksIG1fdW5saW5rZWRTdHViSW5mb3MuZW5kKCksIG1faml0Q29kZS0+
bV91bmxpbmtlZFN0dWJJbmZvcy5iZWdpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4
IGRlMmM1Y2U3NzBiYmQ1OTNiN2FlNWZkMWE2NTI2NzM4OTQzZGQ5YTEuLjY3YjQzZDhmYTMwYjcy
Y2JkNDk0NDYyMjhjNjQyOTY0ZjNkMzM1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAt
MTUzLDcgKzE1Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRp
b25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKICAg
ICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOwotICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07
CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKQEAgLTI5
NCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsK
KyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYpOwogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAg
ICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyAgICAgICAg
LCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYpOwogCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2
YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTcw
Niw2ICs3MDUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgog
ICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBj
b25zdCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0
aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZXR1cm5Gcm9tQmFzZWxpbmVHZW5l
cmF0b3IoVk0mKTsKKworICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgICAgIC8vIFRodW5rIGdlbmVyYXRvcnMuCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJik7CkBAIC03MjEsNyArNzI0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hl
Y2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZN
Jik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0m
KTsKIAogICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcEdldEZy
b21TY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKQEAgLTk1OCw3ICs5NjAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGFkZFRvQ29u
c3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIp
OwogICAgICAgICBzdGQ6OnR1cGxlPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50PiBhZGRVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKCk7Ci0gICAg
ICAgIHN0ZDo6dHVwbGU8VW5saW5rZWRDYWxsTGlua0luZm8qLCBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50PiBhZGRVbmxpbmtlZENhbGxMaW5rSW5mbygpOworICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogYWRkVW5saW5rZWRDYWxsTGlua0luZm8oKTsKIAogICAgICAgICBJbnRlcnByZXRl
ciogbV9pbnRlcnByZXRlcjsKIApAQCAtMTAyOSw3ICsxMDMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgVmVjdG9yPEpJVENvbnN0YW50UG9vbDo6VmFsdWU+IG1fY29uc3RhbnRQb29s
OwogICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3Rh
bnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKLSAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKICAgICAgICAgU2VnbWVudGVkVmVj
dG9yPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CiAgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9z
OwogICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxl
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDA5MTk5MTU4NDY4YzBm
ZTEwMmI1ZGZiZmEyYmU0ZmUxNzMxOTdlMmIuLjU3MTk2MTIxNTYwYTNhMjlhZTNkMjA3MTEzYzYw
ZGNlNjA4MGQ2MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTks
MTcgKzU5LDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVl
R1BSIChyZXR1cm5WYWx1ZUdQUjIvcmV0dXJuVmFsdWVHUFIgb24gMzItYml0KS4KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlSlNSKTsKLQotI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOwotICAgIHJldCgpOwotI2Vsc2UKLSAgICBlbWl0TmFrZWROZWFySnVtcCh2bSgpLmdl
dENUSVN0dWIob3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpLmNvZGUoKSk7Ci0jZW5kaWYKKyAgICBl
bWl0TmFrZWROZWFySnVtcCh2bSgpLmdldENUSVN0dWIocmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJh
dG9yKS5jb2RlKCkpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6cmV0dXJuRnJvbUJhc2VsaW5lR2VuZXJhdG9yKFZNJikKK3sKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OworCisgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNl
bGluZTogb3BfcmV0X2hhbmRsZXIiKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lk
IEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQpAQCAtODQsNyArODgs
NyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFy
Z3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgdW5zaWduZWQgY2hlY2tw
b2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7CiAgICAgaW50IGFyZ0NvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKQEAgLTk3LDcgKzEwMSw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwgdG1wSlNSKTsKICAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHRtcEpTUik7CiAgICAgICAgIGxvYWQzMihBZGRyZXNz
KHRtcEpTUi5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHRtcEdQ
Uik7Ci0gICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHRtcEdQUiwgYnl0ZWNvZGUsIE9wQ2FsbDo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVj
dHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YSh0bXBHUFIsIGJ5dGVjb2RlLCBP
cDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNl
dE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAg
IH0KIApAQCAtMTEwLDcgKzExNCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6
Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklU
Ojpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0
ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOwpAQCAtMTYwLDcgKzE2NCw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mCiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUNSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1Qy
KTsKLSAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZDYWxsTGlua0luZm8oKSwgcmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBD
YWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJl
Z1QzKTsKICAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNl
dE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwpAQCAtMjAzLDY0ICsyMDcsMzkg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAg
IENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgcmVnVDApOwotCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsK
IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWRWYWx1ZShBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbGVlSlNSKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKLSAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3Zt
LCBpbmZvKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BDYWxsRXZhbDo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAg
ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgY2FsbExpbmtJ
bmZvR1BSLCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wg
SklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCiB7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxs
KGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2Fs
bExpbmtJbmZvQ29uc3RhbnQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFp
bENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4g
c2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOwotICAgIHNo
dWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVE
YXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVy
ID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0jZW5kaWYKLSAgICBzaHVmZmxlRGF0YS0+
bnVtTG9jYWxzID0KLSAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUo
Ynl0ZWNvZGUubV9hcmdjKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUu
bV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQotICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJn
diwKLSAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwotICAgIH0KLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxs
ZWVKU1IucGF5bG9hZEdQUigpLCBEYXRhRm9ybWF0SlMpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxl
ZUpTUi50YWdHUFIoKSwgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSk7Ci0jZW5kaWYKLSAgICBzaHVm
ZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0KICAgICBjb25zdGV4cHIgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiA9IHJlZ1QyOwotICAgIGxvYWRDb25zdGFudChjYWxsTGlua0lu
Zm9Db25zdGFudCwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBD
YWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBjYWxsZWVKU1Iu
cGF5bG9hZEdQUigpLCBjYWxsTGlua0luZm9HUFIsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyIHNodWZmbGVyIHsgKnRoaXMsICpzaHVmZmxlRGF0YSB9OworICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BUYWlsQ2FsbDo6TWV0YWRhdGE6Om9mZnNl
dE9mQ2FsbExpbmtJbmZvKCksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgSnVtcExpc3Qgc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgY2Fs
bGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZvR1BSLCBzY29wZWRMYW1iZGE8dm9pZCgp
PihbJl17CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhID0gQ2FsbEZy
YW1lU2h1ZmZsZURhdGE6OmNyZWF0ZUZvckJhc2VsaW5lT3JMTEludFRhaWxDYWxsKGJ5dGVjb2Rl
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOworICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlciBzaHVmZmxlciB7ICp0aGlzLCBzaHVmZmxlRGF0YSB9OwogICAgICAgICBzaHVm
Zmxlci5sb2NrR1BSKGNhbGxMaW5rSW5mb0dQUik7CiAgICAgICAgIHNodWZmbGVyLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwotICAgIH0pOworICAgIH0pKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aHMpOwogCi0gICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7Ci0gICAgaW5mby0+ZnJhbWVT
aHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOwotCiAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjg4LDE3ICsyNjcsMTQg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmQKICAgICAqLwogCiAgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5m
b0NvbnN0YW50ID0gVUlOVF9NQVg7CiAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkg
ewotICAgICAgICBzdGQ6OnRpZShpbmZvLCBpbmZvQ29uc3RhbnQpID0gYWRkVW5saW5rZWRDYWxs
TGlua0luZm8oKTsKKyAgICAgICAgaW5mbyA9IGFkZFVubGlua2VkQ2FsbExpbmtJbmZvKCk7CiAg
ICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Ci0gICAgICAgIGlu
Zm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CiAgICAg
ICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0lu
ZGV4KTsKICAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRp
b25JbmZvKCkpOwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25z
dGFudDsKICAgICB9Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFu
dCk7CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUpOwogCiAgICAgLy8gU1AgaG9sZHMg
bmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291
bnQgaW5pdGlhbGl6ZWQuCiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKQEAgLTMxNiwxNiArMjkyLDE2IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUpT
UikpOwogI2VuZGlmCiAKLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBj
YWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxs
KGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FsbExpbmtJbmZvR1BSID0gcmVnVDI7Ci0gICAgbG9hZENv
bnN0YW50KGluZm9Db25zdGFudCwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlu
a0luZm8oKSwgY2FsbExpbmtJbmZvR1BSKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aCgqdGhpcywgY2FsbGVlSlNSLnBheWxvYWRHUFIoKSwgY2FsbExpbmtJbmZv
R1BSLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRh
aWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIGNhbGxlZUpTUi5wYXlsb2FkR1BSKCksIGNhbGxM
aW5rSW5mb0dQUiwgc2NvcGVkTGFtYmRhPHZvaWQoKT4oWyZdewogICAgICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhj
YWxsTGlua0luZm9HUFIpOwotICAgICAgICB9KTsKKyAgICAgICAgfSkpOwogICAgICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aHMpOwogICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7
CiAgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxv
Y2F0aW9uID0gZG9uZUxvY2F0aW9uOwpAQCAtMzQ0LDE1ICszMjAsMTYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmQKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQp
CiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CisgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBBU1NFUlQob3Bjb2RlSUQgIT0gb3Bf
Y2FsbF9ldmFsKTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkNhbGxMaW5rSW5mbygpLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwpAQCAtMzY2LDcgKzM0Myw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAK
ICAgICByZXNldFNQKCk7CiAKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4MDM5ODM2
Y2VlNmM3YjM0ZmQyYzMwNC4uMmZlMjNjNDlmZDBmOTQwOTFmNjg2MDViNzU3YWUyY2UzMjIwMTRh
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0zNzAsMjEg
KzM3MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKLXsKLSAgICBD
Q2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKLSAgICBqaXQucmV0KCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRo
dW5rKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJCYXNlbGluZTogb3BfcmV0X2hhbmRsZXIiKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDBlMmQ3ZDA4Y2ZiNzVmMzI3MWQwNjJi
MDk2YWJiMGMzNWM3ZjFhODUuLjZiY2U3NGFiODJjNTU3ZDAwODUxNTA3ODUxYTA0ZTRlMTQ2MzBj
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAt
NjAsNyArNjAsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
UHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVw
YXRjaC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2hhZG93Q2hp
Y2tlbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiU3VwZXJT
YW1wbGVyLmgiCkBAIC0xNDQ2LDE4NiArMTQ0Niw5IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25DYWxsRXZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xv
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1Bh
dGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgY2FsbGVlRnJhbWUtPnNl
dENvZGVCbG9jayhudWxscHRyKTsKLQotICAgIGlmIChjYWxsTGlua0luZm8tPnNwZWNpYWxpemF0
aW9uS2luZCgpID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIGF1dG8gY2FsbERhdGEgPSBnZXRD
YWxsRGF0YSh2bSwgY2FsbGVlKTsKLSAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgIT0gQ2Fs
bERhdGE6OlR5cGU6OkpTKTsKLQotICAgICAgICBpZiAoY2FsbERhdGEudHlwZSA9PSBDYWxsRGF0
YTo6VHlwZTo6TmF0aXZlKSB7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVl
KGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJu
VmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFs
T2JqZWN0KHZtKSwgY2FsbGVlRnJhbWUpOwotICAgICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxv
d0dDOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgIHZt
LmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAg
ICAgICBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZy
YW1lIDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwotICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxP
YmplY3QsIGNhbGxlZSkpOwotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9y
Q29uc3RydWN0KTsKLQotICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEo
dm0sIGNhbGxlZSk7Ci0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6
VHlwZTo6SlMpOwotCi0gICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlw
ZTo6TmF0aXZlKSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxlZUZyYW1lKTsKLSAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxs
ZWUpKTsKLSAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3RE
YXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBj
YWxsZWVGcmFtZSk7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQq
PihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1
bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwot
ICAgIH0KLQotICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6
Ok5vbmUpOwotICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5v
dEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCgKLSAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwotfQotCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTGlua0NhbGwsIFNs
b3dQYXRoUmV0dXJuVHlwZSwgKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKSkKIHsKLSAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOwotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxM
aW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghY2FsbExp
bmtJbmZvLT5pc0RpcmVjdCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBj
YWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKLSAgICBKU0NlbGwqIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKLSAgICBpZiAo
IWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7Ci0gICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0
aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUp
KSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29k
ZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKLQotICAgICAgICAgICAgaWYgKCFj
YWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRTZWVuKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua01vbm9tb3Jw
aGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFs
RnVuY3Rpb24sIGNvZGVQdHIpOwotCi0gICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5j
YWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFt
ZSkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBo
YW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBj
YWxsTGlua0luZm8pKTsKLSAgICB9Ci0KLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9
IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRy
OwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvZGVQ
dHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKLSAgICAgICAgaWYgKCFj
b2RlUHRyKQotICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
a2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oZXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9
IFsmXSAoKSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVN0dWIo
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8SlNF
bnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rp
b25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0KSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2Fs
bGVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+
YWRkcmVzc09mQ29kZUJsb2NrKCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5k
LCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0gKmNvZGVC
bG9ja1Nsb3Q7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgICAgIEFyaXR5Q2hl
Y2tNb2RlIGFyaXR5OwotICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQotICAgICAgICAgICAgYXJpdHkgPSBN
dXN0Q2hlY2tBcml0eTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNo
ZWNrTm90UmVxdWlyZWQ7Ci0gICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwotICAgIH0KLQotICAgIGlmICghY2FsbExpbmtJbmZv
LT5zZWVuT25jZSgpKQotICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICBlbHNl
Ci0gICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0KLSAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOwotfQotCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJh
bWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotCi0g
ICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gY2FsbGVlRnJhbWUtPmd1YXJhbnRlZWRKU1ZhbHVl
Q2FsbGVlKCk7Ci0gICAgY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxl
ZUFzVmFsdWUpOwotICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKSB7Ci0g
ICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNW
YWx1ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Ioa2luZCk7
Ci0gICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRo
ZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJh
bWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbykpOwotICAgIH0KLSAgICAKLSAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNl
bGwpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7Ci0g
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwot
ICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKLSAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRs
ZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0
ID0gdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIWlzQ2Fs
bChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3Io
Z2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93
RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tT
bG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwotICAgICAgICBmdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
ZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7Ci0gICAgfQot
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQotICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhl
Y3V0YWJsZS0+ZW50cnlwb2ludEZvcigKLSAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxM
aW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBL
ZWVwVGhlRnJhbWUpKTsKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwgZ2xvYmFsT2Jq
ZWN0LCBjYWxsTGlua0luZm8pOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uTGlua1BvbHltb3JwaGljQ2FsbCwgU2xvd1BhdGhSZXR1cm5UeXBlLCAoQ2FsbEZyYW1lKiBj
YWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8pKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKaW5kZXggNTQ4
ZDUxY2RhNGUyYTIxYTkyMTc5YjUxNWY5ODRhZjJjNjhkNmRmYy4uMDJkZDdmNTA1NWZkN2I2MmI4
NzUzMDJmODliMTFjZWNlNjY5Yjc5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVw
YXRjaC5oIgogCi0jaWYgRU5BQkxFKEpJVCkKLQogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgog
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgiCkBAIC03MSw2ICs2OSwxMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0YXRp
YyB2b2lkIGxpbmtTbG93UGF0aFRvKFZNJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJlZikKK3sKKyAg
ICBjYWxsTGlua0luZm8uc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24oY29kZVJlZi5jb2RlKCku
dGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKKyNpZiBFTkFCTEUoSklU
KQorc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIGxpbmtTbG93UGF0aFRv
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRT
dHViUm91dGluZVB0clRhZz4oKSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbGlua1Nsb3dG
b3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdldENU
SVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICBsaW5rU2xvd1BhdGhU
byh2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmspOworfQorCitzdGF0aWMgSlNDZWxsKiB3
ZWJBc3NlbWJseU93bmVyKEpTQ2VsbCogY2FsbGVlKQoreworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAvLyBFYWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJv
bSB0aGVpciBXZWJBc3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJv
cHJpYXRlIG93bmVyLgorICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNh
bGxlZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQorfQorCit2b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCisgICAgVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVC
bG9jayogY2FsbGVlQ29kZUJsb2NrLAorICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQoreworICAgIEFTU0VSVCghY2FsbExp
bmtJbmZvLnN0dWIoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1l
LT5jYWxsZXJGcmFtZSgpOworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3Ig
YSBjYWxsZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUg
dGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5p
c0NlbGwoKSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1l
LT5jb2RlQmxvY2soKTsKKworICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhh
dmUgYSB2YWxpZCBDb2RlQmxvY2suCisgICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlN
b2R1bGUoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIo
Y2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKKyAgICBB
U1NFUlQob3duZXIpOworCisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Cisg
ICAgY2FsbExpbmtJbmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBj
b2RlUHRyKTsKKyAgICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBj
YWxsZWUpOworCisgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxv
Y2spKQorICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4o
Y2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2lu
dGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJc
biIpOworCisgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKKyAgICAgICAgY2FsbGVlQ29kZUJsb2Nr
LT5saW5rSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKKworI2lmIEVO
QUJMRShKSVQpCisgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ2FsbCAmJiBjYWxsTGlua0luZm8uYWxsb3dTdHVicygpKSB7CisgICAgICAgIGxpbmtT
bG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKK30KKworc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc0Rp
cmVjdCgpKSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ29k
ZUJsb2NrKCk7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29uKCkp
CisgICAgICAgICAgICBjYWxsTGlua0luZm8uaW5pdGlhbGl6ZURpcmVjdENhbGwoKTsKKyNlbmRp
ZgorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRp
c29uKCkpIHsKKyAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNv
ZGVSZWYpOworCisgICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKKyAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOworICAgICAgICB9CisgICAg
ICAgIGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBp
bmxpbmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCisgICAgfQor
ICAgIGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKKyAgICBjYWxsTGlua0luZm8uY2xlYXJTdHVi
KCk7CisgICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBjYWxsTGlua0lu
Zm8ucmVtb3ZlKCk7Cit9CisKK3ZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQoreworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZv
KSk7CisgICAgCisgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElMaW5r
Q2FsbCgpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiB2bSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU09iamVjdCogY2FsbGVlKQoreworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKyAgICBpZiAoIWNhbGxlZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGtpbmQgIT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVu
Y3Rpb24qPih2bSwgY2FsbGVlKSkKKyAgICAgICAgcmV0dXJuIHdhc21GdW5jdGlvbi0+anNDYWxs
RW50cnlwb2ludCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIFVOVVNFRF9Q
QVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKKyNlbmRpZgorICAgIHJldHVy
biBudWxscHRyOworfQorCisjaWYgRU5BQkxFKEpJVCkKKwogc3RhdGljIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+IG9wZXJhdGlvbikKIHsKICAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX09Q
RVJBVElPTl9XSVRIX1ZBTElEQVRJT04ob3BlcmF0aW9uKTsKQEAgLTE0MzUsNzAgKzE1NDksNiBA
QCB2b2lkIHJlcGF0Y2hJbnN0YW5jZU9mKAogICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKTsKIH0KIAotc3Rh
dGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0mLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewot
ICAgIGNhbGxMaW5rSW5mby5zZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUo
KS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpKTsKLX0KLQotc3RhdGljIHZvaWQg
bGlua1Nsb3dQYXRoVG8oVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yKQotewotICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0lu
Zm8sIHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRh
Zz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCi17Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5m
byk7Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdmlydHVhbFRodW5rKTsK
LSAgICBjYWxsTGlua0luZm8uc2V0U2xvd1N0dWIoR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpjcmVh
dGUodm0sIHZpcnR1YWxUaHVuaykpOwotfQotCi1zdGF0aWMgSlNDZWxsKiB3ZWJBc3NlbWJseU93
bmVyKEpTQ2VsbCogY2FsbGVlKQotewotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAvLyBF
YWNoIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHNoYXJlcyB0aGUgc3R1YnMgZnJvbSB0aGVpciBXZWJB
c3NlbWJseS5Nb2R1bGUsIHdoaWNoIGFyZSB0aGVyZWZvcmUgdGhlIGFwcHJvcHJpYXRlIG93bmVy
LgotICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGNhbGxlZSk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjYWxsZWUpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQotfQotCi12b2lkIGxpbmtNb25vbW9ycGhpY0NhbGwoCi0gICAgVk0mIHZtLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVl
Q29kZUJsb2NrLAotICAgIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBjb2RlUHRyKQotewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIo
KSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZSgpOwotICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEgY2VsbCBmb3IgYSBjYWxsZWUuIFdo
ZW4gY2FsbGluZwotICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNhbGxlZSBp
cyBhIGNlbGwuCi0gICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwoKSk7Ci0K
LSAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2so
KTsKLQotICAgIC8vIFdlYkFzc2VtYmx5IC0+IEpTIHN0dWJzIGRvbid0IGhhdmUgYSB2YWxpZCBD
b2RlQmxvY2suCi0gICAgSlNDZWxsKiBvd25lciA9IGlzV2ViQXNzZW1ibHlNb2R1bGUoY2FsbGVy
RnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUt
PmNhbGxlZSgpLmFzQ2VsbCgpKSA6IGNhbGxlckNvZGVCbG9jazsKLSAgICBBU1NFUlQob3duZXIp
OwotCi0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJ
bmZvLnNldE1vbm9tb3JwaGljQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlLCBjb2RlUHRyKTsKLSAg
ICBjYWxsTGlua0luZm8uc2V0TGFzdFNlZW5DYWxsZWUodm0sIG93bmVyLCBjYWxsZWUpOwotCi0g
ICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQotICAgICAg
ICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJs
b2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxs
ZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwotCi0gICAg
aWYgKGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21p
bmdDYWxsKGNhbGxlckZyYW1lLCAmY2FsbExpbmtJbmZvKTsKLQotICAgIGlmIChjYWxsTGlua0lu
Zm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYgY2FsbExpbmtJbmZvLmFs
bG93U3R1YnMoKSkgewotICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBs
aW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwotfQotCiB2b2lkIGxp
bmtEaXJlY3RDYWxsKAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHIpCkBAIC0xNTI4LDM1ICsxNTc4LDYgQEAg
dm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCiAgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CiB9CiAKLXN0YXRp
YyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewotICAg
IGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewotICAgICAgICBjYWxsTGlua0luZm8uY2xl
YXJDb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlz
b24oKSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5mby5pbml0aWFsaXplRGlyZWN0Q2FsbCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY2FsbExpbmtJbmZvLmNsZWFyZWRCeUpldHRpc29u
KCkpIHsKLSAgICAgICAgICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIGNvZGVS
ZWYpOwotCi0gICAgICAgICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIoKSkKLSAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8ucmV2ZXJ0Q2FsbFRvU3R1YigpOwotICAgICAgICB9Ci0gICAgICAg
IGNhbGxMaW5rSW5mby5jbGVhckNhbGxlZSgpOyAvLyBUaGlzIGFsc28gY2xlYXJzIHRoZSBpbmxp
bmUgY2FjaGUgYm90aCBmb3IgZGF0YSBhbmQgY29kZS1iYXNlZCBjYWNoZXMuCi0gICAgfQotICAg
IGNhbGxMaW5rSW5mby5jbGVhclNlZW4oKTsKLSAgICBjYWxsTGlua0luZm8uY2xlYXJTdHViKCk7
Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU2xvd1N0dWIoKTsKLSAgICBpZiAoY2FsbExpbmtJbmZv
LmlzT25MaXN0KCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKLX0KLQotdm9pZCB1
bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0gICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJ
bmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKLSAgICAKLSAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
cmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwotfQotCiBzdGF0aWMgdm9pZCBsaW5r
VmlydHVhbEZvcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbykKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSgpOwpAQCAtMTU2NSw5ICsxNTg2LDggQEAgc3RhdGljIHZvaWQgbGlua1ZpcnR1
YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0kKICAgICBkYXRhTG9nTG5JZihzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJs
b2NrKSwKICAgICAgICAgIkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2lu
KGNhbGxlckNvZGVCbG9jaywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2
aXJ0dWFsVGh1bmtGb3Iodm0sIGNhbGxMaW5rSW5mbyk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFs
Q2FsbChjYWxsTGlua0luZm8uY2FsbE1vZGUoKSk7CiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExp
bmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93U3R1YihHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6OmNyZWF0ZSh2bSwgdmlydHVhbFRodW5rKSk7CiAgICAgY2FsbExp
bmtJbmZvLnNldENsZWFyZWRCeVZpcnR1YWwoKTsKIH0KIApAQCAtMTgwMyw4ICsxODIzLDEwIEBA
IHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgY2FsbHNbY2FzZUluZGV4XS5jb2RlUHRyID0gY29kZVB0cjsKLSAgICAgICAgaWYgKG5lZWRz
RG9uZUp1bXApCisgICAgICAgIGlmIChuZWVkc0RvbmVKdW1wKSB7CisgICAgICAgICAgICBBU1NF
UlQoIWlzRGF0YUlDKTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsK
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKQEAg
LTE4MjgsMTUgKzE4NTAsMjggQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWwKICAgICB9CiAgICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBH
UFJJbmZvOjpyZWdUMyk7CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgIGlmIChpc0RhdGFJQyAm
JiAhY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAgICAvLyBXZSB3ZXJlIGNhbGxl
ZCBmcm9tIHRoZSBmYXN0IHBhdGgsIGdldCByaWQgb2YgYW55IHJlbW5hbnRzIG9mIHRoYXQKLSAg
ICAgICAgLy8gd2hpY2ggbWF5IGV4aXN0LiBUaGlzIHJlYWxseSBvbmx5IG1hdHRlcnMgZm9yIHg4
Niwgd2hpY2ggYWRqdXN0cwotICAgICAgICAvLyBTUCBmb3IgY2FsbHMuCi0gICAgICAgIHN0dWJK
aXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Q0KTsKKworICAg
IC8vIDEuIElmIGl0IGlzIG5vdCBEYXRhSUMsIGxpbmtSZWdpc3RlciBpcyBub3QgcG9pbnRpbmcg
dGhlIGRvbmVMb2NhdGlvbi4KKyAgICAvLyAyLiBJZiBpdCBpcyB0YWlsLWNhbGwsIGxpbmtSZWdp
c3RlciBpcyBub3QgcG9pbnRpbmcgdGhlIGRvbmVMb2NhdGlvbiBmb3Igc2xvdy1jYWxsIGNhc2Uu
IEJ1dCBzaW5jZSB3ZSBhcmUgbm90IGV4ZWN1dGluZyBwcmVwYXJlRm9yVGFpbENhbGwsIHdlIHN0
aWxsIHN0YWNrIGVudHJpZXMgZm9yIHRoZSBjYWxsZXIncyBmcmFtZS4KKyAgICAvLyAzLiBJZiB3
ZSdyZSBhIGRhdGEgSUMsIHRoZW4gdGhlIHJldHVybiBhZGRyZXNzIGlzIGFscmVhZHkgY29ycmVj
dAorICAgIC8vIFRodXMgd2UgbmVlZCB0byBwdXQgaXQgZm9yIHRoZSBzbG93LXBhdGggY2FsbC4K
KyAgICBpZiAoIWlzRGF0YUlDKSB7CisgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0
YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgc3R1YkppdC5yZXN0b3Jl
UmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGFyZSBub3QgZG9pbmcgYSByZWFsIHRhaWwtY2FsbCBpbiB0
aGlzIGNhc2UuIFdlIGxlYXZlIHN0YWNrIGVudHJpZXMgaW4gdGhlIGNhbGxlciwgYW5kIHdlIGFy
ZSBub3QgcnVubmluZyBwcmVwYXJlRm9yVGFpbENhbGwsIHRodXMsCisgICAgICAgIC8vIHdlIHdp
bGwgcmV0dXJuIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgdGhlIGNhbGxlZSBmaW5pc2hlcy4gV2Ugc2hv
dWxkIG1ha2UgaXQgYSByZWFsIHRhaWwtY2FsbCBmb3IgdGhpcyBzbG93IHBhdGggY2FzZS4KKyAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgICAgICAgICAgLy8gSXQgbmVlZHMgdG8gYmUgTExJbnQgb3IgQmFzZWxpbmUgc2luY2Ug
d2UgYXJlIHVzaW5nIHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvci4KKyAgICAgICAgICAgIGlm
ICghaXNXZWJBc3NlbWJseSkKKyAgICAgICAgICAgICAgICBBU1NFUlQoIUpJVENvZGU6OmlzT3B0
aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpOworI2VuZGlmCisgICAgICAg
ICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtLmdldENUSVN0
dWIoSklUOjpyZXR1cm5Gcm9tQmFzZWxpbmVHZW5lcmF0b3IpLmNvZGUoKS51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgICAgICBzdHViSml0LnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAg
fQogICAgIH0KLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBH
UFJJbmZvOjpyZWdUNCk7Ci0gICAgCi0gICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CisKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAg
c2xvdyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTE4NTgsOCArMTg5MywxMCBAQCB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIENhbAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKCFkb25lLmVtcHR5KCkpCisgICAg
aWYgKCFkb25lLmVtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7CiAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbigpKTsKKyAg
ICB9CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVu
a1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSkpOwogICAgIAogICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZigqbmV3IFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKApAQCAtMjAwMSwyMyArMjAzOCw2IEBAIHZvaWQgcmVz
ZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKLXsKLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCi0gICAgaWYgKCFjYWxsZWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGlmIChraW5kICE9IENvZGVGb3JDYWxsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0
aW9uKj4odm0sIGNhbGxlZSkpCi0gICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVu
dHJ5cG9pbnQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0oa2luZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7CiAjZW5kaWYKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAppbmRleCBlY2UzNzdlZTEwYTJlZjg0YTIzZDllYzJkZDQ4Y2Y2OGQ3
OWM3ZGU5Li45M2EwMzY1MzI2YWJmYmVkZWUwNTc1ODljNDU0MDliMmViMzY1ODk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApAQCAtMjUsMTQgKzI1LDE0IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaWYgRU5BQkxFKEpJVCkKLQogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIu
aCIKICNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworCiBlbnVtIGNsYXNzIEdl
dEJ5S2luZCB7CiAgICAgQnlJZCwKICAgICBCeVZhbCwKQEAgLTg3LDUgKzg3LDMgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzVG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29k
ZVNwZWNpYWxpemF0aW9uS2kKIAogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVO
QUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2hJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2hJbmxpbmVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmVmZTdiMWIzMzc2NGJkZjQyYjJlNGYwMmQ0ZGYwY2Q5ZTgxYzQ5ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaElubGluZXMuaApA
QCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVwYXRjaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNh
bGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7CisKKyAgICBpZiAoY2Fs
bExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAg
ICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIGNhbGxlZSk7CisgICAgICAgIEFTU0VS
VChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7CisKKyAgICAgICAgaWYgKGNh
bGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2ZSkgeworICAgICAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOworICAgICAgICAgICAg
Y2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgICAgIHZt
LmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFz
T2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKKyAgICAgICAg
ICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAor
ICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCisgICAgICAgICAgICAgICAgTExJbnQ6Omdl
dEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZv
LT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVG
cmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2Fs
bERhdGE6OlR5cGU6Ok5vbmUpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwor
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICB9
CisKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2Rl
Rm9yQ29uc3RydWN0KTsKKworICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERh
dGEodm0sIGNhbGxlZSk7CisgICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0
YTo6VHlwZTo6SlMpOworCisgICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6
VHlwZTo6TmF0aXZlKSB7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxlZUZyYW1lKTsKKyAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChj
YWxsZWUpKTsKKyAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1
Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0p
LCBjYWxsZWVGcmFtZSk7CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCgKKyAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVF
bnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgIH0KKworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRh
LnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwg
Y2FsbGVlKSk7CisgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAgdm0uZ2V0Q1RJVGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworfQorCitB
TFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvKQoreworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxl
ckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgUkVMRUFT
RV9BU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNEaXJlY3QoKSk7CisKKyAgICBKU1ZhbHVlIGNhbGxl
ZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBK
U0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVl
KTsKKyAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CisgICAgICAgIGlmIChhdXRvKiBp
bnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNh
bGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9y
KGtpbmQpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKKworICAgICAg
ICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCisgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxw
dHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOworCisgICAgICAgICAgICB2b2lkKiBsaW5r
ZWRUYXJnZXQgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fs
bExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6
IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxs
ZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBjYWxs
ZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBudWxscHRyOworICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7Cisg
ICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKKyAg
ICAgICAgaWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJv
d0V4Y2VwdGlvbiA9IFsmXSAoKSB7CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZt
LmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RB
YmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFD
b25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgICAgICAgICByZXR1
cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIENvZGVCbG9j
ayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7Cisg
ICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4
ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24o
KSk7CisKKyAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Nsb3Q7CisgICAgICAgIEFTU0VS
VChjb2RlQmxvY2spOworCisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBp
ZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlz
VmFyYXJncygpKQorICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAg
IGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkp
OworICAgIH0KKworICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICBj
YWxsTGlua0luZm8tPnNldFNlZW4oKTsKKyAgICBlbHNlCisgICAgICAgIGxpbmtNb25vbW9ycGhp
Y0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0cik7CisKKyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworfQor
CitBTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkK
K3sKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgY2FsbGVl
QXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOworICAgIGNh
bGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgeworICAgICAgICBpZiAoanNEeW5h
bWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgQVNT
RVJUKCEhY29kZVB0cik7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZv
LT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVG
cmFtZSkpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVl
LCBjYWxsTGlua0luZm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTU2NvcGUqIHNj
b3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChVTkxJS0VMWSghZXhl
Y3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
PihleGVjdXRhYmxlKTsKKworICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZd
ICgpIHsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIWlzQ2Fs
bChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25z
dHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3Io
Z2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93
RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tT
bG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBmdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwg
ZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisgICAgfQor
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQorICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhl
Y3V0YWJsZS0+ZW50cnlwb2ludEZvcigKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxM
aW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBL
ZWVwVGhlRnJhbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1
ZjdiNzg2NDExZDg1NWIyYTFkZTQ3Yy4uZGJkNWFiZDM3ODhkNzFiODAzMDViYjg1MWZiY2MyNzEz
ZTg3YjAwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcApAQCAtMzQ0LDQ4ICszNDQsMjUgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGwoVk0mIHZtKQogICAgIHJl
dHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ2FsbCk7
CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1
YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QoVk0mIHZtKQotewotICAgIHJldHVybiB2aXJ0dWFs
VGh1bmtGb3Iodm0sIENhbGxNb2RlOjpSZWd1bGFyLCBDb2RlRm9yQ29uc3RydWN0KTsKLX0KLQog
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5r
Rm9yVGFpbENhbGwoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENh
bGxNb2RlOjpUYWlsLCBDb2RlRm9yQ2FsbCk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QoVk0mIHZt
KQotewotICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpUYWlsLCBDb2Rl
Rm9yQ29uc3RydWN0KTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q2FsbChWTSYgdm0pCi17Ci0gICAgcmV0
dXJuIHZpcnR1YWxUaHVua0Zvcih2bSwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwgQ29kZUZvckNhbGwp
OwotfQotCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0
dWFsVGh1bmtGb3JDb25zdHJ1Y3RDb25zdHJ1Y3QoVk0mIHZtKQogewogICAgIHJldHVybiB2aXJ0
dWFsVGh1bmtGb3Iodm0sIENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxU
aHVua0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBD
YWxsTW9kZSBjYWxsTW9kZSkKIHsKLSAgICBhdXRvIG1vZGUgPSBjYWxsTGlua0luZm8uY2FsbE1v
ZGUoKTsKLSAgICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCk7
CiAgICAgYXV0byBnZW5lcmF0b3IgPSBbJl0gKCkgLT4gVGh1bmtHZW5lcmF0b3IgewotICAgICAg
ICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChjYWxsTW9kZSkgewogICAgICAgICBj
YXNlIENhbGxNb2RlOjpSZWd1bGFyOgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsOwot
ICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3Q7CisgICAg
ICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yUmVndWxhckNhbGw7CiAgICAgICAgIGNhc2Ug
Q2FsbE1vZGU6OlRhaWw6Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENhbGw7Ci0gICAgICAgICAg
ICByZXR1cm4gdmlydHVhbFRodW5rRm9yVGFpbENvbnN0cnVjdDsKKyAgICAgICAgICAgIHJldHVy
biB2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbDsKICAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3Ry
dWN0OgotICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENhbGw7CiAgICAgICAgICAgICByZXR1
cm4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCAwZjlmNmUyZDM2ZjZkZDIzZTE4NzI2YWNlNjMxNGEz
MGEyMDFkYmNlLi5hYjdjZjY2YzQyMTUxZWUwMTk1OGMxYWIyMmYyOWZjZDhkZDcwMTRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTQ5LDcgKzQ5
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0mKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0
dWFsVGh1bmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRTdHViUm91dGluZVB0clRhZz4gdmlydHVhbFRodW5rRm9yKFZNJiwgQ2FsbE1vZGUpOwogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG5hdGl2ZUNhbGxHZW5lcmF0b3Io
Vk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbmF0aXZlQ29uc3Ry
dWN0R2VuZXJhdG9yKFZNJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEu
Y3BwCmluZGV4IGU4ZGFmZjdkODhiMzBjNmJmODQ3MjMxNGJlMmYxYzc5NjBmMjQ3ZjUuLmQwYjM3
Mzg5MjFhNGYwMDE1MTJlN2RlZTNhODQ0M2M1MTkzYmQyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuY3BwCkBAIC01OCw2ICs1OCw3IEBAIGV4dGVybiAiQyIgdm9p
ZCB3YXNtX2VudHJ5KHZvaWQqLCB2b2lkKiwgdm9pZCopOwogZXh0ZXJuICJDIiB2b2lkIHZtRW50
cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxs
SlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgdGFpbENhbGxKU0VudHJ5
U2xvd1BhdGhUcmFtcG9saW5lKHZvaWQpOworZXh0ZXJuICJDIiB2b2lkIHRhaWxDYWxsV2l0aG91
dFVudGFnSlNFbnRyeVRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgZXhjZXB0aW9u
SGFuZGxlclRyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gIkMiIHZvaWQgcmV0dXJuRnJvbUxMSW50
VHJhbXBvbGluZSh2b2lkKTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1NCw3IEBAIHZvaWQgaW5pdGlh
bGl6ZSgpCiAgICAgewogICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwogICAgICAgICBp
ZiAoT3B0aW9uczo6dXNlSklUKCkpCi0gICAgICAgICAgICBjb2RlUmVmLmNvbnN0cnVjdChjcmVh
dGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25z
dHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbEpTRW50cnlUcmFtcG9saW5lKSkpKTsKICAgICAgICAgZ19q
c2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR2F0ZTo6dGFpbENh
bGxKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CkBAIC0xNjEsMTEgKzE2MiwxOSBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgIHsKICAgICAg
ICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgp
KQotICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRlVGFpbENhbGxHYXRlKEpTRW50
cnlTbG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoY3JlYXRl
VGFpbENhbGxHYXRlKEpTRW50cnlQdHJUYWcsIHRydWUpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklU
R2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
KCZ0YWlsQ2FsbEpTRW50cnlTbG93UGF0aFRyYW1wb2xpbmUpKSkpOwogICAgICAgICBnX2pzY0Nv
bmZpZy5sbGludC5nYXRlTWFwW3N0YXRpY19jYXN0PHVuc2lnbmVkPihHYXRlOjp0YWlsQ2FsbEpT
RW50cnlTbG93UGF0aFB0clRhZyldID0gY29kZVJlZi5nZXQoKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICB9CisgICAgeworICAgICAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+PiBjb2RlUmVmOwor
ICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBjb2RlUmVmLmNvbnN0
cnVjdChjcmVhdGVUYWlsQ2FsbEdhdGUoSlNFbnRyeVB0clRhZywgZmFsc2UpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY29kZVJlZi5jb25zdHJ1Y3QoTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PE5hdGl2ZVRvSklUR2F0ZVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldGFnQ29kZVB0cjx2b2lkKiwgQ0Z1bmN0aW9uUHRyVGFnLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWc+KCZ0YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lKSkpKTsK
KyAgICAgICAgZ19qc2NDb25maWcubGxpbnQuZ2F0ZU1hcFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
R2F0ZTo6dGFpbENhbGxXaXRob3V0VW50YWdKU0VudHJ5UHRyVGFnKV09IGNvZGVSZWYuZ2V0KCku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgfQogICAgIHsKICAgICAgICAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRl
UHRyVGFnPj4gY29kZVJlZjsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggMWE5NWQx
ZGQwZWE1ZWYzNDMxMDYxNWI2OTFlYmM5YTFlYWI4MmE2YS4uZjlkMWRiNWE0NjkzNGM2NjcxNmVm
Njc1ODBhNWM1YTIyOGMxZDRiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZUlubGluZXMuaCIK
ICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJSZXBhdGNoSW5saW5lcy5oIgog
I2luY2x1ZGUgIlNoYWRvd0NoaWNrZW4uaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNp
bmNsdWRlICJWTUlubGluZXMuaCIKQEAgLTU4Miw2ICs1ODMsMTcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc3RhY2tfY2hlY2spCiAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbEZyYW1lKTsK
IH0KIAorZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfbGlua19jYWxsKENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICByZXR1cm4gbGlua0ZvcihjYWxsZWVGcmFtZSwg
anNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgY2FsbExpbmtJbmZvKTsKK30K
KworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxG
cmFtZSogY2FsbGVlRnJhbWUsIEpTQ2VsbCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbywgSlNDZWxsKikKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxs
SWdub3JlZDsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihqc0Nhc3Q8SlNHbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBjYWxsZWVGcmFtZSwgY2FsbExpbmtJbmZvLCBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworfQorCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfbmV3X29iamVjdCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtMTgxOSw3ICsxODMx
LDggQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChDYWxsRnJhbWUq
IGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5z
ZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5lbmNvZGVkSG9zdENh
bGxSZXR1cm5WYWx1ZSA9IGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUp
LT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CiAgICAgICAgICAgICBEaXNhbGxvd0dD
IGRpc2FsbG93R0M7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3Qs
IGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CisgICAgICAgICAgICBh
dXRvKiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVn
aXN0ZXJzOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxs
ZXJTUCwgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBzbG93UGF0aExvZygiQ2FsbCBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNh
bGxlZSwgIlxuIik7CkBAIC0xODM4LDcgKzE4NTEsOCBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5U
eXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVl
LAogICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAg
ICAgICB2bS5lbmNvZGVkSG9zdENhbGxSZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZl
LmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1l
KTsKICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICBMTElOVF9DQUxMX1JF
VFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5W
YWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRh
Zyk7CisgICAgICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9i
amVjdCwgY2FsbGVyU1AsIExMSW50OjpnZXRIb3N0Q2FsbFJldHVyblZhbHVlRW50cnlwb2ludCgp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKICAgICB9CiAgICAg
CiAgICAgc2xvd1BhdGhMb2coIkNvbnN0cnVjdG9yIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlvbjog
IiwgY2FsbGVlLCAiXG4iKTsKQEAgLTE4NDcsNyArMTg2MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJl
dHVyblR5cGUgaGFuZGxlSG9zdENhbGwoQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNWYWx1ZSBj
YWxsZWUsCiAgICAgTExJTlRfQ0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFDb25z
dHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiB9CiAKLWlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlLCBMTEludENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gbnVsbHB0cikKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0
VXBDYWxsKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
Y2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwpAQCAtMTg1OSwxNyArMTg3MywxMiBAQCBpbmxp
bmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBD
b2RlU3BlY2lhbGl6YXRpb25LaQogICAgIAogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNl
bGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxlZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5j
dGlvbkNlbGwpIHsKLSAgICAgICAgaWYgKGF1dG8qIGludGVybmFsRnVuY3Rpb24gPSBqc0R5bmFt
aWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKKyAgICAgICAg
aWYgKGNhbGxlZUFzVmFsdWUuaW5oZXJpdHM8SW50ZXJuYWxGdW5jdGlvbj4odm0pKSB7CiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwogICAgICAgICAgICAg
QVNTRVJUKCEhY29kZVB0cik7Ci0KLSAgICAgICAgICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VT
U19TTE9XICYmIGNhbGxMaW5rSW5mbykgewotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+bGluayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBj
b2RlUHRyKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRo
PEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAg
ICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50cnlQdHJUYWcpOworICAgICAgICAgICAgYXV0byogY2Fs
bGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVyczsK
KyAgICAgICAgICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiAgICAgICAgIH0KICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGhhbmRsZUhvc3RDYWxsKGNhbGxl
ZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBraW5kKSk7CiAgICAgfQpAQCAtMTkwNCw3NCArMTkxMyw5
IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpCiAgICAgfQogCiAgICAgQVNTRVJUKCEhY29kZVB0
cik7Ci0gICAgCi0gICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJ
bmZvKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICBjYWxsTGlua0luZm8tPmxpbmsodm0sIGNhbGxlckNvZGVCbG9j
aywgY2FsbGVlLCBjb2RlUHRyKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jaykKLSAgICAgICAgICAg
IGNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0g
ICAgfQotCiAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoPEpTRW50cnlQdHJUYWc+KGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBj
YWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdl
bmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgT3Am
JiBieXRlY29kZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBjaGVja3Bv
aW50SW5kZXggPSAwKQotewotICAgIC8vIFRoaXMgbmVlZHMgdG86Ci0gICAgLy8gLSBTZXQgdXAg
YSBjYWxsIGZyYW1lLgotICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBp
bGUgaXQgaWYgbmVjZXNzYXJ5LgotICAgIC8vIC0gSWYgcG9zc2libGUsIGxpbmsgdGhlIGNhbGwn
cyBpbmxpbmUgY2FjaGUuCi0gICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUg
YWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCi0gICAgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGNhbGxlZUZvcihieXRlY29k
ZSwgY2hlY2twb2ludEluZGV4KSk7Ci0gICAgCi0gICAgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZSA9
IGNhbGxGcmFtZSAtIHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVj
a3BvaW50SW5kZXgpOwotICAgIAotICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2tw
b2ludEluZGV4KSk7Ci0gICAgY2FsbGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVy
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0gY2FsbGVlQXNWYWx1ZTsKLSAgICBjYWxsZWVGcmFt
ZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKLSAgICAKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgcmV0dXJuIHNldFVwQ2FsbChjYWxs
ZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSwgJmNhbGxMaW5rSW5mb0ZvcihtZXRhZGF0YSwg
Y2hlY2twb2ludEluZGV4KSk7Ci19Ci0KLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
YWxsKQotewotICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmlj
Q2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwp
KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RhaWxfY2FsbCkKLXsKLSAg
ICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJs
b2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcFRhaWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOwotfQot
Ci1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0KQotewotICAgIExMSU5U
X0JFR0lOX05PX1NFVF9QQygpOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNh
bGxGcmFtZSwgcGMtPmFzPE9wQ29uc3RydWN0PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7Ci19Ci0K
LUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2NhbGwpCi17Ci0g
ICAgTExJTlRfQkVHSU4oKTsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLQotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNh
bGxGcmFtZSwgcGMtPmFzPE9wSXRlcmF0b3JPcGVuPigpLCBDb2RlRm9yQ2FsbCwgT3BJdGVyYXRv
ck9wZW46OnN5bWJvbENhbGwpKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2l0ZXJhdG9yX25leHRfY2FsbCkKLXsKLSAgICBMTElOVF9CRUdJTigpOwotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IGdlbmVyaWNDYWxsKGNvZGVCbG9jaywgY2FsbEZyYW1lLCBwYy0+YXM8T3BJdGVyYXRvck5leHQ+
KCksIENvZGVGb3JDYWxsLCBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQpKTsKKyAgICBhdXRv
KiBjYWxsZXJTUCA9IGNhbGxlZUZyYW1lICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0
ZXJzOworICAgIExMSU5UX0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVyU1AsIGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzKQpAQCAtMjA0Myw4ICsx
OTg3LDggQEAgZW51bSBjbGFzcyBTZXRBcmd1bWVudHNXaXRoIHsKICAgICBDdXJyZW50QXJndW1l
bnRzCiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiog
cGMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgU2V0QXJndW1lbnRzV2l0aCBzZXQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgU2V0QXJndW1lbnRzV2l0aCBzZXQ+CitpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5z
dHJ1Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKQogewogICAgIExMSU5UX0JFR0lO
X05PX1NFVF9QQygpOwogCkBAIC0yMDUzLDExICsxOTk3LDEyIEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmFyYXJnc1NldHVwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbioKICAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRv
IGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3A+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX2NhbGxlZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gdm0ubmV3
Q2FsbEZyYW1lUmV0dXJuVmFsdWU7Ci0KLSAgICBpZiAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6
Ok9iamVjdCkgeworICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdm0u
dmFyYXJnc0xlbmd0aCArIDE7CisgICAgaWYgY29uc3RleHByIChzZXQgPT0gU2V0QXJndW1lbnRz
V2l0aDo6T2JqZWN0KSB7CiAgICAgICAgIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX3RoaXNWYWx1ZSksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2Fy
Z3VtZW50cyksIGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwogICAg
ICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpOwogICAgIH0gZWxz
ZQpAQCAtMjA2NywyNyArMjAxMiwzMCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZhcmFy
Z3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgY2Fs
bGVlRnJhbWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwog
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFt
ZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOworICAgIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLnVw
ZGF0ZU1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKKworICAgIGF1dG8qIGNhbGxlclNQID0gY2FsbGVlRnJhbWUgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnM7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgY2FsbGVyU1Ap
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQogewot
ICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29k
ZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NT
ZXR1cDxPcENhbGxWYXJhcmdzLCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3Q+KGNhbGxGcmFtZSwg
cGMsIENvZGVGb3JDYWxsKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rh
aWxfY2FsbF92YXJhcmdzKQogewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZh
cmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpPYmpl
Y3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbFZhcmFyZ3MsIFNldEFyZ3Vt
ZW50c1dpdGg6Ok9iamVjdD4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwpOwogfQogCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQog
ewotICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KGNh
bGxGcmFtZSwgcGMsIENvZGVGb3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1l
bnRzKTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRz
LCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBDb2Rl
Rm9yQ2FsbCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3Rf
dmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncz4o
Y2FsbEZyYW1lLCBwYywgQ29kZUZvckNvbnN0cnVjdCwgU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0
KTsKKyAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncywgU2V0QXJndW1l
bnRzV2l0aDo6T2JqZWN0PihjYWxsRnJhbWUsIHBjLCBDb2RlRm9yQ29uc3RydWN0KTsKIH0KIAog
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBjb21tb25DYWxsRXZhbChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gcmV0dXJuUG9pbnQpCkBAIC0yMTEwLDcgKzIwNTgsOCBAQCBpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJ
bnN0cnVjdGlvbgogICAgIAogICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gSlNW
YWx1ZTo6ZW5jb2RlKGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgYnl0ZWNvZGUubV9l
Y21hTW9kZSkpOwogICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICBMTElOVF9DQUxMX1JF
VFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5W
YWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRh
Zyk7CisgICAgYXV0byogY2FsbGVyU1AgPSBjYWxsZWVGcmFtZSArIENhbGxlckZyYW1lQW5kUEM6
OnNpemVJblJlZ2lzdGVyczsKKyAgICBMTElOVF9DQUxMX1JFVFVSTihnbG9iYWxPYmplY3QsIGNh
bGxlclNQLCBMTEludDo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZUVudHJ5cG9pbnQoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBlMjBhMGRmYzZiODdhY2Q2MjI2OGU4OGFhNmFh
OTY0ZmI2ZTA5YjY2Li5kNDM4ZmNiMzM5ZGFmZTM3YTNjMTQxZGJlMjRhNmFkMjExMjliYjhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMzgs
NiArMzgsOCBAQCBuYW1lc3BhY2UgTExJbnQgewogCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJu
VHlwZSBsbGludF90cmFjZV9vcGVyYW5kKENhbGxGcmFtZSosIGNvbnN0IEluc3RydWN0aW9uKiwg
aW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpIFJFRkVSRU5DRURfRlJPTV9BU007CiBleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBjb25z
dCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBS
RUZFUkVOQ0VEX0ZST01fQVNNOworZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRf
bGlua19jYWxsKENhbGxGcmFtZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOwor
ZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdmlydHVhbF9jYWxsKENhbGxGcmFt
ZSosIEpTQ2VsbCosIENhbGxMaW5rSW5mbyosIEpTQ2VsbCopOwogZXh0ZXJuICJDIiB2b2lkIGxs
aW50X3dyaXRlX2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUqLCBKU0NlbGwqKSBSRUZFUkVOQ0VEX0ZS
T01fQVNNIFdURl9JTlRFUk5BTDsKIAogI2RlZmluZSBMTElOVF9TTE9XX1BBVEhfREVDTChuYW1l
KSBcCkBAIC0xMTksOSArMTIxLDYgQEAgTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKIExMSU5UX1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMpOwogTExJTlRfU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuY19leHApOwogTExJTlRfU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9zZXRfZnVuY3Rpb25fbmFtZSk7Ci1MTElOVF9TTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF90YWlsX2NhbGwpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9jb25zdHJ1Y3QpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9z
aXplX2ZyYW1lX2Zvcl92YXJhcmdzKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfc2l6ZV9mcmFtZV9mb3JfZm9yd2FyZF9hcmd1bWVudHMpOwogTExJTlRfU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmFyZ3MpOwpAQCAtMTMxLDggKzEzMCw2IEBA
IExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3Mp
OwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWwpOwogTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2V2YWxfd2lkZTE2KTsKIExM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUzMik7Ci1M
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCk7
Ci1MTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2Fs
bCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RlYXJfb2ZmX2FyZ3Vt
ZW50cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBM
TElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAppbmRleCA0NjJjYmZiZTRl
MzQ1Njg0NWUwNWFhOGJjMGM0ODExNTNjYmI4ZDBhLi4xNjAzYzJjNzg1NGM5OTliZTllNmM1NzA1
MzM2Y2ZmNzQyNzI5MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRo
dW5rcy5jcHAKQEAgLTM0Niw5ICszNDYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZl
VG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiBwb2ludGVyLCBQdAogewog
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMywgdGFn
KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQ
UkluZm86OnJlZ1QzKTsKLSAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMywgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUNSwgdGFnKTsKKyAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocG9pbnRlciksIEdQUkluZm86OnJlZ1Q1KTsK
KyAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUNSwgT3BlcmF0aW9uUHRyVGFnKTsKIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkxMSW50VGh1bmspOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcsICJMTEludCAlcyBjYWxsIGdhdGUgdGh1bmsiLCBu
YW1lKTsKQEAgLTM2NiwxMyArMzY2LDE1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVU
b0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVdhc21HYXRlVGh1bmsodm9pZCogcG9pbnRlciwKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnLCAi
TExJbnQgJXMgd2FzbSBjYWxsIGdhdGUgdGh1bmsiLCBuYW1lKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRhZz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRh
ZyB0YWcpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVh
dGVUYWlsQ2FsbEdhdGUoUHRyVGFnIHRhZywgYm9vbCB1bnRhZykKIHsKICAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCi0gICAgaml0LnVudGFnUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKLSAgICBqaXQudmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJlZ2lzdGVy
czo6bHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgaml0LmZhckp1bXAoR1BSSW5mbzo6
cmVnVDAsIHRhZyk7CisgICAgaWYgKHVudGFnKSB7CisgICAgICAgIGppdC51bnRhZ1B0cihHUFJJ
bmZvOjphcmd1bWVudEdQUjIsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAgIGppdC52YWxp
ZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKKyAgICB9CisgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6YXJndW1lbnRHUFI3LCB0YWcpOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6TExJbnRUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIE5hdGl2ZVRvSklUR2F0ZVB0clRhZywgIkxMSW50IHRhaWwgY2FsbCBnYXRlIHRo
dW5rIik7CkBAIC01NzMsOCArNTc1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IHJldHVybkxvY2F0aW9uVGh1bmsoT3Bjb2RlSUQgb3Bjb2RlSUQsIE9wY28KICAgICBM
TElOVF9SRVRVUk5fTE9DQVRJT04ob3BfaXRlcmF0b3Jfb3BlbikKICAgICBMTElOVF9SRVRVUk5f
TE9DQVRJT04ob3BfaXRlcmF0b3JfbmV4dCkKICAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3Bf
Y29uc3RydWN0KQotICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9jYWxsX3ZhcmFyZ3Nfc2xv
dykKLSAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY29uc3RydWN0X3ZhcmFyZ3Nfc2xvdykK
KyAgICBMTElOVF9SRVRVUk5fTE9DQVRJT04ob3BfY2FsbF92YXJhcmdzKQorICAgIExMSU5UX1JF
VFVSTl9MT0NBVElPTihvcF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICBMTElOVF9SRVRVUk5fTE9D
QVRJT04ob3BfZ2V0X2J5X2lkKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9nZXRfYnlf
dmFsKQogICAgIExMSU5UX1JFVFVSTl9MT0NBVElPTihvcF9wdXRfYnlfaWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCmluZGV4IGI4N2M0MjBjYmU0MDJhMWYwY2Yw
ODY4MTA3YjVhZmQ2ZGJjZjU0YWMuLjA1ZWM2MDFjMDE2NGNiOTU0YjczYTIxYzczNTFmZjAxMGZl
YTcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5oCkBAIC04
OCw3ICs4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+
IGppdENhZ2VQdHJUaHVuaygpOwogI2lmIENQVShBUk02NEUpCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBjcmVhdGVKU0dhdGVUaHVuayh2b2lkKiwgUHRyVGFn
LCBjb25zdCBjaGFyKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8TmF0aXZlVG9KSVRHYXRlUHRy
VGFnPiBjcmVhdGVXYXNtR2F0ZVRodW5rKHZvaWQqLCBQdHJUYWcsIGNvbnN0IGNoYXIqKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGNyZWF0ZVRhaWxDYWxs
R2F0ZShQdHJUYWcpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE5hdGl2ZVRvSklUR2F0ZVB0clRh
Zz4gY3JlYXRlVGFpbENhbGxHYXRlKFB0clRhZywgYm9vbCk7CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8TmF0aXZlVG9KSVRHYXRlUHRyVGFnPiBsb29wT1NSRW50cnlHYXRlVGh1bmsoKTsKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IGVudHJ5T1NSRW50cnlHYXRl
VGh1bmsoKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxOYXRpdmVUb0pJVEdhdGVQdHJUYWc+IHdh
c21PU1JFbnRyeUdhdGVUaHVuaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGJiODhiNmZkYjA5OWI0OTlhZTZmZjRl
ODEwMTAxNTA0ZGFhNmQ0ZTMuLmQzNWMyMjRmYjkxMzNlYjYxZGU3YmVjMmU3MTcwYjZiYzk5Y2Ez
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KQEAgLTU1MSw2ICs1NTEsNyBAQCBjb25zdCBTeW1ib2xUeXBlID0gY29uc3Rl
eHByIFN5bWJvbFR5cGUKIGNvbnN0IE9iamVjdFR5cGUgPSBjb25zdGV4cHIgT2JqZWN0VHlwZQog
Y29uc3QgRmluYWxPYmplY3RUeXBlID0gY29uc3RleHByIEZpbmFsT2JqZWN0VHlwZQogY29uc3Qg
SlNGdW5jdGlvblR5cGUgPSBjb25zdGV4cHIgSlNGdW5jdGlvblR5cGUKK2NvbnN0IEludGVybmFs
RnVuY3Rpb25UeXBlID0gY29uc3RleHByIEludGVybmFsRnVuY3Rpb25UeXBlCiBjb25zdCBBcnJh
eVR5cGUgPSBjb25zdGV4cHIgQXJyYXlUeXBlCiBjb25zdCBEZXJpdmVkQXJyYXlUeXBlID0gY29u
c3RleHByIERlcml2ZWRBcnJheVR5cGUKIGNvbnN0IFByb3h5T2JqZWN0VHlwZSA9IGNvbnN0ZXhw
ciBQcm94eU9iamVjdFR5cGUKQEAgLTExNTEsMjcgKzExNTIsMjcgQEAgbWFjcm8gY2FsbFRhcmdl
dEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFt
ZSwgZHN0VmkKICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxsZWUKICAgICBlbHNpZiBB
Uk02NEUKICAgICAgICAgbWFjcm8gY2FsbE5hcnJvdygpCi0gICAgICAgICAgICBsZWFwIEpTQ0Nv
bmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4
cHIgR2F0ZTo6JW9wY29kZU5hbWUlKSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICBqbXAgW2Ey
XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZworICAgICAgICAgICAgbGVhcCBK
U0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29u
c3RleHByIEdhdGU6OiVvcGNvZGVOYW1lJSkgKiBQdHJTaXplLCBhNworICAgICAgICAgICAgam1w
IFthN10sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKICAgICAgICAgICAgIF9q
c190cmFtcG9saW5lXyVvcGNvZGVOYW1lJToKLSAgICAgICAgICAgIGNhbGwgdDMsIGNhbGxQdHJU
YWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5kCiAKICAgICAg
ICAgbWFjcm8gY2FsbFdpZGUxNigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0
ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6JW9w
Y29kZU5hbWUlX3dpZGUxNikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1wIFthMl0sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTE2KSAqIFB0clNpemUsIGE3CisgICAgICAgICAgICBq
bXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAgICAgICAgICAg
X2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUxNjoKLSAgICAgICAgICAgIGNhbGwgdDMs
IGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAgICAgICAgZW5k
CiAKICAgICAgICAgbWFjcm8gY2FsbFdpZGUzMigpCi0gICAgICAgICAgICBsZWFwIEpTQ0NvbmZp
ZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIg
R2F0ZTo6JW9wY29kZU5hbWUlX3dpZGUzMikgKiBQdHJTaXplLCBhMgotICAgICAgICAgICAgam1w
IFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGxl
YXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsg
KGNvbnN0ZXhwciBHYXRlOjolb3Bjb2RlTmFtZSVfd2lkZTMyKSAqIFB0clNpemUsIGE3CisgICAg
ICAgICAgICBqbXAgW2E3XSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgY2FsbFB0clRhZwogICAg
ICAgICAgICAgX2pzX3RyYW1wb2xpbmVfJW9wY29kZU5hbWUlX3dpZGUzMjoKLSAgICAgICAgICAg
IGNhbGwgdDMsIGNhbGxQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDUsIGNhbGxQdHJUYWcKICAg
ICAgICAgZW5kCiAKLSAgICAgICAgbW92ZSBjYWxsZWUsIHQzCisgICAgICAgIG1vdmUgY2FsbGVl
LCB0NQogICAgICAgICBzaXplKGNhbGxOYXJyb3csIGNhbGxXaWRlMTYsIGNhbGxXaWRlMzIsIG1h
Y3JvIChnZW4pIGdlbigpIGVuZCkKICAgICBlbHNlCiAgICAgICAgIGNhbGwgY2FsbGVlLCBjYWxs
UHRyVGFnCkBAIC0xMjA5LDEyICsxMjEwLDIzIEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihv
cGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpCiAg
ICAgZW5kCiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwgdGVtcDEs
IHRlbXAyLCB0ZW1wMywgdGVtcDQsIGNhbGxQdHJUYWcpCi0gICAgYWRkcCBDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSwgc3AKK21hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCh0ZW1wMSwgdGVtcDIsIHRl
bXAzLCB0ZW1wNCkKIGVuZAogCi0jIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lCi1tYWNybyBw
cmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2Fs
bFB0clRhZykKK21hY3JvIGludm9rZUZvclJlZ3VsYXJDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgY2FsbGVlLCBtYXliZU9sZENGUiwgY2FsbFB0clRhZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rp
b24ob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIGNhbGxQdHJUYWcpCitlbmQKKworIyB0
NSBpcyBtZXRhZGF0YQorbWFjcm8gcHJlcGFyZUZvclBvbHltb3JwaGljUmVndWxhckNhbGwob3Bj
b2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFs
UmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsUHRyVGFnKQorZW5kCisKK21hY3JvIHByZXBhcmVGb3JT
bG93UmVndWxhckNhbGwoKQorZW5kCisKKyMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUgKyBD
YWxsZXJGcmFtZUFuZFBDU2l6ZQorIyBXZSBsZWF2ZSBjZnIgdGVtcDQgdG8gdXNlIGl0IGZvciB1
bnRhZ2dpbmcuCittYWNybyBwcmVwYXJlRm9yVGFpbENhbGwodGVtcDEsIHRlbXAyLCB0ZW1wMywg
dGVtcDQpCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogCiAgICAgbG9hZGkg
UGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzW2Nmcl0sIHRlbXAyCkBA
IC0xMjMyLDE4ICsxMjQ0LDE3IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRl
bXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRyVGFnKQogICAgIG1vdmUgY2ZyLCB0ZW1w
MQogICAgIGFkZHAgdGVtcDIsIHRlbXAxCiAKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNbc3BdLCB0ZW1wMgorICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXQgKyBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIENhbGxlckZyYW1lQW5kUENTaXplW3Nw
XSwgdGVtcDIKICAgICAjIFdlIGFzc3VtZSA8IDJeMjggYXJndW1lbnRzCiAgICAgbXVsaSBTbG90
U2l6ZSwgdGVtcDIKICAgICBhZGRpIFN0YWNrQWxpZ25tZW50IC0gMSArIENhbGxGcmFtZUhlYWRl
clNpemUsIHRlbXAyCiAgICAgYW5kaSB+U3RhY2tBbGlnbm1lbnRNYXNrLCB0ZW1wMgogCiAgICAg
aWYgQVJNdjcgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIENfTE9PUCBvciBDX0xPT1BfV0lOIG9yIE1J
UFMgb3IgUklTQ1Y2NAotICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAogICAg
ICAgICBzdWJpIENhbGxlckZyYW1lQW5kUENTaXplLCB0ZW1wMgogICAgICAgICBsb2FkcCBDYWxs
ZXJGcmFtZUFuZFBDOjpyZXR1cm5QQ1tjZnJdLCBscgogICAgIGVsc2UKLSAgICAgICAgYWRkcCBQ
dHJTaXplLCBzcAorICAgICAgICBzdWJwIFB0clNpemUsIHNwCiAgICAgICAgIHN1YmkgUHRyU2l6
ZSwgdGVtcDIKICAgICAgICAgbG9hZHAgUHRyU2l6ZVtjZnJdLCB0ZW1wMwogICAgICAgICBzdG9y
ZXAgdGVtcDMsIFtzcF0KQEAgLTEyNzAsOSArMTI4MSwxMiBAQCBtYWNybyBwcmVwYXJlRm9yVGFp
bENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCwgY2FsbFB0clRhZykKICAg
ICBlbmQKIAogICAgIG1vdmUgdGVtcDEsIHNwCitlbmQKKworbWFjcm8gaW52b2tlRm9yVGFpbENh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIG1heWJlT2xkQ0ZSLCBjYWxsUHRyVGFn
KQogICAgIGlmIEFSTTY0RQotICAgICAgICBtb3ZlIHRlbXA0LCBhMgotICAgICAgICBtb3ZlIGNh
bGxlZSwgYTAKKyAgICAgICAgbW92ZSBtYXliZU9sZENGUiwgYTIKKyAgICAgICAgbW92ZSBjYWxs
ZWUsIGE3CiAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZK
U0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp0YWlsQ2FsbCVjYWxsUHRyVGFnJSkg
KiBQdHJTaXplLCBhMQogICAgICAgICBqbXAgW2ExXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
JWNhbGxQdHJUYWclCiAgICAgZWxzZQpAQCAtMTI4MCw2ICsxMjk0LDIyIEBAIG1hY3JvIHByZXBh
cmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCBjYWxsUHRy
VGFnKQogICAgIGVuZAogZW5kCiAKKyMgdDUgaXMgbWV0YWRhdGEKK21hY3JvIHByZXBhcmVGb3JQ
b2x5bW9ycGhpY1RhaWxDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgY2FsbFB0clRhZykKKyAg
ICBpZiBBUk02NEUKKyAgICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Nh
bGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgYTcK
KyAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZp
Z0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6OnRhaWxDYWxsV2l0aG91dFVudGFnJWNhbGxQdHJU
YWclKSAqIFB0clNpemUsIGExCisgICAgICAgIGptcCBbYTFdLCBOYXRpdmVUb0pJVEdhdGVQdHJU
YWcgIyAlY2FsbFB0clRhZyUKKyAgICBlbHNlCisgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9tb25vbW9ycGhpY0NhbGxEZXN0
aW5hdGlvblt0NV0sIGExCisgICAgICAgIGptcCBhMSwgY2FsbFB0clRhZworICAgIGVuZAorZW5k
CisKK21hY3JvIHByZXBhcmVGb3JTbG93VGFpbENhbGwoKQorICAgIHJlc3RvcmVDYWxsZWVTYXZl
c1VzZWRCeUxMSW50KCkKK2VuZAorCiBtYWNybyBzbG93UGF0aEZvckNvbW1vbkNhbGwob3Bjb2Rl
TmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgc2xvd1BhdGgsIHByZXBhcmVDYWxs
KQogICAgIHNsb3dQYXRoRm9yQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIG1f
cHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiBlbmQKQEAg
LTEyODcsMTEgKzEzMTcsMTEgQEAgZW5kCiBtYWNybyBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFt
ZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0
ZXIsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAgICAgY2FsbENhbGxTbG93UGF0
aCgKICAgICAgICAgc2xvd1BhdGgsCi0gICAgICAgICMgVGhvc2UgYXJlIHIwIGFuZCByMQorICAg
ICAgICAjIFRob3NlIHBhcmFtZXRlcnMgYXJlIHIwIGFuZCByMQogICAgICAgICBtYWNybyAoY2Fs
bGVlLCBjYWxsZWVGcmFtZVB0cikKICAgICAgICAgICAgIGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5k
b250VXBkYXRlU1AKICAgICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCi0gICAgICAg
ICAgICBwcmVwYXJlQ2FsbChjYWxsZWUsIHQyLCB0MywgdDQsIHQxLCBKU0VudHJ5U2xvd1BhdGhQ
dHJUYWcpCisgICAgICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDMsIHQ0LCB0MSkKICAgICAgICAg
LmRvbnRVcGRhdGVTUDoKICAgICAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbiglb3Bjb2RlTmFt
ZSVfc2xvdywgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFs
UmVnaXN0ZXIsIGRpc3BhdGNoLCBjYWxsZWUsIEpTRW50cnlTbG93UGF0aFB0clRhZykKICAgICAg
ICAgZW5kKQpAQCAtMTgyMCwxMiArMTg1MCwxNiBAQCBpZiBBUk02NEUKICAgICBnbG9iYWwgX3Rh
aWxDYWxsSlNFbnRyeVRyYW1wb2xpbmUKICAgICBfdGFpbENhbGxKU0VudHJ5VHJhbXBvbGluZToK
ICAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBhMCwgSlNFbnRyeVB0
clRhZworICAgICAgICBqbXAgYTcsIEpTRW50cnlQdHJUYWcKIAogICAgIGdsb2JhbCBfdGFpbENh
bGxKU0VudHJ5U2xvd1BhdGhUcmFtcG9saW5lCiAgICAgX3RhaWxDYWxsSlNFbnRyeVNsb3dQYXRo
VHJhbXBvbGluZToKICAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIGEyCi0gICAgICAgIGptcCBh
MCwgSlNFbnRyeVNsb3dQYXRoUHRyVGFnCisgICAgICAgIGptcCBhNywgSlNFbnRyeVB0clRhZwor
CisgICAgZ2xvYmFsIF90YWlsQ2FsbFdpdGhvdXRVbnRhZ0pTRW50cnlUcmFtcG9saW5lCisgICAg
X3RhaWxDYWxsV2l0aG91dFVudGFnSlNFbnRyeVRyYW1wb2xpbmU6CisgICAgICAgIGptcCBhNywg
SlNFbnRyeVB0clRhZwogCiAgICAgZ2xvYmFsIF9leGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZQog
ICAgIF9leGNlcHRpb25IYW5kbGVyVHJhbXBvbGluZToKQEAgLTIzMjUsMTcgKzIzNTksMTcgQEAg
ZW5kKQogCiAKICMgd2UgY2FuJ3QgdXNlIGNhbGxPcCBiZWNhdXNlIHdlIGNhbid0IHBhc3MgYGNh
bGxgIGFzIHRoZSBvcGNvZGUgbmFtZSwgc2luY2UgaXQncyBhbiBpbnN0cnVjdGlvbiBuYW1lCi1j
b21tb25DYWxsT3Aob3BfY2FsbCwgX2xsaW50X3Nsb3dfcGF0aF9jYWxsLCBPcENhbGwsIHByZXBh
cmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQorY29tbW9uQ2FsbE9wKG9w
X2NhbGwsIF9sbGludF9zbG93X3BhdGhfY2FsbCwgT3BDYWxsLCBwcmVwYXJlRm9yUmVndWxhckNh
bGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2Fs
bCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKQogICAg
IGFycmF5UHJvZmlsZUZvckNhbGwoT3BDYWxsLCBnZXR1KQogZW5kKQogCiAKLW1hY3JvIGNhbGxP
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBmbikKLSAgICBjb21tb25D
YWxsT3Aob3BfJW9wY29kZU5hbWUlLCBfbGxpbnRfc2xvd19wYXRoXyVvcGNvZGVOYW1lJSwgb3Bj
b2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgZm4pCittYWNybyBjYWxsT3Aob3Bjb2RlTmFtZSwgb3Bj
b2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBw
cmVwYXJlU2xvd0NhbGwsIGZuKQorICAgIGNvbW1vbkNhbGxPcChvcF8lb3Bjb2RlTmFtZSUsIF9s
bGludF9zbG93X3BhdGhfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBp
bnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgZm4pCiBlbmQK
IAogCi1jYWxsT3AodGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGwsIG1h
Y3JvIChnZXR1LCBtZXRhZGF0YSkKK2NhbGxPcCh0YWlsX2NhbGwsIE9wVGFpbENhbGwsIHByZXBh
cmVGb3JUYWlsQ2FsbCwgaW52b2tlRm9yVGFpbENhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1Rh
aWxDYWxsLCBwcmVwYXJlRm9yU2xvd1RhaWxDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpCiAg
ICAgYXJyYXlQcm9maWxlRm9yQ2FsbChPcFRhaWxDYWxsLCBnZXR1KQogICAgIGNoZWNrU3dpdGNo
VG9KSVRGb3JFcGlsb2d1ZSgpCiAgICAgIyByZWxvYWQgbWV0YWRhdGEgc2luY2UgY2hlY2tTd2l0
Y2hUb0pJVEZvckVwaWxvZ3VlKCkgbWlnaHQgaGF2ZSB0cmFzaGVkIHQ1CkBAIC0yMzQzLDcgKzIz
NzcsNyBAQCBjYWxsT3AodGFpbF9jYWxsLCBPcFRhaWxDYWxsLCBwcmVwYXJlRm9yVGFpbENhbGws
IG1hY3JvIChnZXR1LCBtZXRhZGF0YSkKIGVuZCkKIAogCi1jYWxsT3AoY29uc3RydWN0LCBPcENv
bnN0cnVjdCwgcHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBtYWNybyAoZ2V0dSwgbWV0YWRhdGEpIGVu
ZCkKK2NhbGxPcChjb25zdHJ1Y3QsIE9wQ29uc3RydWN0LCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwg
cHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAK
IAogbWFjcm8gYnJhbmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQpAQCAtMjM1NCw0NyAr
MjM4OCwyOSBAQCBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihleGNlcHRpb25UYXJnZXQpCiAubm9F
eGNlcHRpb246ICAgIAogZW5kCiAKLW1hY3JvIGRvQ2FsbFZhcmFyZ3Mob3Bjb2RlTmFtZSwgc2l6
ZSwgb3Bjb2RlU3RydWN0LCBkaXNwYXRjaCwgZnJhbWVTbG93UGF0aCwgc2xvd1BhdGgsIHByZXBh
cmVDYWxsKQotICAgIGNhbGxTbG93UGF0aChmcmFtZVNsb3dQYXRoKQotICAgIGJyYW5jaElmRXhj
ZXB0aW9uKF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKQotICAgICMgY2Fs
bGVlRnJhbWUgaW4gcjEKLSAgICBpZiBKU1ZBTFVFNjQKLSAgICAgICAgbW92ZSByMSwgc3AKLSAg
ICBlbHNlCi0gICAgICAgICMgVGhlIGNhbGxlZUZyYW1lIGlzIG5vdCBzdGFjayBhbGlnbmVkLCBt
b3ZlIGRvd24gYnkgQ2FsbGVyRnJhbWVBbmRQQ1NpemUgdG8gYWxpZ24KLSAgICAgICAgaWYgQVJN
djcKLSAgICAgICAgICAgIHN1YnAgcjEsIENhbGxlckZyYW1lQW5kUENTaXplLCB0MgotICAgICAg
ICAgICAgbW92ZSB0Miwgc3AKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3VicCByMSwgQ2Fs
bGVyRnJhbWVBbmRQQ1NpemUsIHNwCi0gICAgICAgIGVuZAotICAgIGVuZAotICAgIHNsb3dQYXRo
Rm9yQ29tbW9uQ2FsbChvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBz
bG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKLQogCi1sbGludE9wKG9wX2NhbGxfdmFyYXJncywg
T3BDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZG9DYWxsVmFy
YXJncyhvcF9jYWxsX3ZhcmFyZ3MsIHNpemUsIE9wQ2FsbFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxp
bnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY2Fs
bF92YXJhcmdzLCBwcmVwYXJlRm9yUmVndWxhckNhbGwpCitsbGludE9wV2l0aE1ldGFkYXRhKG9w
X2NhbGxfdmFyYXJncywgT3BDYWxsVmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCisgICAgZG9DYWxsVmFyYXJncyhvcF9jYWxsX3ZhcmFyZ3MsIHNp
emUsIGdldCwgT3BDYWxsVmFyYXJncywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3ZhcmFyZ3MsIF9sbGludF9zbG93
X3BhdGhfY2FsbF92YXJhcmdzLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3Vs
YXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dS
ZWd1bGFyQ2FsbCkKIGVuZCkKIAotbGxpbnRPcChvcF90YWlsX2NhbGxfdmFyYXJncywgT3BUYWls
Q2FsbFZhcmFyZ3MsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQorbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF90YWlsX2NhbGxfdmFyYXJncywgT3BUYWlsQ2FsbFZhcmFyZ3MsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGNoZWNrU3dpdGNoVG9KSVRG
b3JFcGlsb2d1ZSgpCiAgICAgIyBXZSBsaWUgYW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbCBpbnN0
ZWFkIG9mIHByZXBhcmluZyBpdCBzaW5jZSB3ZSBjYW4ndAogICAgICMgcHJlcGFyZSB0aGUgZnJh
bWUgZm9yIGEgY2FsbCBvcGNvZGUKLSAgICBkb0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF92YXJh
cmdzLCBzaXplLCBPcFRhaWxDYWxsVmFyYXJncywgZGlzcGF0Y2gsIF9sbGludF9zbG93X3BhdGhf
c2l6ZV9mcmFtZV9mb3JfdmFyYXJncywgX2xsaW50X3Nsb3dfcGF0aF90YWlsX2NhbGxfdmFyYXJn
cywgcHJlcGFyZUZvclRhaWxDYWxsKQorICAgIGRvQ2FsbFZhcmFyZ3Mob3BfdGFpbF9jYWxsX3Zh
cmFyZ3MsIHNpemUsIGdldCwgT3BUYWlsQ2FsbFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgX2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdz
LCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF92YXJhcmdzLCBwcmVwYXJlRm9yVGFpbENhbGws
IGludm9rZUZvclRhaWxDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNUYWlsQ2FsbCwgcHJlcGFy
ZUZvclNsb3dUYWlsQ2FsbCkKIGVuZCkKIAogCi1sbGludE9wKG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cywgT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoKQorbGxpbnRPcFdpdGhNZXRhZGF0YShvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUo
KQogICAgICMgV2UgbGllIGFuZCBwZXJmb3JtIHRoZSB0YWlsIGNhbGwgaW5zdGVhZCBvZiBwcmVw
YXJpbmcgaXQgc2luY2Ugd2UgY2FuJ3QKICAgICAjIHByZXBhcmUgdGhlIGZyYW1lIGZvciBhIGNh
bGwgb3Bjb2RlCi0gICAgZG9DYWxsVmFyYXJncyhvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMsIHNpemUsIE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBkaXNwYXRjaCwgX2xsaW50X3Ns
b3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9mb3J3YXJkX2FyZ3VtZW50cywgX2xsaW50X3Nsb3dfcGF0
aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIHByZXBhcmVGb3JUYWlsQ2FsbCkKKyAgICBk
b0NhbGxWYXJhcmdzKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgc2l6ZSwgZ2V0LCBP
cFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cywgbV9wcm9maWxlLCBtX2RzdCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRz
LCBfbGxpbnRfc2xvd19wYXRoX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgcHJlcGFyZUZv
clRhaWxDYWxsLCBpbnZva2VGb3JUYWlsQ2FsbCwgcHJlcGFyZUZvclBvbHltb3JwaGljVGFpbENh
bGwsIHByZXBhcmVGb3JTbG93VGFpbENhbGwpCiBlbmQpCiAKIAotbGxpbnRPcChvcF9jb25zdHJ1
Y3RfdmFyYXJncywgT3BDb25zdHJ1Y3RWYXJhcmdzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCkKLSAgICBkb0NhbGxWYXJhcmdzKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBzaXplLCBPcENvbnN0
cnVjdFZhcmFyZ3MsIGRpc3BhdGNoLCBfbGxpbnRfc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX3Zh
cmFyZ3MsIF9sbGludF9zbG93X3BhdGhfY29uc3RydWN0X3ZhcmFyZ3MsIHByZXBhcmVGb3JSZWd1
bGFyQ2FsbCkKK2xsaW50T3BXaXRoTWV0YWRhdGEob3BfY29uc3RydWN0X3ZhcmFyZ3MsIE9wQ29u
c3RydWN0VmFyYXJncywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCisgICAgZG9DYWxsVmFyYXJncyhvcF9jb25zdHJ1Y3RfdmFyYXJncywgc2l6ZSwgZ2V0LCBP
cENvbnN0cnVjdFZhcmFyZ3MsIG1fcHJvZmlsZSwgbV9kc3QsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
X2xsaW50X3Nsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJhcmdzLCBfbGxpbnRfc2xvd19wYXRo
X2NvbnN0cnVjdF92YXJhcmdzLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3Vs
YXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dS
ZWd1bGFyQ2FsbCkKIGVuZCkKIAogCkBAIC0yNTEwLDYgKzI1MjYsOTAgQEAgb3AobGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUsIG1hY3JvICgpCiAgICAgaW50ZXJu
YWxGdW5jdGlvbkNhbGxUcmFtcG9saW5lKEludGVybmFsRnVuY3Rpb246Om1fZnVuY3Rpb25Gb3JD
b25zdHJ1Y3QpCiBlbmQpCiAKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0
MiBpcyBDYWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CittYWNy
byBsaW5rU2xvd1BhdGhGb3IoZnVuY3Rpb24pCisgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCisgICAg
bG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fdm1bdDNdLCB0MQorICAgIHN0b3JlcCBjZnIsIFZNOjp0
b3BDYWxsRnJhbWVbdDFdCisgICAgbW92ZSB0MiwgYTIKKyAgICBtb3ZlIHQzLCBhMQorICAgIG1v
dmUgY2ZyLCBhMAorICAgIGNDYWxsNChmdW5jdGlvbikKKyAgICBmdW5jdGlvbkVwaWxvZ3VlKCkK
KyAgICB1bnRhZ1JldHVybkFkZHJlc3Mgc3AKKyAgICBidHB6IHIxLCAuZG9Ob3RUcmFzaAorICAg
IHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0MSkKKyAgICBwcmVwYXJlRm9yVGFpbENh
bGwodDEsIHQyLCB0MywgdDQpCisgICAgdW50YWdSZXR1cm5BZGRyZXNzIHQ0CisuZG9Ob3RUcmFz
aDoKKyAgICBqbXAgdDAsIEpTRW50cnlQdHJUYWcKK2VuZAorCisjIDY0Yml0OnQwIDMyYml0KHQw
LHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBK
U0dsb2JhbE9iamVjdAorbWFjcm8gdmlydHVhbFRodW5rRm9yKG9mZnNldE9mSklUQ29kZVdpdGhB
cml0eUNoZWNrLCBpbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZSwgcHJlcGFyZUNhbGwsIHNsb3dD
YXNlKQorICAgIGFkZGkgMSwgQ2FsbExpbmtJbmZvOjptX3Nsb3dQYXRoQ291bnRbdDJdCisgICAg
aWYgSlNWQUxVRTY0CisgICAgICAgIGJ0cW56IHQwLCBOb3RDZWxsTWFzaywgc2xvd0Nhc2UKKyAg
ICBlbHNlCisgICAgICAgIGJpbmVxIHQxLCBDZWxsVGFnLCBzbG93Q2FzZQorICAgIGVuZAorICAg
IGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgSlNGdW5jdGlvblR5cGUsIC5ub3RKU0Z1bmN0aW9u
CisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9leGVjdXRhYmxlT3JSYXJlRGF0YVt0MF0sIHQxCisg
ICAgYnRweiB0MSwgKGNvbnN0ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIC5pc0V4ZWN1
dGFibGUKKyAgICBsb2FkcCAoRnVuY3Rpb25SYXJlRGF0YTo6bV9leGVjdXRhYmxlIC0gKGNvbnN0
ZXhwciBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpW3QxXSwgdDEKKy5pc0V4ZWN1dGFibGU6Cisg
ICAgbG9hZHAgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tbdDFdLCB0MQorICAgIGJ0cHog
dDEsIHNsb3dDYXNlCisuY2FsbENvZGU6CisgICAgcHJlcGFyZUNhbGwodDUsIHQyLCB0MywgdDQp
CisgICAgam1wIHQxLCBKU0VudHJ5UHRyVGFnCisubm90SlNGdW5jdGlvbjoKKyAgICBiYm5lcSBK
U0NlbGw6Om1fdHlwZVt0MF0sIEludGVybmFsRnVuY3Rpb25UeXBlLCBzbG93Q2FzZQorICAgIHBy
ZXBhcmVDYWxsKHQ1LCB0MiwgdDMsIHQ0KQorICAgIGptcCBpbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZQorZW5kCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBpcyBD
YWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGludF9s
aW5rX2NhbGxfdHJhbXBvbGluZSwgbWFjcm8gKCkKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50
X2xpbmtfY2FsbCkKK2VuZCkKKworIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisj
IHQyIGlzIENhbGxMaW5rSW5mbyoKKyMgdDMgaXMgY2FsbGVyJ3MgSlNHbG9iYWxPYmplY3QKK29w
KGxsaW50X3ZpcnR1YWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVu
a0ZvcihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBfbGxp
bnRfaW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAy
LCB0ZW1wMywgdGVtcDQpIGVuZCwgLnNsb3dDYXNlKQorLnNsb3dDYXNlOgorICAgIGxpbmtTbG93
UGF0aEZvcihfbGxpbnRfdmlydHVhbF9jYWxsKQorZW5kKQorCisjIDY0Yml0OnQwIDMyYml0KHQw
LHQxKSBpcyBjYWxsZWUKKyMgdDIgaXMgQ2FsbExpbmtJbmZvKgorIyB0MyBpcyBjYWxsZXIncyBK
U0dsb2JhbE9iamVjdAorb3AobGxpbnRfdmlydHVhbF9jb25zdHJ1Y3RfdHJhbXBvbGluZSwgbWFj
cm8gKCkKKyAgICB2aXJ0dWFsVGh1bmtGb3IoRXhlY3V0YWJsZUJhc2U6Om1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrLCBfbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0
X3RyYW1wb2xpbmUsIG1hY3JvICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCB0ZW1wNCkgZW5kLCAuc2xv
d0Nhc2UpCisuc2xvd0Nhc2U6CisgICAgbGlua1Nsb3dQYXRoRm9yKF9sbGludF92aXJ0dWFsX2Nh
bGwpCitlbmQpCisKKyMgNjRiaXQ6dDAgMzJiaXQodDAsdDEpIGlzIGNhbGxlZQorIyB0MiBpcyBD
YWxsTGlua0luZm8qCisjIHQzIGlzIGNhbGxlcidzIEpTR2xvYmFsT2JqZWN0CitvcChsbGludF92
aXJ0dWFsX3RhaWxfY2FsbF90cmFtcG9saW5lLCBtYWNybyAoKQorICAgIHZpcnR1YWxUaHVua0Zv
cihFeGVjdXRhYmxlQmFzZTo6bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBfbGxpbnRf
aW50ZXJuYWxfZnVuY3Rpb25fY2FsbF90cmFtcG9saW5lLCBtYWNybyAodGVtcDEsIHRlbXAyLCB0
ZW1wMywgdGVtcDQpCisgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbCh0ZW1w
MSkKKyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHRlbXA0
KQorICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3MgdGVtcDQKKyAgICBlbmQsIC5zbG93Q2FzZSkK
Ky5zbG93Q2FzZToKKyAgICBsaW5rU2xvd1BhdGhGb3IoX2xsaW50X3ZpcnR1YWxfY2FsbCkKK2Vu
ZCkKIAogaWYgSklUCiAgICAgbWFjcm8gbG9hZEJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNw
cAppbmRleCBjMDRmZmQ2YjBiYzNmMjZlMTkyZjA2ZjJiYmY3NGIwNjRkY2IyNzlhLi45ODc2ZWY2
ZWY3NDJhY2VlZGFlMjY5YTJhYjQ1NGM1YjYyY2Q1MTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCkBAIC0xMjksNiArMTI5
LDggQEAgdXNpbmcgV2ViQ29uZmlnOjpnX2NvbmZpZzsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIENhbGxMaW5rSW5mbzsKKwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBDTG9vcFJlZ2lz
dGVyIGlzIHRoZSBzdG9yYWdlIGZvciBhbiBlbXVsYXRlZCBDUFUgcmVnaXN0ZXIuCiAvLyBJdCBk
ZWZpbmVzIHRoZSBwb2xpY3kgb2YgaG93IGludHMgc21hbGxlciB0aGFuIGludHB0cl90IGFyZSBw
YWNrZWQgaW50byB0aGUKQEAgLTE2Niw2ICsxNjgsNyBAQCBjbGFzcyBDTG9vcFJlZ2lzdGVyIHsK
ICAgICBvcGVyYXRvciBQcm90b0NhbGxGcmFtZSooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UHJv
dG9DYWxsRnJhbWUqPihtX3ZhbHVlKTsgfQogICAgIG9wZXJhdG9yIFJlZ2lzdGVyKigpIHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxSZWdpc3Rlcio+KG1fdmFsdWUpOyB9CiAgICAgb3BlcmF0b3IgVk0q
KCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFZNKj4obV92YWx1ZSk7IH0KKyAgICBvcGVyYXRvciBD
YWxsTGlua0luZm8qKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PENhbGxMaW5rSW5mbyo+KG1fdmFs
dWUpOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxl
X2lmX3Q8c2l6ZW9mKFQpID09IHNpemVvZih1aW50cHRyX3QpPj4KICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgb3BlcmF0b3I9KFQgdmFsdWUpIHsgbV92YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHZhbHVlKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCA5MDNlNWE0NWIxYjY2ODJmZDI4Nzhi
OTc5NDg1MmFlZmQ2NzUxZDVlLi5lODJhNWE4ZDJhNWUyYTZiZGJlNjM3YzhkODU4ZjlhZGQzZjE4
MDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQpAQCAtMTE4LDcgKzExOCw5IEBAIG1hY3JvIGNDYWxsMlZv
aWQoZnVuY3Rpb24pCiBlbmQKIAogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQotICAgIGlmIEFSTXY3
IG9yIE1JUFMKKyAgICBpZiBDX0xPT1Agb3IgQ19MT09QX1dJTgorICAgICAgICBjbG9vcENhbGxT
bG93UGF0aDQgZnVuY3Rpb24sIGEwLCBhMSwgYTIsIGEzCisgICAgZWxzaWYgQVJNdjcgb3IgTUlQ
UwogICAgICAgICBjYWxsIGZ1bmN0aW9uCiAgICAgZWxzaWYgWDg2IG9yIFg4Nl9XSU4KICAgICAg
ICAgcHVzaCBhMwpAQCAtMjE1MSwzNSArMjE1Myw2MCBAQCBtYWNybyBhcnJheVByb2ZpbGVGb3JD
YWxsKG9wY29kZVN0cnVjdCwgZ2V0dSkKICAgICBiaW5lcSBUaGlzQXJndW1lbnRPZmZzZXQgKyBU
YWdPZmZzZXRbY2ZyLCB0MywgOF0sIENlbGxUYWcsIC5kb25lCiAgICAgbG9hZGkgVGhpc0FyZ3Vt
ZW50T2Zmc2V0ICsgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XSwgdDAKICAgICBsb2FkaSBKU0Nl
bGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MAotICAgIHN0b3JlaSB0MCwgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0
dXJlSURbdDVdCisgICAgc3RvcmVpIHQwLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJy
YXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3Jv
IGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKQotICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisj
IHQ1IGhvbGRzIG1ldGFkYXRhLgorbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0
aCwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHBy
ZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2Fs
bCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQs
IGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIGdldENhbGxlZSh0MykKIAotICAg
IGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVP
ckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXRbdDVdLCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGVQYXlsb2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0MywgLm9wQ2FsbFNsb3cpCi0gICAgYmlu
ZXEgdDMsIHQyLCAub3BDYWxsU2xvdworICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDMsIHQxLCB0MCkKKworICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lCiAg
ICAgZ2V0QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAgICAgbmVnaSB0Mwog
ICAgIGFkZHAgY2ZyLCB0MyAgIyB0MyBjb250YWlucyB0aGUgbmV3IHZhbHVlIG9mIGNmcgotICAg
IHN0b3JlaSB0MiwgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFt0M10KLSAgICBnZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyh0MikgICAgCi0gICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCisgICAgZ2V0QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXModDIpCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFBh
eWxvYWRPZmZzZXRbdDNdCi0gICAgc3RvcmVpIENlbGxUYWcsIENhbGxlZSArIFRhZ09mZnNldFt0
M10KKworICAgICMgU3RvcmUgbG9jYXRpb24gYml0cyBhbmQgfGNhbGxlZXwsIGFuZCBjb25maWd1
cmUgc3AuCisgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09m
ZnNldFtjZnJdCisgICAgc3RvcmVpIHQwLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3QzXQorICAg
IHN0b3JlaSB0MSwgQ2FsbGVlICsgVGFnT2Zmc2V0W3QzXQogICAgIG1vdmUgdDMsIHNwCi0gICAg
cHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21h
Y2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAg
Y2FsbFRhcmdldEZ1bmN0aW9uKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQ
cm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNFbnRy
eVB0clRhZykKKyAgICBhZGRwIENhbGxlckZyYW1lQW5kUENTaXplLCBzcAorCisgICAgYmluZXEg
dDEsIENlbGxUYWcsIC5vcENhbGxTbG93CisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDMKKyAgICBidHB6
IHQzLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5v
dFBvbHltb3JwaGljCisgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyBy
ZXR1cm4gYWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5l
IHNlcGFyYXRlbHkuCisgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5
bW9ycGhpYyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3Jw
aGljIHRodW5rIHNpZGUuCisgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgSlNFbnRyeVB0clRhZykKKyAgICBqbXAgLmdvUG9seW1vcnBoaWMKKworLm5vdFBvbHlt
b3JwaGljOgorICAgIGJwbmVxIHQwLCB0MywgLm9wQ2FsbFNsb3cKKyAgICBwcmVwYXJlQ2FsbCh0
MiwgdDMsIHQ0LCB0MSkKKworLmdvUG9seW1vcnBoaWM6CisgICAgbG9hZHAgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2FsbERl
c3RpbmF0aW9uW3Q1XSwgdDUKKyAgICBpbnZva2VDYWxsKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwg
dDUsIHQxLCBKU0VudHJ5UHRyVGFnKQogCiAub3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNh
bGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RW
aXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgIyA2
NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgIyB0MiBpcyBDYWxsTGlua0luZm8q
CisgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgIGFkZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJbmZvKiBp
biB0MgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8u
bV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIHQzCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQzCisgICAg
cHJlcGFyZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Ns
b3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lz
dGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCiBlbmQKICAgICAgICAgCi1tYWNybyBj
b21tb25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNh
bGwsIHByb2xvZ3VlKQorbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBv
cGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMs
IHByZXBhcmVTbG93Q2FsbCwgcHJvbG9ndWUpCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcGNv
ZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKQEAgLTIxODgsNyArMjIxNSw3
IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0
LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAg
ICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkKLSAgICAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAg
ICAgICAgICAgZ2V0KG1fY2FsbGVlLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3Jv
IGdldEFyZ3VtZW50U3RhcnQoZHN0KQpAQCAtMjE5OSwxMCArMjIyNiw2OCBAQCBtYWNybyBjb21t
b25DYWxsT3Aob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgcHJlcGFyZUNhbGws
IHByb2xvZ3VlKQogICAgICAgICAgICAgZ2V0dShzaXplLCBvcGNvZGVTdHJ1Y3QsIG1fYXJnYywg
ZHN0KQogICAgICAgICBlbmQKICAgICAgICAgCi0gICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFt
ZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGws
IHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBn
ZXRBcmd1bWVudENvdW50KQorICAgICAgICAjIHQ1IGhvbGRzIG1ldGFkYXRhCisgICAgICAgIGNh
bGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBt
X2RzdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGwsIHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFy
ZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1l
bnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAgICBlbmQpCiBlbmQKIAorbWFjcm8gZG9DYWxs
VmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBnZXQsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxl
TmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1Bh
dGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCwgaW52b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGlj
LCBwcmVwYXJlU2xvd0NhbGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xvd1BhdGgpCisgICAg
YnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUp
CisgICAgIyBjYWxsZWVGcmFtZSBpbiByMQorICAgIGlmIEpTVkFMVUU2NAorICAgICAgICBtb3Zl
IHIxLCBzcAorICAgIGVsc2UKKyAgICAgICAgIyBUaGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNr
IGFsaWduZWQsIG1vdmUgZG93biBieSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGlnbgorICAg
ICAgICBpZiBBUk12NworICAgICAgICAgICAgc3VicCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUs
IHQyCisgICAgICAgICAgICBtb3ZlIHQyLCBzcAorICAgICAgICBlbHNlCisgICAgICAgICAgICBz
dWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgc3AKKyAgICAgICAgZW5kCisgICAgZW5kCisg
ICAgY2FsbENhbGxTbG93UGF0aCgKKyAgICAgICAgc2xvd1BhdGgsCisgICAgICAgICMgVGhvc2Ug
cGFyYW1ldGVycyBhcmUgcjAgYW5kIHIxCisgICAgICAgIG1hY3JvIChyZXN0b3JlZFBDT3JUaHJv
dywgY2FsbGVlRnJhbWVQdHIpCisgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9u
dFVwZGF0ZVNQCisgICAgICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKKyAgICAgICAg
ICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCisgICAgICAgICAgICBnZXQobV9jYWxsZWUsIHQy
KQorICAgICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDEsIHQwKQor
ICAgICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQorCisgICAgICAgICAgICBiaW5lcSB0MSwgQ2Vs
bFRhZywgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQzCisgICAgICAg
ICAgICBidHB6IHQzLCAoY29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVN
YXNrKSwgLm5vdFBvbHltb3JwaGljCisgICAgICAgICAgICAjIHByZXBhcmVDYWxsIGluIExMSW50
IGRvZXMgbm90IHVudGFnIHJldHVybiBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQg
aW4gdGhlIHRyYW1wb2xpbmUgc2VwYXJhdGVseS4KKyAgICAgICAgICAgICMgQnV0IHdlIHNob3Vs
ZCBub3QgdW50YWcgdGhhdCBmb3IgcG9seW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3Vs
ZCBiZSBkb25lIGluIHRoZSBwb2x5bW9ycGhpYyB0aHVuayBzaWRlLgorICAgICAgICAgICAgcHJl
cGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgSlNFbnRyeVB0clRhZykKKyAg
ICAgICAgICAgIGptcCAuZ29Qb2x5bW9ycGhpYworCisgICAgICAgIC5ub3RQb2x5bW9ycGhpYzoK
KyAgICAgICAgICAgIGJwbmVxIHQwLCB0MywgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAgIHByZXBh
cmVDYWxsKHQyLCB0MywgdDQsIHQxKQorCisgICAgICAgIC5nb1BvbHltb3JwaGljOgorICAgICAg
ICAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRh
dGFJQy5tX21vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGlu
dm9rZUNhbGwob3Bjb2RlTmFtZSwgc2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1l
LCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCisK
KyAgICAgICAgLm9wQ2FsbFNsb3c6CisgICAgICAgICAgICAjIDY0Yml0OnQwIDMyYml0KHQwLHQx
KSBpcyBjYWxsZWUKKyAgICAgICAgICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgorICAgICAgICAg
ICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgICAgICAgICAgYWRkcCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0lu
Zm8qIGluIHQyCisgICAgICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
Y2FsbExpbmtJbmZvLm1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAg
ICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fZ2xvYmFsT2JqZWN0W3QzXSwgdDMKKyAgICAgICAgICAgIHByZXBhcmVTbG93Q2FsbCgpCisg
ICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9w
Y29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRj
aCwgdDUsIEpTRW50cnlQdHJUYWcpCisgICAgICAgIC5kb250VXBkYXRlU1A6CisgICAgICAgICAg
ICBqbXAgX2xsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKKyAgICAgICAgZW5k
KQorZW5kCisKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKICAgICBnZXQobV92YWx1ZSwg
dDIpCkBAIC0yODY2LDcgKzI5NTEsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9y
X29wZW4sIE9wSXRlcmF0b3JPcGVuLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAg
ICBtb3ZlIDEsIGRzdAogICAgIGVuZAogCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9vcGVu
LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fY2FsbCwgT3BJdGVyYXRvck9wZW4sIG1f
aXRlcmF0b3JQcm9maWxlLCBtX2l0ZXJhdG9yLCBwcmVwYXJlRm9yUmVndWxhckNhbGwsIHNpemUs
IGdvdG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJ
bmNsdWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQorICAgIG1l
dGFkYXRhKHQ1LCB0MCkKKyAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9z
bG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclBy
b2ZpbGUsIG1faXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgaW52b2tlRm9yUmVndWxh
ckNhbGwsIHByZXBhcmVGb3JQb2x5bW9ycGhpY1JlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yU2xvd1Jl
Z3VsYXJDYWxsLCBzaXplLCBnb3RvR2V0QnlJZENoZWNrcG9pbnQsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc1N0YXJ0LCBnZXRBcmd1bWVudEluY2x1ZGluZ1Ro
aXNDb3VudCkKIAogLmdldEJ5SWRTdGFydDoKICAgICBtYWNybyBzdG9yZU5leHRBbmREaXNwYXRj
aCh2YWx1ZVRhZywgdmFsdWVQYXlsb2FkKQpAQCAtMjkyNyw3ICszMDEzLDggQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJhdG9yTmV4dCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNlIG1fdmFsdWUgc2xvdCBhcyBhIHRt
cCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQgbGF0ZXIuCi0gICAgY2FsbEhlbHBl
cihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfY2FsbCwg
T3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUsIG1fdmFsdWUsIHByZXBhcmVGb3JS
ZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2Fs
bGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdU
aGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAgIGNhbGxIZWxwZXIob3BfaXRlcmF0
b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2NhbGwsIE9wSXRlcmF0b3JO
ZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBwcmVwYXJlRm9yUmVndWxhckNhbGws
IGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9seW1vcnBoaWNSZWd1bGFyQ2FsbCwg
cHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3BvaW50LCBt
ZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwgZ2V0QXJn
dW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25lU3RhcnQ6CiAgICAgbWFjcm8gc3Rv
cmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWVUYWcsIGRvbmVWYWx1ZVBheWxvYWQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCmluZGV4IGE5MTMxNGZjZTllZTQ0Y2E2ZTBiYWM3ODJkOWJlMmY1OWMwYTgzNzAuLmNk
ZmQ2ZTIxOGM5NTZiNDMxMDZhMjc0ODRmZGVjNDY0MmFlMDY4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0x
NDMsNyArMTQzLDkgQEAgZW5kCiAjIFRoaXMgYmFyZWx5IHdvcmtzLiBhcmczIGFuZCBhcmc0IHNo
b3VsZCBwcm9iYWJseSBiZSBpbW1lZGlhdGVzLgogbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KHQ0LCAweGJhZDBjMDA0KQotICAgIGlmIFg4Nl82
NCBvciBBUk02NCBvciBBUk02NEUgb3IgUklTQ1Y2NAorICAgIGlmIENfTE9PUCBvciBDX0xPT1Bf
V0lOCisgICAgICAgIGNsb29wQ2FsbFNsb3dQYXRoNCBmdW5jdGlvbiwgYTAsIGExLCBhMiwgYTMK
KyAgICBlbHNpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIFJJU0NWNjQKICAgICAgICAg
Y2FsbCBmdW5jdGlvbgogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBPbiBXaW42NCwg
cmN4LCByZHgsIHI4LCBhbmQgcjkgYXJlIHVzZWQgZm9yIHBhc3NpbmcgdGhlIGZpcnN0IGZvdXIg
cGFyYW1ldGVycy4KQEAgLTMwOSwxMiArMzExLDEyIEBAIG1hY3JvIG1ha2VKYXZhU2NyaXB0Q2Fs
bChlbnRyeSwgcHJvdG9DYWxsRnJhbWUsIHRlbXAxLCB0ZW1wMikKICAgICBpZiBDX0xPT1Agb3Ig
Q19MT09QX1dJTgogICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9uIGVudHJ5CiAgICAgZWxzaWYg
QVJNNjRFCi0gICAgICAgIG1vdmUgZW50cnksIHQzCi0gICAgICAgIGxlYXAgSlNDQ29uZmlnICsg
Y29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRl
Ojp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0clNpemUsIGEyCi0gICAgICAgIGptcCBbYTJdLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisgICAgICAgIG1vdmUgZW50cnks
IHQ1CisgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0ND
b25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjp2bUVudHJ5VG9KYXZhU2NyaXB0KSAqIFB0
clNpemUsIGE3CisgICAgICAgIGptcCBbYTddLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0Vu
dHJ5UHRyVGFnCiAgICAgICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2YVNjcmlwdFRyYW1wb2xpbmUK
ICAgICAgICAgX3ZtRW50cnlUb0phdmFTY3JpcHRUcmFtcG9saW5lOgotICAgICAgICBjYWxsIHQz
LCBKU0VudHJ5UHRyVGFnCisgICAgICAgIGNhbGwgdDUsIEpTRW50cnlQdHJUYWcKICAgICBlbHNl
CiAgICAgICAgIGNhbGwgZW50cnksIEpTRW50cnlQdHJUYWcKICAgICBlbmQKQEAgLTIzNjAsNDEg
KzIzNjIsNTggQEAgbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbChvcGNvZGVTdHJ1Y3QsIGdldHUp
CiAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGJ0cW56
IHQwLCBub3RDZWxsTWFzaywgLmRvbmUKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURb
dDBdLCB0MwotICAgIHN0b3JlaSB0MywgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxM
aW5rSW5mby5tX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCisgICAgc3Rv
cmVpIHQzLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbGFzdFNl
ZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKLW1hY3JvIGNhbGxIZWxwZXIob3Bjb2Rl
TmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBwcmVwYXJlQ2FsbCwgc2l6ZSwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBnZXRDYWxs
ZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotICAg
IG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXRDYWxsZWUodDApCisjIHQ1IGhvbGRzIG1ldGFkYXRh
LgorbWFjcm8gY2FsbEhlbHBlcihvcGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIsIHByZXBhcmVDYWxsLCBpbnZva2VD
YWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgc2l6ZSwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCBnZXRDYWxsZWUsIGdldEFyZ3VtZW50U3RhcnQsIGdldEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKQorICAgIGdldENhbGxlZSh0MSkKIAotICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0
aExpbmtCaXRbdDVdLCB0MgotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQz
KQotICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQxLCB0MCkKIAorICAgICMgQWxpZ25lZCB0byBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lCiAgICAgZ2V0QXJndW1lbnRTdGFydCh0MykKICAgICBsc2hpZnRpIDMsIHQzCiAgICAgbmVn
cCB0MwogICAgIGFkZHAgY2ZyLCB0MwotICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgIGdl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHQyKQotICAgIHN0b3JlUEMoKQogICAgIHN0b3Jl
aSB0MiwgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBQYXlsb2FkT2Zmc2V0W3QzXQorCisg
ICAgIyBTdG9yZSBsb2NhdGlvbiBiaXRzIGFuZCB8Y2FsbGVlfCwgYW5kIGNvbmZpZ3VyZSBzcC4K
KyAgICBzdG9yZVBDKCkKKyAgICBzdG9yZXEgdDAsIENhbGxlZVt0M10KICAgICBtb3ZlIHQzLCBz
cAotICAgIGlmIEFSTTY0RQotICAgICAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLm1fbWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MAotICAgICAgICBwcmVw
YXJlQ2FsbCh0MCwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGxvYWRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRh
cmdldFt0NV0sIHQwCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXpl
LCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlz
cGF0Y2gsIHQwLCBKU0VudHJ5UHRyVGFnKQotICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwo
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFy
Z2V0W3Q1XSwgdDIsIHQzLCB0NCwgdDEsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJn
ZXRGdW5jdGlvbihvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5h
bWUsIGRzdFZpcnR1YWxSZWdpc3RlciwgZGlzcGF0Y2gsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8ubV9tYWNoaW5lQ29kZVRhcmdldFt0NV0sIEpTRW50cnlQdHJUYWcp
Ci0gICAgZW5kCi0ub3BDYWxsU2xvdzoKLSAgICBzbG93UGF0aEZvckNhbGwob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi1lbmQKKyAgICBhZGRwIENhbGxlckZy
YW1lQW5kUENTaXplLCBzcAorCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2NhbGxMaW5rSW5mby5tX2NhbGxlZU9yQ29kZUJsb2NrW3Q1XSwgdDEKKyAgICBidHB6IHQxLCAo
Y29uc3RleHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHlt
b3JwaGljCisgICAgIyBwcmVwYXJlQ2FsbCBpbiBMTEludCBkb2VzIG5vdCB1bnRhZyByZXR1cm4g
YWRkcmVzcy4gU28gd2UgbmVlZCB0byB1bnRhZyB0aGF0IGluIHRoZSB0cmFtcG9saW5lIHNlcGFy
YXRlbHkuCisgICAgIyBCdXQgd2Ugc2hvdWxkIG5vdCB1bnRhZyB0aGF0IGZvciBwb2x5bW9ycGhp
YyBjYWxsIGNhc2Ugc2luY2UgaXQgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIHBvbHltb3JwaGljIHRo
dW5rIHNpZGUuCisgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29kZU5hbWUsIHNpemUsIG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwg
SlNFbnRyeVB0clRhZykKKyAgICBqbXAgLmdvUG9seW1vcnBoaWMKIAotbWFjcm8gY29tbW9uQ2Fs
bE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxsLCBwcm9s
b2d1ZSkKKy5ub3RQb2x5bW9ycGhpYzoKKyAgICBicW5lcSB0MCwgdDEsIC5vcENhbGxTbG93Cisg
ICAgcHJlcGFyZUNhbGwodDIsIHQzLCB0NCwgdDEpCisKKy5nb1BvbHltb3JwaGljOgorICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8udS5kYXRhSUMubV9t
b25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgaW52b2tlQ2FsbChvcGNvZGVO
YW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIGRzdFZpcnR1YWxSZWdp
c3RlciwgZGlzcGF0Y2gsIHQ1LCB0MSwgSlNFbnRyeVB0clRhZykKKworLm9wQ2FsbFNsb3c6Cisg
ICAgIyA2NGJpdDp0MCAzMmJpdCh0MCx0MSkgaXMgY2FsbGVlCisgICAgIyB0MiBpcyBDYWxsTGlu
a0luZm8qCisgICAgIyB0MyBpcyBjYWxsZXIncyBKU0dsb2JhbE9iamVjdAorICAgIGFkZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mbywgdDUsIHQyICMgQ2FsbExpbmtJ
bmZvKiBpbiB0MgorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubV9zbG93UGF0aENhbGxEZXN0aW5hdGlvblt0NV0sIHQ1CisgICAgbG9hZHAgQ29kZUJs
b2NrW2Nmcl0sIHQzCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0M10sIHQz
CisgICAgcHJlcGFyZVNsb3dDYWxsKCkKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oJW9wY29kZU5h
bWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVh
bFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcpCitlbmQKKworbWFjcm8gY29t
bW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1Y3QsIHByZXBhcmVDYWxs
LCBpbnZva2VDYWxsLCBwcmVwYXJlUG9seW1vcnBoaWMsIHByZXBhcmVTbG93Q2FsbCwgcHJvbG9n
dWUpCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRh
ZGF0YSh0NSwgdDApCiAKQEAgLTI0MDMsNyArMjQyMiw3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChv
cGNvZGVOYW1lLCBzbG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUp
CiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKICAgICAgICAgbWFjcm8gZ2V0Q2FsbGVlKGRzdCkK
LSAgICAgICAgICAgIGdldChtX2NhbGxlZSwgdDApCisgICAgICAgICAgICBnZXQobV9jYWxsZWUs
IGRzdCkKICAgICAgICAgZW5kCiAKICAgICAgICAgbWFjcm8gZ2V0QXJndW1lbnRTdGFydChkc3Qp
CkBAIC0yNDE0LDEwICsyNDMzLDY3IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChvcGNvZGVOYW1lLCBz
bG93UGF0aCwgb3Bjb2RlU3RydWN0LCBwcmVwYXJlQ2FsbCwgcHJvbG9ndWUpCiAgICAgICAgICAg
ICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwgbV9hcmdjLCBkc3QpCiAgICAgICAgIGVuZAogCi0g
ICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgsIG9wY29kZVN0cnVjdCwgbV9w
cm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIHNpemUsIGRpc3BhdGNoLCBtZXRhZGF0YSwgZ2V0
Q2FsbGVlLCBnZXRBcmd1bWVudFN0YXJ0LCBnZXRBcmd1bWVudENvdW50KQorICAgICAgICAjIHQ1
IGhvbGRzIG1ldGFkYXRhCisgICAgICAgIGNhbGxIZWxwZXIob3Bjb2RlTmFtZSwgc2xvd1BhdGgs
IG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCBtX2RzdCwgcHJlcGFyZUNhbGwsIGludm9rZUNhbGws
IHByZXBhcmVQb2x5bW9ycGhpYywgcHJlcGFyZVNsb3dDYWxsLCBzaXplLCBkaXNwYXRjaCwgbWV0
YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRTdGFydCwgZ2V0QXJndW1lbnRDb3VudCkKICAg
ICBlbmQpCiBlbmQKIAorbWFjcm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBnZXQs
IG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNw
YXRjaCwgbWV0YWRhdGEsIGZyYW1lU2xvd1BhdGgsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCwgaW52
b2tlQ2FsbCwgcHJlcGFyZVBvbHltb3JwaGljLCBwcmVwYXJlU2xvd0NhbGwpCisgICAgY2FsbFNs
b3dQYXRoKGZyYW1lU2xvd1BhdGgpCisgICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93
X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgIyBjYWxsZWVGcmFtZSBpbiByMQorICAg
IGlmIEpTVkFMVUU2NAorICAgICAgICBtb3ZlIHIxLCBzcAorICAgIGVsc2UKKyAgICAgICAgIyBU
aGUgY2FsbGVlRnJhbWUgaXMgbm90IHN0YWNrIGFsaWduZWQsIG1vdmUgZG93biBieSBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSB0byBhbGlnbgorICAgICAgICBpZiBBUk12NworICAgICAgICAgICAgc3Vi
cCByMSwgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQyCisgICAgICAgICAgICBtb3ZlIHQyLCBzcAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzdWJwIHIxLCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwg
c3AKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgY2FsbENhbGxTbG93UGF0aCgKKyAgICAgICAg
c2xvd1BhdGgsCisgICAgICAgICMgVGhvc2UgcGFyYW1ldGVycyBhcmUgcjAgYW5kIHIxCisgICAg
ICAgIG1hY3JvIChyZXN0b3JlZFBDT3JUaHJvdywgY2FsbGVlRnJhbWVQdHIpCisgICAgICAgICAg
ICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQCisgICAgICAgICAgICByZXN0b3Jl
U3RhdGVBZnRlckNDYWxsKCkKKyAgICAgICAgICAgIG1vdmUgY2FsbGVlRnJhbWVQdHIsIHNwCisg
ICAgICAgICAgICBnZXQobV9jYWxsZWUsIHQxKQorICAgICAgICAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MSwgdDApCisgICAgICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCisKKyAg
ICAgICAgICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8u
bV9jYWxsZWVPckNvZGVCbG9ja1t0NV0sIHQxCisgICAgICAgICAgICBidHB6IHQxLCAoY29uc3Rl
eHByIENhbGxMaW5rSW5mbzo6cG9seW1vcnBoaWNDYWxsZWVNYXNrKSwgLm5vdFBvbHltb3JwaGlj
CisgICAgICAgICAgICAjIHByZXBhcmVDYWxsIGluIExMSW50IGRvZXMgbm90IHVudGFnIHJldHVy
biBhZGRyZXNzLiBTbyB3ZSBuZWVkIHRvIHVudGFnIHRoYXQgaW4gdGhlIHRyYW1wb2xpbmUgc2Vw
YXJhdGVseS4KKyAgICAgICAgICAgICMgQnV0IHdlIHNob3VsZCBub3QgdW50YWcgdGhhdCBmb3Ig
cG9seW1vcnBoaWMgY2FsbCBjYXNlIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIGluIHRoZSBwb2x5
bW9ycGhpYyB0aHVuayBzaWRlLgorICAgICAgICAgICAgcHJlcGFyZVBvbHltb3JwaGljKG9wY29k
ZU5hbWUsIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgZHN0VmlydHVhbFJl
Z2lzdGVyLCBkaXNwYXRjaCwgSlNFbnRyeVB0clRhZykKKyAgICAgICAgICAgIGptcCAuZ29Qb2x5
bW9ycGhpYworCisgICAgICAgIC5ub3RQb2x5bW9ycGhpYzoKKyAgICAgICAgICAgIGJxbmVxIHQw
LCB0MSwgLm9wQ2FsbFNsb3cKKyAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MywgdDQsIHQx
KQorCisgICAgICAgIC5nb1BvbHltb3JwaGljOgorICAgICAgICAgICAgbG9hZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby51LmRhdGFJQy5tX21vbm9tb3JwaGljQ2Fs
bERlc3RpbmF0aW9uW3Q1XSwgdDUKKyAgICAgICAgICAgIGludm9rZUNhbGwob3Bjb2RlTmFtZSwg
c2l6ZSwgb3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCBkc3RWaXJ0dWFsUmVnaXN0ZXIs
IGRpc3BhdGNoLCB0NSwgdDEsIEpTRW50cnlQdHJUYWcpCisKKyAgICAgICAgLm9wQ2FsbFNsb3c6
CisgICAgICAgICAgICAjIDY0Yml0OnQwIDMyYml0KHQwLHQxKSBpcyBjYWxsZWUKKyAgICAgICAg
ICAgICMgdDIgaXMgQ2FsbExpbmtJbmZvKgorICAgICAgICAgICAgIyB0MyBpcyBjYWxsZXIncyBK
U0dsb2JhbE9iamVjdAorICAgICAgICAgICAgYWRkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fY2FsbExpbmtJbmZvLCB0NSwgdDIgIyBDYWxsTGlua0luZm8qIGluIHQyCisgICAgICAgICAg
ICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1fc2xvd1Bh
dGhDYWxsRGVzdGluYXRpb25bdDVdLCB0NQorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIHQzCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QzXSwg
dDMKKyAgICAgICAgICAgIHByZXBhcmVTbG93Q2FsbCgpCisgICAgICAgICAgICBjYWxsVGFyZ2V0
RnVuY3Rpb24oJW9wY29kZU5hbWUlX3Nsb3csIHNpemUsIG9wY29kZVN0cnVjdCwgdmFsdWVQcm9m
aWxlTmFtZSwgZHN0VmlydHVhbFJlZ2lzdGVyLCBkaXNwYXRjaCwgdDUsIEpTRW50cnlQdHJUYWcp
CisgICAgICAgIC5kb250VXBkYXRlU1A6CisgICAgICAgICAgICBqbXAgX2xsaW50X3Rocm93X2Zy
b21fc2xvd19wYXRoX3RyYW1wb2xpbmUKKyAgICAgICAgZW5kKQorZW5kCisKIGxsaW50T3Aob3Bf
cmV0LCBPcFJldCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hU
b0pJVEZvckVwaWxvZ3VlKCkKICAgICBnZXQobV92YWx1ZSwgdDIpCkBAIC0zMDQ2LDggKzMxMjIs
OCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wSXRlcmF0b3JPcGVu
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaAogICAgICAgICBtb3ZlIDEsIGRzdAogICAgIGVu
ZAogCi0KLSAgICBjYWxsSGVscGVyKG9wX2l0ZXJhdG9yX29wZW4sIF9sbGludF9zbG93X3BhdGhf
aXRlcmF0b3Jfb3Blbl9jYWxsLCBPcEl0ZXJhdG9yT3BlbiwgbV9pdGVyYXRvclByb2ZpbGUsIG1f
aXRlcmF0b3IsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldEJ5SWRDaGVja3Bv
aW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwg
Z2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAg
IGNhbGxIZWxwZXIob3BfaXRlcmF0b3Jfb3BlbiwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9v
cGVuX2NhbGwsIE9wSXRlcmF0b3JPcGVuLCBtX2l0ZXJhdG9yUHJvZmlsZSwgbV9pdGVyYXRvciwg
cHJlcGFyZUZvclJlZ3VsYXJDYWxsLCBpbnZva2VGb3JSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclBv
bHltb3JwaGljUmVndWxhckNhbGwsIHByZXBhcmVGb3JTbG93UmVndWxhckNhbGwsIHNpemUsIGdv
dG9HZXRCeUlkQ2hlY2twb2ludCwgbWV0YWRhdGEsIGdldENhbGxlZSwgZ2V0QXJndW1lbnRJbmNs
dWRpbmdUaGlzU3RhcnQsIGdldEFyZ3VtZW50SW5jbHVkaW5nVGhpc0NvdW50KQogCiAuZ2V0QnlJ
ZFN0YXJ0OgogICAgIG1hY3JvIHN0b3JlTmV4dEFuZERpc3BhdGNoKHZhbHVlKQpAQCAtMzEwNCw3
ICszMTgwLDggQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcEl0ZXJh
dG9yTmV4dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gKICAgICBlbmQKIAogICAgICMgVXNl
IG1fdmFsdWUgc2xvdCBhcyBhIHRtcCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgdG8gaXQg
bGF0ZXIuCi0gICAgY2FsbEhlbHBlcihvcF9pdGVyYXRvcl9uZXh0LCBfbGxpbnRfc2xvd19wYXRo
X2l0ZXJhdG9yX25leHRfY2FsbCwgT3BJdGVyYXRvck5leHQsIG1fbmV4dFJlc3VsdFByb2ZpbGUs
IG1fdmFsdWUsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290b0dldERvbmVDaGVja3Bv
aW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1ZGluZ1RoaXNTdGFydCwg
Z2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCisgICAgbWV0YWRhdGEodDUsIHQwKQorICAg
IGNhbGxIZWxwZXIob3BfaXRlcmF0b3JfbmV4dCwgX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9u
ZXh0X2NhbGwsIE9wSXRlcmF0b3JOZXh0LCBtX25leHRSZXN1bHRQcm9maWxlLCBtX3ZhbHVlLCBw
cmVwYXJlRm9yUmVndWxhckNhbGwsIGludm9rZUZvclJlZ3VsYXJDYWxsLCBwcmVwYXJlRm9yUG9s
eW1vcnBoaWNSZWd1bGFyQ2FsbCwgcHJlcGFyZUZvclNsb3dSZWd1bGFyQ2FsbCwgc2l6ZSwgZ290
b0dldERvbmVDaGVja3BvaW50LCBtZXRhZGF0YSwgZ2V0Q2FsbGVlLCBnZXRBcmd1bWVudEluY2x1
ZGluZ1RoaXNTdGFydCwgZ2V0QXJndW1lbnRJbmNsdWRpbmdUaGlzQ291bnQpCiAKIC5nZXREb25l
U3RhcnQ6CiAgICAgbWFjcm8gc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZShkb25lVmFsdWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCmluZGV4IGNhZDIxNWFlMzQz
Y2M4NmIzYTEwYTVmYWY2NjI4NDI0YTljMDJmMjguLmM3MDE2NjRhYjJiZmZmMjA3ZDEyZTVlMjIy
Zjk2NGNmYTkxMmEyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5l
YXNtL2Nsb29wLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2Nsb29w
LnJiCkBAIC01NzIsNiArNTcyLDE0IEBAIGRlZiBjbG9vcEVtaXRDYWxsU2xvd1BhdGhWb2lkKG9w
ZXJhbmRzKQogICAgICRhc20ucHV0YyAiI3tvcGVyYW5kc1swXS5jTGFiZWx9KCN7b3BlcmFuZHNb
MV0uY2xEdW1wfSwgI3tvcGVyYW5kc1syXS5jbER1bXB9KTsiCiBlbmQKIAorZGVmIGNsb29wRW1p
dENhbGxTbG93UGF0aDQob3BlcmFuZHMpCisgICAgJGFzbS5wdXRjICJ7IgorICAgICRhc20ucHV0
YyAiICAgIGNsb29wU3RhY2suc2V0Q3VycmVudFN0YWNrUG9pbnRlcihzcC52cCgpKTsiCisgICAg
JGFzbS5wdXRjICIgICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9ICN7b3BlcmFuZHNbMF0u
Y0xhYmVsfSgje29wZXJhbmRzWzFdLmNsRHVtcH0sICN7b3BlcmFuZHNbMl0uY2xEdW1wfSwgI3tv
cGVyYW5kc1szXS5jbER1bXB9LCAje29wZXJhbmRzWzRdLmNsRHVtcH0pOyIKKyAgICAkYXNtLnB1
dGMgIiAgICBkZWNvZGVSZXN1bHQocmVzdWx0LCB0MCwgdDEpOyIKKyAgICAkYXNtLnB1dGMgIn0i
CitlbmQKKwogY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICBkZWYgbG93ZXJDX0xPT1AKICAgICAgICAg
Y2FzZSBvcGNvZGUKQEAgLTExNzUsNiArMTE4Myw5IEBAIGRlZiBsb3dlckNfTE9PUAogICAgICAg
ICB3aGVuICJjbG9vcENhbGxTbG93UGF0aFZvaWQiCiAgICAgICAgICAgICBjbG9vcEVtaXRDYWxs
U2xvd1BhdGhWb2lkKG9wZXJhbmRzKQogCisgICAgICAgIHdoZW4gImNsb29wQ2FsbFNsb3dQYXRo
NCIKKyAgICAgICAgICAgIGNsb29wRW1pdENhbGxTbG93UGF0aDQob3BlcmFuZHMpCisKICAgICAg
ICAgIyBGb3IgZGVidWdnaW5nIG9ubHkuIFRoaXMgaXMgdXNlZCB0byBpbnNlcnQgaW5zdHJ1bWVu
dGF0aW9uIGludG8gdGhlCiAgICAgICAgICMgZ2VuZXJhdGVkIExMSW50QXNzZW1ibHkuaCBkdXJp
bmcgbGxpbnQgZGV2ZWxvcG1lbnQgb25seS4gRG8gbm90IHVzZQogICAgICAgICAjIGZvciBwcm9k
dWN0aW9uIGNvZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9pbnN0cnVjdGlvbnMucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0
cnVjdGlvbnMucmIKaW5kZXggOWNiYTVkNjhmM2NhZDMxY2ZhMmQ5NmVhNGM5YmJhOGRmZTlkYTli
Mi4uYzAwYjUxNmIzM2VjNWFkMTI5ZDU2YzNmZmQyM2U5ZjVlYzIwNWY3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgpAQCAtNDU5LDYg
KzQ1OSw3IEBACiAgICAgICJjbG9vcENhbGxOYXRpdmUiLCAgICAgICAgICMgb3BlcmFuZHM6IGNh
bGxlZQogICAgICAiY2xvb3BDYWxsU2xvd1BhdGgiLCAgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFy
Z2V0LCBjdXJyZW50RnJhbWUsIGN1cnJlbnRQQwogICAgICAiY2xvb3BDYWxsU2xvd1BhdGhWb2lk
IiwgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBjdXJyZW50RnJhbWUsIGN1cnJlbnRQQworICAg
ICAiY2xvb3BDYWxsU2xvd1BhdGg0IiwgICAgICAjIG9wZXJhbmRzOiBjYWxsVGFyZ2V0LCBhMCwg
YTEsIGEyLCBhMwogCiAgICAgICMgRm9yIGRlYnVnZ2luZyBvbmx5OgogICAgICAjIFRha2VzIG5v
IG9wZXJhbmRzIGJ1dCBzaW1wbHkgZW1pdHMgd2hhdGV2ZXIgZm9sbG93cyBpbiAvLyBjb21tZW50
cyBhcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZUJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgK
aW5kZXggOTU4MTA1ZDMyNjZkZGZmODViZTVkNzZkODdjZGU1Y2IzMzEzMTRjMy4uNDhmZDkyZjhi
NmE4ZWQyOTQ0YTcyNDhiMTU3ZDJhZjcyNzczYzViNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIGlubGluZSBi
b29sIGlzQ2FsbChDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAKIGNsYXNzIEV4ZWN1dGFi
bGVCYXNlIDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7
CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25FeGVjdXRhYmxlLmgKaW5kZXggYzlkMDBmNjhhNmMyZTNkMWU1M2M4Y2RkMjVmZTllYTMw
M2ExZDMyZS4uNjYyMDdlNWExZTJkZDYwNDEwZjlmYzRmNjBjZmY2YmViM2E0MTJmMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgK
QEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9C
b3guaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaAppbmRleCBmNmEwNWIwNjVlMzJk
OGFlY2Q1NjdiZjZhYjc0YWFlNjM4OTk3Nzc4Li5lNDc3OTJiODc2NGU5MWQ1MDYxMGU0Y2RkYWUz
MjMxYzE0NTllMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCkBAIC0zMyw2
ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoaml0Q2FnZVB0ciwgTm9QdHJUYWcpIFwK
ICAgICB2KHRhaWxDYWxsSlNFbnRyeVB0clRhZywgTm9QdHJUYWcpIFwKICAgICB2KHRhaWxDYWxs
SlNFbnRyeVNsb3dQYXRoUHRyVGFnLCBOb1B0clRhZykgXAorICAgIHYodGFpbENhbGxXaXRob3V0
VW50YWdKU0VudHJ5UHRyVGFnLCBOb1B0clRhZykgXAogICAgIHYobG9vcE9TUkVudHJ5LCBOb1B0
clRhZykgXAogICAgIHYoZW50cnlPU1JFbnRyeSwgTm9QdHJUYWcpIFwKICAgICB2KHdhc21PU1JF
bnRyeSwgTm9QdHJUYWcpIFwKQEAgLTQ2LDIwICs0NywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
I2RlZmluZSBKU0NfSlNfR0FURV9PUENPREVTKHYpIFwKICAgICB2KG9wX2NhbGwsIEpTRW50cnlQ
dHJUYWcpIFwKLSAgICB2KG9wX3RhaWxfY2FsbCwgSlNFbnRyeVB0clRhZykgXAogICAgIHYob3Bf
Y29uc3RydWN0LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9pdGVyYXRvcl9uZXh0LCBKU0Vu
dHJ5UHRyVGFnKSBcCiAgICAgdihvcF9pdGVyYXRvcl9vcGVuLCBKU0VudHJ5UHRyVGFnKSBcCi0g
ICAgdihvcF9jYWxsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFp
bF9jYWxsX3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY29uc3RydWN0
X3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfY2FsbF92YXJhcmdzX3Ns
b3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfdGFpbF9jYWxsX3ZhcmFyZ3Nf
c2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHNfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9jb25z
dHJ1Y3RfdmFyYXJnc19zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKKyAgICB2KG9wX2Nh
bGxfdmFyYXJncywgSlNFbnRyeVB0clRhZykgXAorICAgIHYob3BfY29uc3RydWN0X3ZhcmFyZ3Ms
IEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NhbGxfc2xvdywgSlNFbnRyeVB0clRhZykgXAor
ICAgIHYob3BfdGFpbF9jYWxsX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2NvbnN0
cnVjdF9zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAgdihvcF9pdGVyYXRvcl9uZXh0X3Nsb3cs
IEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9wX2l0ZXJhdG9yX29wZW5fc2xvdywgSlNFbnRyeVB0
clRhZykgXAorICAgIHYob3BfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAg
ICB2KG9wX3RhaWxfY2FsbF92YXJhcmdzX3Nsb3csIEpTRW50cnlQdHJUYWcpIFwKKyAgICB2KG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCisgICAg
dihvcF9jb25zdHJ1Y3RfdmFyYXJnc19zbG93LCBKU0VudHJ5UHRyVGFnKSBcCiAgICAgdihvcF9j
YWxsX2V2YWxfc2xvdywgSlNFbnRyeVNsb3dQYXRoUHRyVGFnKSBcCi0gICAgdihvcF9pdGVyYXRv
cl9uZXh0X3Nsb3csIEpTRW50cnlTbG93UGF0aFB0clRhZykgXAotICAgIHYob3BfaXRlcmF0b3Jf
b3Blbl9zbG93LCBKU0VudHJ5U2xvd1BhdGhQdHJUYWcpIFwKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDljZjVmZWEwMTk4
NDlkYjZlNjYwOTEwYmI5NDUxY2QyN2MyNWZiYzUuLmVjNDgyMmY1YTkwM2Q0ZmI4NWNiNDg0MWE0
Y2Q2OGYwYzEwYmZiZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTEz
OCw2ICsxMzgsNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJK
U1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIkxMSW50RXhj
ZXB0aW9ucy5oIgogI2luY2x1ZGUgIk1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmgiCiAjaW5jbHVk
ZSAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmgiCkBAIC05MTAsNiArOTExLDQxIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kCiAg
ICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2ludGVybmFs
X2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lKTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElMaW5rQ2FsbCgpCit7CisjaWYgRU5BQkxFKEpJ
VCkKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIHJldHVybiBnZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCk7CisjZW5kaWYKKyAgICByZXR1cm4gTExJbnQ6OmdldENvZGVSZWY8SlNFbnRyeVB0clRhZz4o
bGxpbnRfbGlua19jYWxsX3RyYW1wb2xpbmUpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SlNFbnRyeVB0clRhZz4gVk06OmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgp
Cit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAg
IHJldHVybiBnZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikudGVtcGxhdGUgcmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKTsKKyNlbmRpZgorICAgIHJldHVy
biBMTEludDo6Y2FsbFRvVGhyb3coKnRoaXMpLnRlbXBsYXRlIHJldGFnZ2VkPEpTRW50cnlQdHJU
YWc+KCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4g
Vk06OmdldENUSVZpcnR1YWxDYWxsKENhbGxNb2RlIGNhbGxNb2RlKQoreworI2lmIEVOQUJMRShK
SVQpCisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICByZXR1cm4gdmlydHVhbFRo
dW5rRm9yKCp0aGlzLCBjYWxsTW9kZSk7CisjZW5kaWYKKyAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7
CisgICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRD
b2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX2NhbGxfdHJhbXBvbGlu
ZSk7CisgICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgcmV0dXJuIExMSW50OjpnZXRD
b2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihsbGludF92aXJ0dWFsX3RhaWxfY2FsbF90cmFt
cG9saW5lKTsKKyAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBM
TEludDo6Z2V0Q29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jb25z
dHJ1Y3RfdHJhbXBvbGluZSk7CisgICAgfQorICAgIHJldHVybiBMTEludDo6Z2V0Q29kZVJlZjxK
SVRTdHViUm91dGluZVB0clRhZz4obGxpbnRfdmlydHVhbF9jYWxsX3RyYW1wb2xpbmUpOworfQor
CiBWTTo6Q2xpZW50RGF0YTo6fkNsaWVudERhdGEoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKaW5kZXggOWVmMzgyYzYwZWU4MzRmY2JiMWQ5MDgxYzc4MThmZDc4NjdmYTQwOC4u
M2FiZjcxMWE2NTUyYmU0YjMxYWZlNDdlMDU5ZjMzMWUwODk5MTkxZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCkBAIC0xMDYsNiArMTA2LDggQEAgY2xhc3MgQmFzaWNCbG9ja0xvY2F0
aW9uOwogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwogY2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNS
ZWdpc3RyeTsKIGNsYXNzIENhbGxGcmFtZTsKK2NsYXNzIENhbGxMaW5rSW5mbzsKK2VudW0gY2xh
c3MgQ2FsbE1vZGU7CiBzdHJ1Y3QgQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU7CiBjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CkBAIC05MDIsNiArOTA0LDkgQEAgY2xhc3MgVk0g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlz
dE5vZGU8Vk0+IHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRCb3VuZEZ1bmN0aW9uKGJvb2wg
aXNKU0Z1bmN0aW9uLCBib29sIGNhbkNvbnN0cnVjdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGdldENUSUxpbmtDYWxsKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpT
RW50cnlQdHJUYWc+IGdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gZ2V0Q1RJVmlydHVh
bENhbGwoQ2FsbE1vZGUpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBleGNlcHRpb25PZmZzZXQo
KQogICAgIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggODZiOGM1MGFjMDcyM2Q3OWI3MTgxMzMxMjc3OTc2YjI2YzM5YWM2ZC4uNTM1NjJk
NDhhZjE2MmQxNTJiNTg1M2Q5ODc5ZWViY2UwMjBjNjEwNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMS0x
MS0xNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0Nd
IFVzZSBDYWxsTGlua0luZm8gaW4gTExJbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFy
YXRpLgorCisgICAgICAgICogc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1uZWVkcy10by1iZS1h
d2FyZS1vZi1wcm94eS5qczoKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2Fz
bS1uYW1lLXNlY3Rpb24uanM6CisgICAgICAgIChwbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9m
aWxlci52bS5pc1dhc21TdXBwb3J0ZWQpOgorICAgICAgICAqIHN0cmVzcy9zYW1wbGluZy1wcm9m
aWxlci13YXNtLmpzOgorICAgICAgICAocGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIu
dm0uaXNXYXNtU3VwcG9ydGVkKToKKyAgICAgICAgKiBzdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIv
c2FtcGxpbmdQcm9maWxlci5qczoKKyAgICAgICAgKGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2UpOgor
ICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2Vj
dGlvbi5qczoKKwogMjAyMS0xMS0xNCAgTWlraGFpbCBSLiBHYWRlbGhhICA8bWlraGFpbEBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFByZXZlbnQgZnVzZWQgbXVsdGlwbHkgYWRkIGR1cmluZyBQYXJz
ZUludApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4tZnRsLW5lZWRz
LXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzIGIvSlNUZXN0cy9zdHJlc3MvaXMtY2FsbGFibGUtaW4t
ZnRsLW5lZWRzLXRvLWJlLWF3YXJlLW9mLXByb3h5LmpzCmluZGV4IDUwY2FlZWQxMTQ4NDI5ZmQx
YjVjZTBiMGZlYWU2YmRkZGU2NzEwYjguLjk0ZGFiNDZkMmQ3MTg0ZjM1ZDQzZTJkYjRhMmRkNTY0
MTk4YmVmZjUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2lzLWNhbGxhYmxlLWluLWZ0bC1u
ZWVkcy10by1iZS1hd2FyZS1vZi1wcm94eS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9pcy1jYWxs
YWJsZS1pbi1mdGwtbmVlZHMtdG8tYmUtYXdhcmUtb2YtcHJveHkuanMKQEAgLTEsNCArMSw0IEBA
Ci0vL0AgcnVuRGVmYXVsdCgiLS12YWxpZGF0ZU9wdGlvbnM9dHJ1ZSAtLXVzZUNvbmN1cnJlbnRK
SVQ9ZmFsc2UiLCAiLS11c2VDb25jdXJyZW50R0M9ZmFsc2UiLCAiLS10aHJlc2hvbGRGb3JKSVRT
b29uPTEwIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAiLCAiLS10aHJlc2hvbGRG
b3JPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwPTEwMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplU29vbj0xMDAiLCAiLS10aHJl
c2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMDAiLCAiLS10aHJlc2hvbGRGb3JGVExP
cHRpbWl6ZVNvb249MTAwMCIsICItLXZhbGlkYXRlQkNFPXRydWUiLCAiLS11c2VGVExKSVQ9dHJ1
ZSIpCisvL0AgcnVuRGVmYXVsdCgiLS12YWxpZGF0ZU9wdGlvbnM9dHJ1ZSIsICItLXVzZUNvbmN1
cnJlbnRKSVQ9ZmFsc2UiLCAiLS11c2VDb25jdXJyZW50R0M9ZmFsc2UiLCAiLS10aHJlc2hvbGRG
b3JKSVRTb29uPTEwIiwgIi0tdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA9MTAiLCAiLS10aHJl
c2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMCIsICItLXRocmVzaG9sZEZvck9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwPTEwMCIsICItLXRocmVzaG9sZEZvck9wdGltaXplU29vbj0xMDAiLCAi
LS10aHJlc2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwPTEwMDAiLCAiLS10aHJlc2hvbGRG
b3JGVExPcHRpbWl6ZVNvb249MTAwMCIsICItLXZhbGlkYXRlQkNFPXRydWUiLCAiLS11c2VGVExK
SVQ9dHJ1ZSIpCiAKIGZ1bmN0aW9uIG1haW4oKSB7CiAgICAgbGV0IHYxNjI7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci13YXNtLW5hbWUtc2VjdGlvbi5qcyBi
L0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzCmlu
ZGV4IDY4OWEwMDVhYjU1NWExZmM2MDFhNTRlNGViZjk0ZTk5YTY2OGY3N2UuLjVjMjIwZmQ3NmNk
YzVjNDBlNTljYzY2ZTU3MzQyYzcyZDhjN2YzYWEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNz
L3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL3NhbXBsaW5nLXByb2ZpbGVyLXdhc20tbmFtZS1zZWN0aW9uLmpzCkBAIC02OSw1ICs2OSw1
IEBACiAgICAgdmFyIHdhc21FbnRyeSA9IGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm4gaW5z
dGFuY2UuZXhwb3J0cy5fcGFycm90KDEpOwogICAgIH07Ci0gICAgcnVuVGVzdCh3YXNtRW50cnks
IFsiX3NpbGx5IiwgIih1bmtub3duKSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfZWdnc10iLCAiPD8+
Lndhc20tZnVuY3Rpb25bX2JhY29uXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfc3BhbV0iLCAiPD8+
Lndhc20tZnVuY3Rpb25bX3BhcnJvdF0iLCAid2FzbS1zdHViIiwgIjI0IiwgIndhc21FbnRyeSJd
KTsKKyAgICBydW5UZXN0KHdhc21FbnRyeSwgWyJfc2lsbHkiLCAiKHVua25vd24pIiwgIjw/Pi53
YXNtLWZ1bmN0aW9uW19lZ2dzXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfYmFjb25dIiwgIjw/Pi53
YXNtLWZ1bmN0aW9uW19zcGFtXSIsICI8Pz4ud2FzbS1mdW5jdGlvbltfcGFycm90XSIsICIodW5r
bm93bikiLCAid2FzbUVudHJ5Il0pOwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2Ft
cGxpbmctcHJvZmlsZXItd2FzbS5qcyBiL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
LXdhc20uanMKaW5kZXggY2QyMWYyODhjMTQ4YTRiNzQwNWJmODY4ZGVmOWI1NDU3MzQwNTA0NS4u
MDZkZjAxMjQ5NTk2OWUyODQyMTg3Nzg2OTAxMzViZjA5MDEwZWM2ZCAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXItd2FzbS5qcworKysgYi9KU1Rlc3RzL3N0cmVz
cy9zYW1wbGluZy1wcm9maWxlci13YXNtLmpzCkBAIC04LDUgKzgsNSBAQAogICAgIHZhciB3YXNt
RW50cnkgPSBmdW5jdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmV4cG9ydHMubG9v
cCgxMDAwMDAwMCk7CiAgICAgfTsKLSAgICBydW5UZXN0KHdhc21FbnRyeSwgWyI8Pz4ud2FzbS1m
dW5jdGlvblswXSIsICJ3YXNtLXN0dWIiLCAiMCIsICJ3YXNtRW50cnkiXSk7CisgICAgcnVuVGVz
dCh3YXNtRW50cnksIFsiPD8+Lndhc20tZnVuY3Rpb25bMF0iLCAiKHVua25vd24pIiwgIndhc21F
bnRyeSJdKTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVy
L3NhbXBsaW5nUHJvZmlsZXIuanMgYi9KU1Rlc3RzL3N0cmVzcy9zYW1wbGluZy1wcm9maWxlci9z
YW1wbGluZ1Byb2ZpbGVyLmpzCmluZGV4IDk2NDJkZGM3YzFlNmYwNmUzYjEzMjc5YzBlNGEwMjVi
NTRkY2FiZjEuLjFiOTJlOTQ4NTRhZjYzZjY3ZDA4ZjU0ODg3YzUyMTc5MTRlZTJiZjUgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL3NhbXBsaW5nLXByb2ZpbGVyL3NhbXBsaW5nUHJvZmlsZXIu
anMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2FtcGxpbmctcHJvZmlsZXIvc2FtcGxpbmdQcm9maWxl
ci5qcwpAQCAtNzAsMTEgKzcwLDEzIEBAIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKICAgICAKICAg
ICBsZXQgbm9kZSA9IHRyZWU7CiAgICAgZm9yIChsZXQgaSA9IHN0YWNrVHJhY2UubGVuZ3RoOyBp
LS07ICkgeworICAgICAgICBsZXQgcHJldiA9IG5vZGU7CiAgICAgICAgIG5vZGUgPSBub2RlLmNo
aWxkcmVuW3N0YWNrVHJhY2VbaV1dOwogICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAg
IGlmIChWRVJCT1NFKSB7CiAgICAgICAgICAgICAgICAgcHJpbnQoImZhaWxpbmcgb24gIiArIGkg
KyAiIDogIiArIHN0YWNrVHJhY2VbaV0pOwogICAgICAgICAgICAgICAgIHByaW50KEpTT04uc3Ry
aW5naWZ5KHRyZWUpKTsKKyAgICAgICAgICAgICAgICBwcmludChPYmplY3Qua2V5cyhwcmV2LmNo
aWxkcmVuKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KQEAgLTEwOCw3ICsxMTAsNyBAQCBmdW5jdGlvbiBydW5UZXN0KGZ1bmMsIHN0YWNrVHJh
Y2VPclN0cmluZykgewogICAgICAgICB9CiAgICAgfSB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0
VGltZSA8IHRpbWVUb0ZhaWwpOwogICAgIHByaW50KEpTT04uc3RyaW5naWZ5KHJvb3QsIHVuZGVm
aW5lZCwgMikpOwotICAgIGRvZXNUcmVlSGF2ZVN0YWNrVHJhY2Uocm9vdCwgc3RhY2tUcmFjZSwg
dHJ1ZSwgdHJ1ZSk7CisgICAgZG9lc1RyZWVIYXZlU3RhY2tUcmFjZShyb290LCBzdGFja1RyYWNl
T3JTdHJpbmcsIHRydWUsIHRydWUpOwogICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHN0YWNrIHRy
YWNlIik7CiB9CiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1l
U2VjdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9uYW1lU2VjdGlvbi5qcwpp
bmRleCA2ODA1ZTY4OWY1Yzg3OWUyY2E1MDljODhkM2U3YjM3NmRlMDlmYWFhLi4zM2M4NmJmMWNk
ZTlhOGRhYjExOGUwZTRjYjBiYWNkNTliNzQ5MWU5IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbmFtZVNlY3Rpb24uanMKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL25hbWVTZWN0aW9uLmpzCkBAIC02OSw0ICs2OSw0IEBACiBhc3NlcnQuZXEoc3RhY2t0
cmFjZVszXSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19iYWNvbl1AW3dhc20gY29kZV0iKTsKIGFzc2Vy
dC5lcShzdGFja3RyYWNlWzRdLCAiPD8+Lndhc20tZnVuY3Rpb25bX3NwYW1dQFt3YXNtIGNvZGVd
Iik7CiBhc3NlcnQuZXEoc3RhY2t0cmFjZVs1XSwgIjw/Pi53YXNtLWZ1bmN0aW9uW19wYXJyb3Rd
QFt3YXNtIGNvZGVdIik7Ci1hc3NlcnQuZXEoc3RhY2t0cmFjZVs2XSwgIndhc20tc3R1YkBbd2Fz
bSBjb2RlXSIpOyAvLyB3YXNtIGVudHJ5Cithc3NlcnQuZXEoc3RhY2t0cmFjZVs2XSwgIndhc20t
c3R1YkBbbmF0aXZlIGNvZGVdIik7IC8vIHdhc20gZW50cnkK
</data>

          </attachment>
      

    </bug>

</bugzilla>